blob: 585bf931fa9e5371880282cc5ceb900d74bde2d0 [file] [log] [blame]
#!groovy
// This is a Jenkinsfile for a scripted pipeline for the SCPF tests
// properties([pipelineTriggers([cron('30 19 * * *')])])
// TODO: Exception handling around steps
SCPF = [
SCPFcbench: [ test:'SCPFcbench', table:'cbench_bm_tests', results:'cbench_bm_results', file:'CbenchDB'],
SCPFhostLat: [ test:'SCPFhostLat', table:'host_latency_tests', results:'host_latency_results', file:'HostAddLatency'],
SCPFportLat: [ test:'SCPFportLat', table:'port_latency_details', results:'port_latency_results', file:'/tmp/portEventResultDb'],
SCPFflowTp1g: [ test:'SCPFflowTp1g', table:'flow_tp_tests', results:'flow_tp_results', file:'flowTP1gDB'],
SCPFscaleTopo: [ test:'SCPFscaleTopo', table:'scale_topo_latency_details', results:'scale_topo_latency_results', file:'/tmp/scaleTopoResultDb'],
SCPFswitchLat: [ test:'SCPFswitchLat', table:'switch_latency_details', results:'switch_latency_results', file:'/tmp/switchEventResultDb'],
SCPFbatchFlowResp: [ test:'SCPFbatchFlowResp', table:'batch_flow_tests', results:'batch_flow_results', file:'SCPFbatchFlowRespData'],
SCPFintentEventTp: [ test:'SCPFintentEventTp', table:'intent_tp_tests', results:'intent_tp_results', file:'IntentEventTPDB'],
SCPFintentRerouteLat: [ test:'SCPFintentRerouteLat', table:'intent_reroute_latency_tests', results:'intent_reroute_latency_results', file:'IntentRerouteLatDB'],
SCPFscalingMaxIntents: [ test:'SCPFscalingMaxIntents', table:'max_intents_tests', results:'max_intents_results', file:'ScalingMaxIntentDB'],
SCPFintentEventTpWithFlowObj: [ test:'SCPFintentEventTp --params TEST/flowObj=True', table:'intent_tp_fobj_tests', results:'intent_tp_fobj_results', file:'IntentEventTPflowObjDB'],
SCPFintentInstallWithdrawLat: [ test:'SCPFintentInstallWithdrawLat', table:'intent_latency_tests', results:'intent_latency_results', file:'IntentInstallWithdrawLatDB'],
SCPFintentRerouteLatWithFlowObj: [ test:'SCPFintentRerouteLat --params TEST/flowObj=True', table:'intent_reroute_latency_fobj_tests', results:'intent_reroute_latency_fobj_results', file:'IntentRerouteLatDBWithFlowObj'],
SCPFscalingMaxIntentsWithFlowObj: [ test:'SCPFscalingMaxIntents --params TEST/flowObj=True', table:'max_intents_fobj_tests', results:'max_intents_fobj_results', file:'ScalingMaxIntentDBWFO'],
SCPFintentInstallWithdrawLatWithFlowObj: [ test:'SCPFintentInstallWithdrawLat --params TEST/flowObj=True', table:'intent_latency_fobj_tests', results:'intent_latency_fobj_results', file:'IntentInstallWithdrawLatDBWFO']
]
// Get just the test names
def defaultTests = SCPF.keySet().toArray()
// Convert to a string with new line deliminators for user input
StringBuilder sb = new StringBuilder();
for (String s : defaultTests)
{
sb.append(s);
sb.append("\n");
}
choices = sb.toString();
// Define sets of tests
SCPF_Basic = "SCPFswitchLat\nSCPFportLat\nSCPFintentInstallWithdrawLat\nSCPFintentEventTp\nSCPFflowTp1g\nSCPFcbench\nSCPFbatchFlowResp"
SCPF_ExtraSetA = "SCPFintentRerouteLat\nSCPFscalingMaxIntents\nSCPFhostLat\nSCPFscaleTopo"
SCPF_ExtraSetB = "SCPFintentInstallWithdrawLatWithFlowObj\nSCPFintentEventTpWithFlowObj\nSCPFintentRerouteLatWithFlowObj\nSCPFscalingMaxIntentsWithFlowObj"
try {
timeout(time: 120, unit: 'SECONDS') {
// This is kind of hacky, I can't seem to find the correct way to get a "build with parameters" button
testcases = input message: 'Tests to run?', parameters:[[$class:'TextParameterDefinition', defaultValue: choices, description:'', name: 'Run these tests']]
}
} catch(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException Err) {
echo("Input timed out or cancled, using default values")
// Set tests based on day of week
def now = new Date()
echo(now.toString())
today = now[Calendar.DAY_OF_WEEK]
switch (today) {
case Calendar.MONDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetB
println "Defaulting to Monday tests:" + choices
break
case Calendar.TUESDAY:
choices = SCPF_Basic
println "Defaulting to Tuesday tests:" + choices
break
case Calendar.WEDNESDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetA
println "Defaulting to Wednesday tests:" + choices
break
case Calendar.THURSDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetB
println "Defaulting to Thursday tests:" + choices
break
case Calendar.FRIDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetA + "\n" + SCPF_ExtraSetB
println "Defaulting to Fridat tests:" + choices
break
case Calendar.SATURDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetA + "\n" + SCPF_ExtraSetB
println "Defaulting to Saturday tests:" + choices
break
case Calendar.SUNDAY:
choices = SCPF_Basic + "\n" + SCPF_ExtraSetA
println "Defaulting to Sunday tests:" + choices
break
}
testcases = choices
}
echo("Testcases:")
//println testcases
// TODO REMOVE AFTER DEBUGGING
def testsToRun = testcases.tokenize("\n;, ")
for (String test : testsToRun) {
println test
}
def tests = [:]
for (int i = 0; i < testsToRun.size(); i++) {
// Get the actual string here.
def testName = testsToRun[i]
def stepName = "Running ${testName}"
tests[stepName] = SCPFTest(testName)
}
// run the tests
parallel tests
// The testName should be the key from the SCPF map
def SCPFTest( testName ) {
return {
node ("TestStation-BMs"){ // only run SCPF tests on the BM cluster
def prop = readProperties(file:'/var/jenkins/TestONOS.property') // TODO set defaults
withEnv(['ONOSBranch='+prop["ONOSBranch"],
'ONOSJVMHeap='+prop["ONOSJVMHeap"],
'TestONBranch='+prop["TestONBranch"],
'ONOSTag='+prop["ONOSTag"],
'WikiPrefix='+prop["WikiPrefix"]]){
stage(testName) {
sh '''#!/bin/bash -l
set -i # interactive
shopt -s expand_aliases # expand alias in non-interactive mode
export PYTHONUNBUFFERED=1
ifconfig
echo "ONOS Branch is: $ONOSBranch"
echo "TestON Branch is: $TestONBranch"
echo "Test date: "
date
cd ~
export PATH=$PATH:onos/tools/test/bin
timeout 240 stc shutdown
timeout 240 stc teardown
timeout 240 stc shutdown
cd ~/OnosSystemTest/TestON/bin
git log |head
./cleanup.sh
''' + "./cli.py run " + SCPF[testName]['test']
// Post Results
withCredentials([
string(credentialsId: 'db_pass', variable: 'pass'),
string(credentialsId: 'db_user', variable: 'user'),
string(credentialsId: 'db_host', variable: 'host'),
string(credentialsId: 'db_port', variable: 'port')]) {
def database_command = pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c \"INSERT INTO " + SCPF[testName]['table'] + " VALUES('\$DATE','" + SCPF[testName]['results'] + "','\$BUILD_NUMBER', '\$ONOSBranch', \$line);\""
if (testName == "SCPFscaleTopo" || testName == "SCPFswitchLat" || testName == "SCPFportLat") {
database_command = pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c \"INSERT INTO " + SCPF[testName]['table'] + " VALUES('\$DATE','" + SCPF[testName]['results'] + "','\$BUILD_NUMBER', \$line, '\$ONOSBranch');\""
}
sh '''#!/bin/bash
export DATE=\$(date +%F_%T)
cd ~
pwd
cd /tmp
while read line
do
echo \$line
echo ''' + database_command + '''
done< ''' + SCPF[testName]['file']
}
// Fetch Logs
sh '''#!/bin/bash
cd ~/OnosSystemTest/TestON/logs
echo "Job Name is: ${JOB_NAME}"
TestONlogDir=$(ls -t | grep ${TEST_NAME}_ |head -1)
echo "########################################################################################"
echo "##### copying ONOS logs from all nodes to TestON/logs directory: ${TestONlogDir}"
echo "########################################################################################"
cd $TestONlogDir
if [ $? -eq 1 ]
then
echo "Job name does not match any test suite name to move log!"
else
pwd
for i in $OC{1..7}; do onos-fetch-logs $i || echo log does not exist; done
fi'''
}
}
}
}
}