Enforce code style for groovy files
Change-Id: I7d8bd721c0e5b744777a5ad92386d36a524f93ec
diff --git a/TestON/JenkinsFile/CHO_Graph_Generator b/TestON/JenkinsFile/CHO_Graph_Generator
index 04a6f74..91ad9e5 100644
--- a/TestON/JenkinsFile/CHO_Graph_Generator
+++ b/TestON/JenkinsFile/CHO_Graph_Generator
@@ -42,16 +42,16 @@
// create a bash script that will generate the graph
graphScript = generateGraphScript( branchList )
-stage( 'Generating-Graph' ){
+stage( 'Generating-Graph' ) {
// This will run on TestStation-Fabric5s node.
- node( "TestStation-Fabric5s" ){
+ node( "TestStation-Fabric5s" ) {
// run the bash script on this node.
runScript( graphScript )
}
}
// stage that will trigger postjob.
// Need to be executed outside the current node to avoid deadlock.
-stage( 'posting-result' ){
+stage( 'posting-result' ) {
postJob()
}
@@ -60,7 +60,7 @@
graphScript = ''''''
// In case there are multiple branches running.
- for( branch in branchList ){
+ for ( branch in branchList ){
branchDir = scriptDir + branch + "/"
graphScript += '''export BRANCH=''' + branchDir + '''
# make branch dir if not existing.
@@ -75,14 +75,15 @@
# run the log-summary that will export status
bash log-summary;''' + '''
# run Rscript with it's parameters.
- Rscript ''' + script_file + ' ' + branchDir + 'event.csv ' +
- branchDir + 'failure.csv ' + branchDir + 'error.csv ' +
- branch + ' 60 ' + hours + ' ' + saving_directory + ''';
+ Rscript ''' + script_file + ' ' + branchDir + 'event.csv ' +
+ branchDir + 'failure.csv ' + branchDir + 'error.csv ' +
+ branch + ' 60 ' + hours + ' ' + saving_directory + ''';
'''
print( graphScript )
}
return graphScript
}
+
def runScript( graphScript ){
// run bash script that will init the environment and run the graph generating part.
sh '''#!/bin/bash -l
@@ -92,6 +93,7 @@
cd ''' + scriptDir + ''';
''' + graphScript
}
+
def postJob(){
// Triggering jenkins job called `postjob-Fabric5`
jobToRun = "postjob-Fabric5"
diff --git a/TestON/JenkinsFile/FUNCJenkinsFile b/TestON/JenkinsFile/FUNCJenkinsFile
index 613dbf5..419f35d 100644
--- a/TestON/JenkinsFile/FUNCJenkinsFile
+++ b/TestON/JenkinsFile/FUNCJenkinsFile
@@ -50,11 +50,12 @@
funcs.printTestToRun( testsToRun )
// run the test sequentially and save the function into the dictionary.
-def tests = [:]
-for( String test : FUNC.keySet() ){
- toBeRun = testsToRun.contains( test )
+def tests = [ : ]
+for ( String test : FUNC.keySet() ){
+ def toBeRun = testsToRun.contains( test )
def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- tests[stepName] = funcs.runTest( test, toBeRun, prop, test, false, FUNC, graph_generator_file, graph_saved_directory )
+ tests[ stepName ] = funcs.runTest( test, toBeRun, prop, test, false,
+ FUNC, graph_generator_file, graph_saved_directory )
}
// get the start time of the test.
@@ -69,4 +70,4 @@
funcs.generateOverallGraph( prop, FUNC, graph_saved_directory )
// send the notification to Slack that running FUNC tests was ended.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
+funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/FabricJenkinsfileTrigger b/TestON/JenkinsFile/FabricJenkinsfileTrigger
index 21f5ec4..04695f7 100644
--- a/TestON/JenkinsFile/FabricJenkinsfileTrigger
+++ b/TestON/JenkinsFile/FabricJenkinsfileTrigger
@@ -43,23 +43,11 @@
wikiContents = ""
testcases = [
- "FUNC" : [ tests : "" , nodeName : "VM", wikiContent : "" ],
- "HA" : [ tests : "" , nodeName : "VM", wikiContent : "" ],
- "SCPF" : [ tests : "" , nodeName : "BM", wikiContent : "" ],
- "SR" : [ tests : "", nodeName : [ "Fabric2", "Fabric3", "Fabric4" ], wikiContent : "" ],
- "USECASE" : [ tests : "" , nodeName : "BM", wikiContent : "" ]
-]
-
-// depends on the First two letter of the testname, it will decide which category to put test.
-Prefix_organizer = [
- "FU" : "FUNC",
- "HA" : "HA",
- "PL" : "USECASE",
- "SA" : "USECASE",
- "SC" : "SCPF",
- "SR" : "SR",
- "US" : "USECASE",
- "VP" : "USECASE"
+ "FUNC": [ tests: "", nodeName: "VM", wikiContent: "" ],
+ "HA": [ tests: "", nodeName: "VM", wikiContent: "" ],
+ "SCPF": [ tests: "", nodeName: "BM", wikiContent: "" ],
+ "SR": [ tests: "", nodeName: [ "Fabric2", "Fabric3", "Fabric4" ], wikiContent: "" ],
+ "USECASE": [ tests: "", nodeName: "BM", wikiContent: "" ]
]
// set some variables from the parameter
@@ -100,19 +88,20 @@
// get the post_result. This will be affected only for the manual runs.
post_result = params.PostResult
-if( !manually_run ){
+if ( !manually_run ){
// If it is automated running, it will post the beginning message to the channel.
- slackSend( channel:'sr-failures', color:'#03CD9F',
- message:":sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles:\n"
- + "Starting tests on : " + now.toString()
- + "\n:sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles:" )
+ slackSend( channel: 'sr-failures', color: '#03CD9F',
+ message: ":sparkles:" * 16 + "\n" +
+ "Starting tests on : " + now.toString() +
+ "\n" + ":sparkles:" * 16 )
- // Choices will get the list of the test with Segment Rounting type tests.
+ // Choices will get the list of the test with Segment Routing type tests.
SR_choices += adder( "SR", "basic", true )
if ( today == Calendar.FRIDAY ){
// if today is Friday, it will also test tests with extra_A category
SR_choices += adder( "SR", "extra_A", true )
- } else if( today == Calendar.SATURDAY ){
+ }
+ else if ( today == Calendar.SATURDAY ){
// if today is Saturday, it will add the test with extra_B category
SR_choices += adder( "SR", "extra_B", true )
}
@@ -126,7 +115,8 @@
isOldFlow = params.isOldFlow
println "Tests to be run manually : "
-}else{
+}
+else {
// set the list of the tests to run.
testcases[ "SR" ][ "tests" ] = SR_choices
println "Defaulting to " + day + " tests:"
@@ -137,27 +127,46 @@
// This will hold the block of code to be run.
def runTest = [
- "Fabric2" : [:],
- "Fabric3" : [:],
- "Fabric4" : [:]
+ "Fabric2": [ : ],
+ "Fabric3": [ : ],
+ "Fabric4": [ : ]
]
if ( manually_run ){
// for manual run situation.
- for( String test in testcases.keySet() ){
+ for ( String test in testcases.keySet() ){
println test
// Unless the list of the tests on the test category is empty, it will save the block of code to run in dictionary.
if ( testcases[ test ][ "tests" ] != "" ){
- runTest[ testcases[ test ][ "nodeName" ][ nodeOn( onos_b ) ] ][ test ] = triggerFuncs.trigger_pipeline( onos_b, testcases[ test ][ "tests" ], testcases[ test ][ "nodeName" ][ nodeOn( onos_b ) ], test, manually_run, onos_tag )
+ runTest[ testcases[ test ][ "nodeName" ][ nodeOn( onos_b ) ] ][ test ] = triggerFuncs.
+ trigger_pipeline( onos_b,
+ testcases[ test ][ "tests" ],
+ testcases[ test ][ "nodeName" ][ nodeOn( onos_b ) ],
+ test,
+ manually_run,
+ onos_tag )
}
}
-}else{
+}
+else {
// for automated situation, it will save current version to Fabric4, previous version to Fabric2 and before_previous_version to Fabric3.
- runTest[ "Fabric4" ][ "SR" ] = triggerFuncs.trigger_pipeline( current_version, testcases[ "SR" ][ "tests" ], testcases[ "SR" ][ "nodeName" ][ 2 ], "SR", manually_run, onos_tag )
- runTest[ "Fabric2" ][ "SR" ] = triggerFuncs.trigger_pipeline( previous_version, testcases[ "SR" ][ "tests" ], testcases[ "SR" ][ "nodeName" ][ 0 ], "SR", manually_run, onos_tag )
- runTest[ "Fabric3" ][ "SR" ] = triggerFuncs.trigger_pipeline( before_previous_version, testcases[ "SR" ][ "tests" ], testcases[ "SR" ][ "nodeName" ][ 1 ], "SR", manually_run, onos_tag )
+ runTest[ "Fabric4" ][ "SR" ] = triggerFuncs.trigger_pipeline( current_version,
+ testcases[ "SR" ][ "tests" ],
+ testcases[ "SR" ][ "nodeName" ][ 2 ],
+ "SR",
+ manually_run, onos_tag )
+ runTest[ "Fabric2" ][ "SR" ] = triggerFuncs.trigger_pipeline( previous_version,
+ testcases[ "SR" ][ "tests" ],
+ testcases[ "SR" ][ "nodeName" ][ 0 ],
+ "SR",
+ manually_run, onos_tag )
+ runTest[ "Fabric3" ][ "SR" ] = triggerFuncs.trigger_pipeline( before_previous_version,
+ testcases[ "SR" ][ "tests" ],
+ testcases[ "SR" ][ "nodeName" ][ 1 ],
+ "SR",
+ manually_run, onos_tag )
}
-def finalList = [:]
+def finalList = [ : ]
// It will run each category of test to run sequentially on each branch.
finalList[ "Fabric2" ] = triggerFuncs.runTestSeq( runTest[ "Fabric2" ] )
@@ -200,10 +209,11 @@
// set : set of the test ( Eg. basic, extra_A ... )
// if getResult == true, it will add the result.
result = ""
- for( String test in AllTheTests[ testCat ].keySet() ){
- if( AllTheTests[ testCat ][ test ][ set ] ){
- if( getResult )
+ for ( String test in AllTheTests[ testCat ].keySet() ){
+ if ( AllTheTests[ testCat ][ test ][ set ] ){
+ if ( getResult ){
result += test + ","
+ }
}
}
return result
@@ -211,7 +221,7 @@
// check which node is on.
def nodeOn( branch ){
- switch( branch ) {
+ switch ( branch ){
case current_version: return 2
case previous_version: return 0
case before_previous_version: return 1
diff --git a/TestON/JenkinsFile/HAJenkinsFile b/TestON/JenkinsFile/HAJenkinsFile
index c1bd8bf..cb407ab 100644
--- a/TestON/JenkinsFile/HAJenkinsFile
+++ b/TestON/JenkinsFile/HAJenkinsFile
@@ -50,11 +50,12 @@
funcs.printTestToRun( testsToRun )
// run the test sequentially and save the function into the dictionary.
-def tests = [:]
-for( String test : HA.keySet() ){
+def tests = [ : ]
+for ( String test : HA.keySet() ){
toBeRun = testsToRun.contains( test )
def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- tests[stepName] = funcs.runTest( test, toBeRun, prop, test, false, HA, graph_generator_file, graph_saved_directory )
+ tests[ stepName ] = funcs.runTest( test, toBeRun, prop, test, false,
+ HA, graph_generator_file, graph_saved_directory )
}
// get the start time of the test.
@@ -68,4 +69,4 @@
funcs.generateOverallGraph( prop, HA, graph_saved_directory )
// send the notification to Slack that running HA tests was ended.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
+funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/JenkinsfileTrigger b/TestON/JenkinsFile/JenkinsfileTrigger
index a2996df..0836a97 100644
--- a/TestON/JenkinsFile/JenkinsfileTrigger
+++ b/TestON/JenkinsFile/JenkinsfileTrigger
@@ -31,19 +31,19 @@
// read the passed parameters from the Jenkins.
machines = params.machines
manually_run = params.manual_run
-if( !manually_run ){
- slackSend( color:'#03CD9F',
- message:":sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles:\n"
- + "Starting tests on : " + now.toString()
- + "\n:sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles::sparkles:" )
+if ( !manually_run ){
+ slackSend( color: '#03CD9F',
+ message: ":sparkles:" * 16 + "\n" +
+ "Starting tests on : " + now.toString() +
+ "\n" + ":sparkles:" * 16 )
}
// store the list of the machines into the dictionary.
machineList = machines.tokenize( "\n;, " )
-machineOn = [:]
+machineOn = [ : ]
// save the triggering job function as a dictionary.
-for (machine in machineList){
+for ( machine in machineList ){
print( machine )
machineOn[ machine ] = triggerJob( machine )
}
@@ -53,7 +53,7 @@
// function that will trigger the specific jobs from current pipeline.
def triggerJob( on ){
- return{
+ return {
jobToRun = on + "-pipeline-trigger"
build job: jobToRun, propagate: false
}
diff --git a/TestON/JenkinsFile/Overall_Graph_Generator b/TestON/JenkinsFile/Overall_Graph_Generator
index 41b1ccb..012b11d 100644
--- a/TestON/JenkinsFile/Overall_Graph_Generator
+++ b/TestON/JenkinsFile/Overall_Graph_Generator
@@ -36,7 +36,7 @@
funcs.initializeTrend( "VM" )
onos_branch = params.ONOSbranch
-AllTheTests = test_lists.getAllTheTests("")
+AllTheTests = test_lists.getAllTheTests( "" )
// generate the graph and post the result on TestStation-VMs. Right now, all the pie and histograms are saved
// on VM.
diff --git a/TestON/JenkinsFile/SCPFJenkinsFile b/TestON/JenkinsFile/SCPFJenkinsFile
index ee242e1..9d1122e 100644
--- a/TestON/JenkinsFile/SCPFJenkinsFile
+++ b/TestON/JenkinsFile/SCPFJenkinsFile
@@ -25,8 +25,8 @@
SCPFfuncs.init()
funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-// init funcs with SCPF specificaton
-funcs.initialize( "SCPF", SCPFfuncs );
+// init funcs with SCPF specification
+funcs.initialize( "SCPF", SCPFfuncs )
// read the information from TestON.property on BM
def prop = null
@@ -43,8 +43,8 @@
SCPFfuncs.oldFlowRuleCheck( isOldFlow, prop[ "ONOSBranch" ] )
// set test to run as a list of function
-def tests = [:]
-for( String test : SCPFfuncs.SCPF.keySet() ){
+def tests = [ : ]
+for ( String test : SCPFfuncs.SCPF.keySet() ){
toBeRun = testsToRun.contains( test )
def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
@@ -60,4 +60,4 @@
}
// send result to slack after running test is done.
-funcs.sendResultToSlack( start, prop["manualRun"], prop[ "WikiPrefix" ] )
+funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/SCPF_Graph_Generator b/TestON/JenkinsFile/SCPF_Graph_Generator
index e12b9e2..da57cd0 100644
--- a/TestON/JenkinsFile/SCPF_Graph_Generator
+++ b/TestON/JenkinsFile/SCPF_Graph_Generator
@@ -20,7 +20,7 @@
// This is the Jenkins script for manual-graph-generator-SCPF
-// read and set the functions from dependcies.
+// read and set the functions from dependencies.
SCPFfuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy' )
SCPFfuncs.init()
funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
@@ -40,11 +40,11 @@
testsToRun = funcs.getTestsToRun( Tests )
// pureTestName is because we don't want 'WFobj' to be used for test name.
-def tests = [:]
-for( String test : testsToRun ){
+def tests = [ : ]
+for ( String test : testsToRun ){
println test
pureTestName = test.replaceAll( "WithFlowObj", "" )
- tests[ test ] = funcs.runTest( test, true, prop, pureTestName, true, [], "", "" )
+ tests[ test ] = funcs.runTest( test, true, prop, pureTestName, true, [ ], "", "" )
}
// generate the graphs sequentially.
diff --git a/TestON/JenkinsFile/SRJenkinsFile b/TestON/JenkinsFile/SRJenkinsFile
index 3d3f309..8bee5b8 100644
--- a/TestON/JenkinsFile/SRJenkinsFile
+++ b/TestON/JenkinsFile/SRJenkinsFile
@@ -35,7 +35,8 @@
// additional setup for Segment routing because it is running multiple branch concurrently on different machines.
funcs.additionalInitForSR( jobName )
-// read the TestON.property depends on which branch it is running. ( currently master on Fabric4, 1.13 on Fabric2 and 1.12 on Fabric3 )
+// read the TestON.property depends on which branch it is running.
+// ( currently master on Fabric4, 1.13 on Fabric2 and 1.12 on Fabric3 )
def prop = null
prop = funcs.getProperties()
SR = test_lists.getAllTheTests( prop[ "WikiPrefix" ] )[ "SR" ]
@@ -51,11 +52,12 @@
funcs.printTestToRun( testsToRun )
// save the functions to run test in the dictionary.
-def tests = [:]
-for( String test : SR.keySet() ){
+def tests = [ : ]
+for ( String test : SR.keySet() ){
toBeRun = testsToRun.contains( test )
def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- tests[stepName] = funcs.runTest( test, toBeRun, prop, test, false, SR, graph_generator_file, graph_saved_directory )
+ tests[stepName] = funcs.runTest( test, toBeRun, prop, test, false,
+ SR, graph_generator_file, graph_saved_directory )
}
// get start time
@@ -67,4 +69,4 @@
}
//funcs.generateOverallGraph( prop, SR, graph_saved_directory )
// send the notification of ending test after SR tests is done.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
+funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/Trend_Graph_Generator b/TestON/JenkinsFile/Trend_Graph_Generator
index b95504d..4c51964 100644
--- a/TestON/JenkinsFile/Trend_Graph_Generator
+++ b/TestON/JenkinsFile/Trend_Graph_Generator
@@ -29,11 +29,12 @@
// read the node cluster ( VM or BM or Fabrics ) from the Jenkins job.
nodeCluster = params.NodeCluster
-funcs.initializeTrend( nodeCluster );
+funcs.initializeTrend( nodeCluster )
// do additional check for Fabric since it will be different depends on which branch it is running on.
-if( nodeCluster == "Fabric" )
- funcs.additionalInitForSR( params.ONOSbranch )
+if ( nodeCluster == "Fabric" ){
+ funcs.additionalInitForSR( params.ONOSbranch )
+}
def prop = null
prop = funcs.getProperties()
@@ -43,16 +44,17 @@
// set some of the paths of the file and directory
graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-" + nodeCluster + ( nodeCluster == "Fabric" ? funcs.fabricOn( prop[ "ONOSBranch" ] ) : "" ) + "/"
+graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-" + nodeCluster +
+ ( nodeCluster == "Fabric" ? funcs.fabricOn( prop[ "ONOSBranch" ] ) : "" ) + "/"
def testsToRun = null
testsToRun = funcs.getTestsToRun( Tests )
// set functions into the dictionary.
-def tests = [:]
-for( String test : testsToRun ){
+def tests = [ : ]
+for ( String test : testsToRun ){
println test
- tests[ test ] = funcs.runTest( test, true, prop, test, true, [], graph_generator_file, graph_saved_directory )
+ tests[ test ] = funcs.runTest( test, true, prop, test, true, [ ], graph_generator_file, graph_saved_directory )
}
for ( test in tests.keySet() ){
diff --git a/TestON/JenkinsFile/USECASEJenkinsFile b/TestON/JenkinsFile/USECASEJenkinsFile
index dd5cf88..7d55330 100644
--- a/TestON/JenkinsFile/USECASEJenkinsFile
+++ b/TestON/JenkinsFile/USECASEJenkinsFile
@@ -45,22 +45,23 @@
funcs.printTestToRun( testsToRun )
// save the function of the test running into the dictionary.
-def tests = [:]
-for( String test : USECASE.keySet() ){
+def tests = [ : ]
+for ( String test : USECASE.keySet() ){
toBeRun = testsToRun.contains( test )
def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, test, false, USECASE, graph_generator_file, graph_saved_directory )
+ tests[ stepName ] = funcs.runTest( test, toBeRun, prop, test, false,
+ USECASE, graph_generator_file, graph_saved_directory )
}
// get start time of the test.
start = funcs.getCurrentTime()
-// run the tests sequntially
+// run the tests sequentially
for ( test in tests.keySet() ){
tests[ test ].call()
}
// send the result to slack after USECASE test is done.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
+funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
// generate the overall graph for USECASE.
funcs.generateOverallGraph( prop, USECASE, graph_saved_directory )
diff --git a/TestON/JenkinsFile/VM_BMJenkinsfileTrigger b/TestON/JenkinsFile/VM_BMJenkinsfileTrigger
index 729cb89..d203f07 100644
--- a/TestON/JenkinsFile/VM_BMJenkinsfileTrigger
+++ b/TestON/JenkinsFile/VM_BMJenkinsfileTrigger
@@ -43,23 +43,11 @@
// default FUNC,HA to be VM, SCPF,USECASE to be BM.
// SR will not be used in here.
testcases = [
- "FUNC" : [ tests : "" , nodeName : "VM", wikiContent : "" ],
- "HA" : [ tests : "" , nodeName : "VM", wikiContent : "" ],
- "SCPF" : [ tests : "" , nodeName : "BM", wikiContent : "" ],
- "SR" : [ tests : "", nodeName : "Fabric", wikiContent : "" ],
- "USECASE" : [ tests : "" , nodeName : "BM", wikiContent : "" ]
-]
-
-// depends on the first two characters of the test name, it will be divided.
-Prefix_organizer = [
- "FU" : "FUNC",
- "HA" : "HA",
- "PL" : "USECASE",
- "SA" : "USECASE",
- "SC" : "SCPF",
- "SR" : "SR",
- "US" : "USECASE",
- "VP" : "USECASE"
+ "FUNC": [ tests: "", nodeName: "VM", wikiContent: "" ],
+ "HA": [ tests: "", nodeName: "VM", wikiContent: "" ],
+ "SCPF": [ tests: "", nodeName: "BM", wikiContent: "" ],
+ "SR": [ tests: "", nodeName: "Fabric", wikiContent: "" ],
+ "USECASE": [ tests: "", nodeName: "BM", wikiContent: "" ]
]
// read the parameters from the Jenkins
@@ -79,12 +67,14 @@
// get branch from parameter if it is manually running
if ( manually_run ){
onos_b = params.ONOSVersion
-} else {
+}
+else {
// otherwise, the version would be different over the weekend.
// If today is weekdays, it will be default to current_version.
if ( today == Calendar.SATURDAY ){
onos_b = previous_version
- } else if( today == Calendar.SUNDAY ){
+ }
+ else if ( today == Calendar.SUNDAY ){
onos_b = before_previous_version
}
}
@@ -109,13 +99,13 @@
post_result = params.PostResult
// if automatically run, it will remove the comma at the end after dividing the tests.
-if( !manually_run ){
+if ( !manually_run ){
testDivider( today )
- FUNC_choices = triggerFuncs.lastCommaRemover( FUNC_choices )
- HA_choices = triggerFuncs.lastCommaRemover( HA_choices )
- SCPF_choices = triggerFuncs.lastCommaRemover( SCPF_choices )
- USECASE_choices = triggerFuncs.lastCommaRemover( USECASE_choices )
- SR_choices = triggerFuncs.lastCommaRemover( SR_choices )
+ FUNC_choices = triggerFuncs.lastCommaRemover( FUNC_choices )
+ HA_choices = triggerFuncs.lastCommaRemover( HA_choices )
+ SCPF_choices = triggerFuncs.lastCommaRemover( SCPF_choices )
+ USECASE_choices = triggerFuncs.lastCommaRemover( USECASE_choices )
+ SR_choices = triggerFuncs.lastCommaRemover( SR_choices )
}
@@ -124,7 +114,8 @@
isOldFlow = params.isOldFlow
println "Tests to be run manually : "
-}else{
+}
+else {
testcases[ "SCPF" ][ "tests" ] = SCPF_choices
testcases[ "USECASE" ][ "tests" ] = USECASE_choices
testcases[ "FUNC" ][ "tests" ] = FUNC_choices
@@ -136,18 +127,20 @@
triggerFuncs.print_tests( testcases )
def runTest = [
- "VM" : [:],
- "BM" : [:]
+ "VM": [ : ],
+ "BM": [ : ]
]
// set the test running function into the dictionary.
-for( String test in testcases.keySet() ){
+for ( String test in testcases.keySet() ){
println test
if ( testcases[ test ][ "tests" ] != "" ){
- runTest[ testcases[ test ][ "nodeName" ] ][ test ] = triggerFuncs.trigger_pipeline( onos_b, testcases[ test ][ "tests" ], testcases[ test ][ "nodeName" ], test, manually_run, onos_tag )
+ runTest[ testcases[ test ][ "nodeName" ] ][ test ] = triggerFuncs.
+ trigger_pipeline( onos_b, testcases[ test ][ "tests" ], testcases[ test ][ "nodeName" ], test,
+ manually_run, onos_tag )
}
}
-def finalList = [:]
+def finalList = [ : ]
// get the name of the job.
jobName = env.JOB_NAME
@@ -158,10 +151,12 @@
// if first two character of the job name is vm, only call VM.
// else, only on BM
-if( jobName.take( 2 ) == "vm" )
+if ( jobName.take( 2 ) == "vm" ){
finalList[ "VM" ].call()
-else
+}
+else {
finalList[ "BM" ].call()
+}
// If it is automated running, it will generate the stats graph on VM.
if ( !manually_run ){
@@ -175,7 +170,7 @@
// function that will divide tests depends on which day it is.
def testDivider( today ){
- switch ( today ) {
+ switch ( today ){
case Calendar.MONDAY:
// THe reason Monday calls all the days is because we want to post the test schedules on the wiki
// and slack channel every monday.
@@ -191,7 +186,9 @@
day = "Monday"
closeHtmlForWiki()
postToWiki( wikiContents )
- slackSend( color:'#FFD988', message:"Tests to be run this weekdays : \n" + triggerFuncs.printDaysForTest( AllTheTests ) )
+ slackSend( color: '#FFD988',
+ message: "Tests to be run this weekdays : \n" +
+ triggerFuncs.printDaysForTest( AllTheTests ) )
break
case Calendar.TUESDAY:
tuesday( false, true )
@@ -214,7 +211,7 @@
day = "Saturday"
break
case Calendar.SUNDAY:
- sunday( false , true )
+ sunday( false, true )
day = "Sunday"
break
}
@@ -267,6 +264,7 @@
USECASE_choices += adder( "USECASE", "extra_A", getDay, "T", getResult )
closingHeader( "USECASE" )
}
+
def wednesday( getDay, getResult ){
addingHeader( "FUNC" )
FUNC_choices += adder( "FUNC", "basic", getDay, "W", getResult )
@@ -286,6 +284,7 @@
addingHeader( "USECASE" )
closingHeader( "USECASE" )
}
+
def thursday( getDay, getResult ){
addingHeader( "FUNC" )
FUNC_choices += adder( "FUNC", "basic", getDay, "Th", getResult )
@@ -305,6 +304,7 @@
addingHeader( "USECASE" )
closingHeader( "USECASE" )
}
+
def friday( getDay, getResult ){
addingHeader( "FUNC" )
FUNC_choices += adder( "FUNC", "basic", getDay, "F", getResult )
@@ -326,6 +326,7 @@
addingHeader( "USECASE" )
closingHeader( "USECASE" )
}
+
def saturday( getDay, getResult ){
addingHeader( "FUNC" )
FUNC_choices += adder( "FUNC", "basic", getDay, "Sa", getResult )
@@ -352,6 +353,7 @@
USECASE_choices += adder( "USECASE", "basic", getDay, "Sa", getResult )
closingHeader( "USECASE" )
}
+
def sunday( getDay, getResult ){
addingHeader( "FUNC" )
FUNC_choices += adder( "FUNC", "basic", getDay, "S", getResult )
@@ -386,13 +388,15 @@
// day : the day you are trying to add (m,t,w,th... )
// getResult : if want to get the list of the test to be run. False will return empty list.
// And once the list is empty, it will not be run.
- result = ""
- for( String test in AllTheTests[ testCat ].keySet() ){
- if( AllTheTests[ testCat ][ test ][ set ] ){
- if( getResult )
+ def result = ""
+ for ( String test in AllTheTests[ testCat ].keySet() ){
+ if ( AllTheTests[ testCat ][ test ][ set ] ){
+ if ( getResult ){
result += test + ","
- if( dayAdding )
+ }
+ if ( dayAdding ){
dayAdder( testCat, test, day )
+ }
// make HTML columns for wiki page on schedule.
makeHtmlColList( testCat, test )
}
@@ -425,7 +429,7 @@
<th class="confluenceTh"><p>Saturday</p></th>
<th class="confluenceTh"><p>Sunday</p></th>
</tr>'''
- for( String test in testcases.keySet() ){
+ for ( String test in testcases.keySet() ){
testcases[ test ][ 'wikiContent' ] = '''
<tr>
<th colspan="1" class="confluenceTh">''' + test + '''</th>'''
@@ -442,7 +446,7 @@
// making column list for html
def makeHtmlColList( testCategory, testName ){
testcases[ testCategory ][ 'wikiContent' ] += '''
- <li>'''+ testName +'''</li>'''
+ <li>''' + testName + '''</li>'''
}
@@ -455,7 +459,7 @@
// close the html for the wiki page.
def closeHtmlForWiki(){
- for( String test in testcases.keySet() ){
+ for ( String test in testcases.keySet() ){
wikiContents += testcases[ test ][ 'wikiContent' ]
wikiContents += '''
</tr>'''
@@ -465,13 +469,15 @@
</table>
<p><strong>Everyday</strong>, all SegmentRouting tests are built and run on every supported branch.</p>
<p>On <strong>Weekdays</strong>, all the other tests are built and run on the master branch.</p>
- <p>On <strong>Saturdays</strong>, all the other tests are built and run on the '''+ funcs.branchWithPrefix( previous_version ) +''' branch.</p>
- <p>On <strong>Sundays</strong>, all the other tests are built and run on the '''+ funcs.branchWithPrefix( before_previous_version ) +''' branch.</p>'''
+ <p>On <strong>Saturdays</strong>, all the other tests are built and run on the ''' +
+ funcs.branchWithPrefix( previous_version ) + ''' branch.</p>
+ <p>On <strong>Sundays</strong>, all the other tests are built and run on the ''' +
+ funcs.branchWithPrefix( before_previous_version ) + ''' branch.</p>'''
}
// post the result to wiki page using publish to confluence.
def postToWiki( contents ){
- node( testMachine ){
+ node( testMachine ) {
workspace = fileRelated.jenkinsWorkspace + "all-pipeline-trigger/"
filename = "jenkinsSchedule.txt"
writeFile file: workspace + filename, text: contents
diff --git a/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy b/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy
index cae7f6f..4c6f021 100644
--- a/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy
@@ -23,19 +23,21 @@
// make the init part of the database command
def database_command_create( pass, host, port, user ){
- return pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c "
+ return pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c "
}
// make the basic graph part for the Rscript
def basicGraphPart( rFileName, host, port, user, pass, subject, branchName ){
- return " Rscript " + rFileName + " " + host + " " + port + " " + user + " " + pass + " " + subject + " " + branchName
+ return " Rscript " + rFileName + " " + host + " " + port + " " + user + " " + pass + " " + subject + " " + branchName
}
// get the list of the test as dictionary then return as a string
def getTestList( tests ){
- list = ""
- for( String test : tests.keySet() )
+ def list = ""
+ for ( String test : tests.keySet() ){
list += test + ","
+ }
return list[ 0..-2 ]
}
-return this;
+
+return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy b/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy
index b7c9c2e..9cf5e7b 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy
@@ -21,138 +21,158 @@
// This is the dependency Jenkins script.
// it has some common functions that runs test and generate graph.
-import groovy.time.*
+import groovy.time.TimeCategory
+import groovy.time.TimeDuration
+
generalFuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/GeneralFuncs.groovy' )
fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
fileRelated.init()
def initializeTrend( machine ){
- // For initializing any trend graph jobs
- // machine : Either VM,BM, or Fabric#
+ // For initializing any trend graph jobs
+ // machine : Either VM,BM, or Fabric#
- table_name = "executed_test_tests"
- result_name = "executed_test_results"
- testMachine = "TestStation-" + machine + "s";
- this.machine = machine
- isSCPF = false
- isTrend = true
+ table_name = "executed_test_tests"
+ result_name = "executed_test_results"
+ testMachine = "TestStation-" + machine + "s"
+ this.machine = machine
+ isSCPF = false
+ isTrend = true
}
+
def initialize( type, SCPFfuncs ){
- // Initializing for SCPF tests
- // type : type of the test ( SR,FUNC,SCPF... )
- // Passing the SCPFfunction which will be PerformanceFuncs.groovy
+ // Initializing for SCPF tests
+ // type : type of the test ( SR,FUNC,SCPF... )
+ // Passing the SCPFfunction which will be PerformanceFuncs.groovy
- init( type )
- SCPFfunc = SCPFfuncs
- isSCPF = true
- machine = machineType[ type ]
+ init( type )
+ SCPFfunc = SCPFfuncs
+ isSCPF = true
+ machine = machineType[ type ]
}
+
def initialize( type ){
- // initializing for FUNC,HA,SR, and USECASE
- // type : type of the test ( SR,FUNC,SCPF... )
+ // initializing for FUNC,HA,SR, and USECASE
+ // type : type of the test ( SR,FUNC,SCPF... )
- init( type )
- SCPFfunc = null
- table_name = "executed_test_tests"
- result_name = "executed_test_results"
- trend_generator_file = fileRelated.trendMultiple
- build_stats_generator_file = fileRelated.histogramMultiple
- isSCPF = false
+ init( type )
+ SCPFfunc = null
+ table_name = "executed_test_tests"
+ result_name = "executed_test_results"
+ trend_generator_file = fileRelated.trendMultiple
+ build_stats_generator_file = fileRelated.histogramMultiple
+ isSCPF = false
}
+
def init( type ){
- // type : type of the test ( SR,FUNC,SCPF... )
+ // type : type of the test ( SR,FUNC,SCPF... )
- machineType = [ "FUNC" : "VM",
- "HA" : "VM",
- "SR" : "Fabric",
- "SCPF" : "BM",
- "USECASE" : "BM" ]
- testType = type;
- testMachine = "TestStation-" + machineType[ type ] + "s";
- isTrend = false
+ machineType = [ "FUNC": "VM",
+ "HA": "VM",
+ "SR": "Fabric",
+ "SCPF": "BM",
+ "USECASE": "BM" ]
+ testType = type
+ testMachine = "TestStation-" + machineType[ type ] + "s"
+ isTrend = false
}
+
def additionalInitForSR( branch ){
- // additional setup for SegmentRouting tests to determine the machine depends on the branch it is running.
- // branch : branch of the onos. ( master, 1.12, 1.13... )
+ // additional setup for SegmentRouting tests to determine the machine depends on the branch it is running.
+ // branch : branch of the onos. ( master, 1.12, 1.13... )
- testMachine = ( ( new StringBuilder( testMachine ) ).insert( testMachine.size()-1, fabricOn( branch ) ) ).toString()
- if( isTrend )
- machine += fabricOn( branch )
- else
- machineType[ testType ] += fabricOn( branch )
- print testMachine
-}
-def fabricOn( branch ){
- // gets the fabric machines with the branch of onos.
- // branch : master, 1.12, 1.13...
- // branch.reverse().take(4).reverse() will get last 4 characters of the string.
- switch( branch.reverse().take(4).reverse() ) {
- case "ster": return "4"
- case "1.13": return "2"
- case "1.12": return "3"
- default: return "4"
- }
-}
-def printType(){
- // print the test type and test machine that was initialized.
-
- echo testType;
- echo testMachine;
-}
-def getProperties(){
- // get the properties of the test by reading the TestONOS.property
-
- node( testMachine ){
- return readProperties( file:'/var/jenkins/TestONOS.property' );
- }
-}
-def getTestsToRun( testList ){
- // get test to run by tokenizing the list.
-
- testList.tokenize("\n;, ")
-}
-def getCurrentTime(){
- // get time of the PST zone.
-
- TimeZone.setDefault( TimeZone.getTimeZone('PST') )
- return new Date();
-}
-def getTotalTime( start, end ){
- // get total time of the test using start and end time.
-
- return TimeCategory.minus( end, start );
-}
-def printTestToRun( testList ){
- // printout the list of the test in the list.
-
- for ( String test : testList ) {
- println test;
- }
-}
-def sendResultToSlack( start, isManualRun, branch ){
- // send the result of the test to the slack when it is not manually running.
- // start : start time of the test
- // isManualRun : string that is whether "false" or "true"
- // branch : branch of the onos.
-
- try{
- if( isManualRun == "false" ){
- end = getCurrentTime();
- TimeDuration duration = TimeCategory.minus( end , start );
- slackSend( color:"#5816EE",
- message: testType + "-" + branch + " tests ended at: " + end.toString() + "\nTime took : " + duration )
+ testMachine = ( ( new StringBuilder( testMachine ) ).insert( testMachine.size() - 1, fabricOn( branch ) ) ).
+ toString()
+ if ( isTrend ){
+ machine += fabricOn( branch )
}
- }
- catch( all ){}
+ else {
+ machineType[ testType ] += fabricOn( branch )
+ }
+ print testMachine
}
-def initAndRunTest( testName, testCategory ){
- // Bash script that will
- // Initialize the environment to the machine and run the test.
- // testName : name of the test
- // testCategory : (SR,FUNC ... )
- return '''#!/bin/bash -l
+def fabricOn( branch ){
+ // gets the fabric machines with the branch of onos.
+ // branch : master, 1.12, 1.13...
+ // branch.reverse().take(4).reverse() will get last 4 characters of the string.
+ switch ( branch.reverse().take( 4 ).reverse() ){
+ case "ster": return "4"
+ case "1.13": return "2"
+ case "1.12": return "3"
+ default: return "4"
+ }
+}
+
+def printType(){
+ // print the test type and test machine that was initialized.
+
+ echo testType
+ echo testMachine
+}
+
+def getProperties(){
+ // get the properties of the test by reading the TestONOS.property
+
+ node( testMachine ) {
+ return readProperties( file: '/var/jenkins/TestONOS.property' )
+ }
+}
+
+def getTestsToRun( testList ){
+ // get test to run by tokenizing the list.
+
+ testList.tokenize( "\n;, " )
+}
+
+def getCurrentTime(){
+ // get time of the PST zone.
+
+ TimeZone.setDefault( TimeZone.getTimeZone( 'PST' ) )
+ return new Date()
+}
+
+def getTotalTime( start, end ){
+ // get total time of the test using start and end time.
+
+ return TimeCategory.minus( end, start )
+}
+
+def printTestToRun( testList ){
+ // printout the list of the test in the list.
+
+ for ( String test : testList ){
+ println test
+ }
+}
+
+def sendResultToSlack( start, isManualRun, branch ){
+ // send the result of the test to the slack when it is not manually running.
+ // start : start time of the test
+ // isManualRun : string that is whether "false" or "true"
+ // branch : branch of the onos.
+
+ try {
+ if ( isManualRun == "false" ){
+ end = getCurrentTime()
+ TimeDuration duration = TimeCategory.minus( end, start )
+ slackSend( color: "#5816EE",
+ message: testType + "-" + branch + " tests ended at: " + end.toString() +
+ "\nTime took : " + duration )
+ }
+ }
+ catch ( all ){
+ }
+}
+
+def initAndRunTest( testName, testCategory ){
+ // Bash script that will
+ // Initialize the environment to the machine and run the test.
+ // testName : name of the test
+ // testCategory : (SR,FUNC ... )
+
+ return '''#!/bin/bash -l
set -i # interactive
set +e
shopt -s expand_aliases # expand alias in non-interactive mode
@@ -170,19 +190,22 @@
cd ~/OnosSystemTest/TestON/bin
git log |head
./cleanup.sh -f
- ''' + "./cli.py run " + ( !isSCPF ? testName : testCategory[ testName ][ 'test' ] ) + " --params GRAPH/nodeCluster=" + machineType[ testType ] + '''
+ ''' + "./cli.py run " +
+ ( !isSCPF ? testName : testCategory[ testName ][ 'test' ] ) +
+ " --params GRAPH/nodeCluster=" + machineType[ testType ] + '''
./cleanup.sh -f
# cleanup config changes
cd ~/onos/tools/package/config
git clean -df'''
}
-def copyLogs( testName ){
- // bash script part for copy the logs and other neccessary element for SR tests.
- // testName : name of the test.
- result = ""
- if( testType == "SR" ){
- result = '''
+def copyLogs( testName ){
+ // bash script part for copy the logs and other neccessary element for SR tests.
+ // testName : name of the test.
+
+ result = ""
+ if ( testType == "SR" ){
+ result = '''
sudo rm /var/jenkins/workspace/SR-log-${WikiPrefix}/*
sudo cp *karaf.log.* /var/jenkins/workspace/SR-log-${WikiPrefix}/
sudo cp *Flows* /var/jenkins/workspace/SR-log-${WikiPrefix}/
@@ -190,14 +213,15 @@
sudo cp *.tar.gz /var/jenkins/workspace/SR-log-${WikiPrefix}/
sudo cp t3-* /var/jenkins/workspace/SR-log-${WikiPrefix}/
'''
- }
- return result
+ }
+ return result
}
-def cleanAndCopyFiles( testName ){
- // clean up some files that were in the folder and copy the new files from the log
- // testName : name of the test
- return '''#!/bin/bash -i
+def cleanAndCopyFiles( testName ){
+ // clean up some files that were in the folder and copy the new files from the log
+ // testName : name of the test
+
+ return '''#!/bin/bash -i
set +e
echo "ONOS Branch is: ${ONOSBranch}"
echo "TestON Branch is: ${TestONBranch}"
@@ -221,11 +245,12 @@
ls -al
cd '''
}
-def fetchLogs( testName ){
- // fetch the logs of onos from onos nodes to onos System Test logs
- // testName: name of the test
- return '''#!/bin/bash
+def fetchLogs( testName ){
+ // fetch the logs of onos from onos nodes to onos System Test logs
+ // testName: name of the test
+
+ return '''#!/bin/bash
set +e
cd ~/OnosSystemTest/TestON/logs
echo "Job Name is: " + ''' + testName + '''
@@ -243,252 +268,291 @@
fi
cd'''
}
+
def isPostingResult( manual, postresult ){
- // check if it is posting the result.
- // posting when it is automatically running or has postResult condition from the manual run
+ // check if it is posting the result.
+ // posting when it is automatically running or has postResult condition from the manual run
- return manual == "false" || postresult == "true"
+ return manual == "false" || postresult == "true"
}
+
def postResult( prop, graphOnly ){
- // post the result by triggering postjob.
- // prop : property dictionary that was read from the machine.
- // graphOnly : if it is graph generating job
+ // post the result by triggering postjob.
+ // prop : property dictionary that was read from the machine.
+ // graphOnly : if it is graph generating job
- if( graphOnly || isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
- def post = build job: "postjob-" + ( graphOnly ? machine : machineType[ testType ] ), propagate: false
- }
-}
-def postLogs( testName, prefix ){
- // posting logs of the onos jobs specifically SR tests
- // testName : name of the test
- // prefix : branch prefix ( master, 1.12, 1.13 ... )
-
- resultURL = ""
- if( testType == "SR" ){
- def post = build job: "SR-log-" + prefix, propagate: false
- resultURL = post.getAbsoluteUrl()
- }
- return resultURL
-}
-def getSlackChannel(){
- // get name of the slack channel.
- // if the test is SR, it will return sr-failures
-
- return "#" + ( testType == "SR" ? "sr-failures" : "jenkins-related" )
-}
-def analyzeResult( prop, workSpace, testName, otherTestName, resultURL, wikiLink, isSCPF ){
- // analyzing the result of the test and send to slack if the test was failed.
- // prop : property dictionary
- // workSpace : workSpace where the result file is saved
- // testName : real name of the test
- // otherTestName : other name of the test for SCPF tests ( SCPFflowTPFobj )
- // resultURL : url for the logs for SR tests. Will not be posted if it is empty
- // wikiLink : link of the wiki page where the result was posted
- // isSCPF : Check if it is SCPF. If so, it won't post the wiki link.
-
- node( testMachine ){
- resultContents = readFile workSpace + "/" + testName + "Result.txt"
- resultContents = resultContents.split("\n")
- if( resultContents[ 0 ] == "1" ){
- print "All passed"
- }else{
- print "Failed"
- if( prop[ "manualRun" ] == "false" ){
- slackSend( channel:getSlackChannel(), color:"FF0000", message: "[" + prop[ "ONOSBranch" ] + "]"
- + otherTestName + " : Failed!\n" + resultContents[ 1 ] + "\n"
- + "[TestON log] : \n"
- + "https://jenkins.onosproject.org/blue/organizations/jenkins/${env.JOB_NAME}/detail/${env.JOB_NAME}/${env.BUILD_NUMBER}/pipeline"
- + ( isSCPF ? "" : ( "\n[Result on Wiki] : \n" + "https://wiki.onosproject.org/display/ONOS/" + wikiLink.replaceAll( "\\s","+" ) ) )
- + ( resultURL != "" ? ( "\n[Karaf log] : \n" + resultURL + "artifact/" ) : "" ),
- teamDomain: 'onosproject' )
- }
- Failed
+ if ( graphOnly || isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
+ def post = build job: "postjob-" + ( graphOnly ? machine : machineType[ testType ] ), propagate: false
}
- }
}
+
+def postLogs( testName, prefix ){
+ // posting logs of the onos jobs specifically SR tests
+ // testName : name of the test
+ // prefix : branch prefix ( master, 1.12, 1.13 ... )
+
+ resultURL = ""
+ if ( testType == "SR" ){
+ def post = build job: "SR-log-" + prefix, propagate: false
+ resultURL = post.getAbsoluteUrl()
+ }
+ return resultURL
+}
+
+def getSlackChannel(){
+ // get name of the slack channel.
+ // if the test is SR, it will return sr-failures
+
+ return "#" + ( testType == "SR" ? "sr-failures" : "jenkins-related" )
+}
+
+def analyzeResult( prop, workSpace, testName, otherTestName, resultURL, wikiLink, isSCPF ){
+ // analyzing the result of the test and send to slack if the test was failed.
+ // prop : property dictionary
+ // workSpace : workSpace where the result file is saved
+ // testName : real name of the test
+ // otherTestName : other name of the test for SCPF tests ( SCPFflowTPFobj )
+ // resultURL : url for the logs for SR tests. Will not be posted if it is empty
+ // wikiLink : link of the wiki page where the result was posted
+ // isSCPF : Check if it is SCPF. If so, it won't post the wiki link.
+
+ node( testMachine ) {
+ def resultContents = readFile( workSpace + "/" + testName + "Result.txt" )
+ resultContents = resultContents.split( "\n" )
+ if ( resultContents[ 0 ] == "1" ){
+ print "All passed"
+ }
+ else {
+ print "Failed"
+ if ( prop[ "manualRun" ] == "false" ){
+ slackSend( channel: getSlackChannel(),
+ color: "FF0000",
+ message: "[" + prop[ "ONOSBranch" ] + "]" + otherTestName + " : Failed!\n" +
+ resultContents[ 1 ] + "\n" +
+ "[TestON log] : \n" +
+ "https://jenkins.onosproject.org/blue/organizations/jenkins/${ env.JOB_NAME }/detail/${ env.JOB_NAME }/${ env.BUILD_NUMBER }/pipeline" +
+ ( isSCPF ? "" : ( "\n[Result on Wiki] : \n" +
+ "https://wiki.onosproject.org/display/ONOS/" +
+ wikiLink.replaceAll( "\\s", "+" ) ) ) +
+ ( resultURL != "" ? ( "\n[Karaf log] : \n" +
+ resultURL + "artifact/" ) : "" ),
+ teamDomain: 'onosproject' )
+ }
+ Failed
+ }
+ }
+}
+
def publishToConfluence( isManualRun, isPostResult, wikiLink, file ){
- // publish HTML script to wiki confluence
- // isManualRun : string "true" "false"
- // isPostResult : string "true" "false"
- // wikiLink : link of the wiki page to publish
- // file : name of the file to be published
+ // publish HTML script to wiki confluence
+ // isManualRun : string "true" "false"
+ // isPostResult : string "true" "false"
+ // wikiLink : link of the wiki page to publish
+ // file : name of the file to be published
- if( isPostingResult( isManualRun, isPostResult ) ){
- publishConfluence siteName: 'wiki.onosproject.org', pageName: wikiLink, spaceName: 'ONOS',
- attachArchivedArtifacts: true, buildIfUnstable: true,
- editorList: [
- confluenceWritePage( confluenceFile( file ) )
- ]
- }
+ if ( isPostingResult( isManualRun, isPostResult ) ){
+ publishConfluence siteName: 'wiki.onosproject.org', pageName: wikiLink, spaceName: 'ONOS',
+ attachArchivedArtifacts: true, buildIfUnstable: true,
+ editorList: [ confluenceWritePage( confluenceFile( file ) ) ]
+ }
}
-def runTest( testName, toBeRun, prop, pureTestName, graphOnly, testCategory, graph_generator_file, graph_saved_directory ) {
- // run the test on the machine that contains all the steps : init and run test, copy files, publish result ...
- // testName : name of the test
- // toBeRun : boolean value whether the test will be run or not. If not, it won't be run but shows up with empty result on pipeline view
- // prop : dictionary property on the machine
- // pureTestName : Pure name of the test. ( ex. pureTestName of SCPFflowTpFobj will be SCPFflowTp )
- // graphOnly : check if it is generating graph job. If so, it will only generate the generating graph part
- // testCategory : category of the test ( SCPF, SR, FUNC ... )
- // graph_generator_file : Rscript file with the full path.
- // graph_saved_directory : where the generated graph will be saved to.
- return {
- catchError{
- stage( testName ) {
- if ( toBeRun ){
- workSpace = "/var/jenkins/workspace/" + testName
- def fileContents = ""
- node( testMachine ){
- withEnv( [ 'ONOSBranch=' + prop[ "ONOSBranch" ],
- 'ONOSJVMHeap=' + prop[ "ONOSJVMHeap" ],
- 'TestONBranch=' + prop[ "TestONBranch" ],
- 'ONOSTag=' + prop[ "ONOSTag" ],
- 'WikiPrefix=' + prop[ "WikiPrefix" ],
- 'WORKSPACE=' + workSpace ] ){
- if( ! graphOnly ){
- sh initAndRunTest( testName, testCategory )
- // For the Wiki page
- sh cleanAndCopyFiles( pureTestName )
+def runTest( testName, toBeRun, prop, pureTestName, graphOnly, testCategory, graph_generator_file,
+ graph_saved_directory ){
+ // run the test on the machine that contains all the steps : init and run test, copy files, publish result ...
+ // testName : name of the test
+ // toBeRun : boolean value whether the test will be run or not. If not, it won't be run but shows up with empty
+ // result on pipeline view
+ // prop : dictionary property on the machine
+ // pureTestName : Pure name of the test. ( ex. pureTestName of SCPFflowTpFobj will be SCPFflowTp )
+ // graphOnly : check if it is generating graph job. If so, it will only generate the generating graph part
+ // testCategory : category of the test ( SCPF, SR, FUNC ... )
+ // graph_generator_file : Rscript file with the full path.
+ // graph_saved_directory : where the generated graph will be saved to.
+
+ return {
+ catchError {
+ stage( testName ) {
+ if ( toBeRun ){
+ def workSpace = "/var/jenkins/workspace/" + testName
+ def fileContents = ""
+ node( testMachine ) {
+ withEnv( [ 'ONOSBranch=' + prop[ "ONOSBranch" ],
+ 'ONOSJVMHeap=' + prop[ "ONOSJVMHeap" ],
+ 'TestONBranch=' + prop[ "TestONBranch" ],
+ 'ONOSTag=' + prop[ "ONOSTag" ],
+ 'WikiPrefix=' + prop[ "WikiPrefix" ],
+ 'WORKSPACE=' + workSpace ] ) {
+ if ( !graphOnly ){
+ sh initAndRunTest( testName, testCategory )
+ // For the Wiki page
+ sh cleanAndCopyFiles( pureTestName )
+ }
+ databaseAndGraph( prop, testName, graphOnly, graph_generator_file, graph_saved_directory )
+ if ( !graphOnly ){
+ sh fetchLogs( pureTestName )
+ if ( !isSCPF ){
+ publishToConfluence( prop[ "manualRun" ], prop[ "postResult" ],
+ testCategory[ testName ][ 'wiki_link' ],
+ workSpace + "/" + testCategory[ testName ][ 'wiki_file' ] )
+ }
+ }
}
- databaseAndGraph( prop, testName, graphOnly, graph_generator_file, graph_saved_directory )
- if( ! graphOnly ){
- sh fetchLogs( pureTestName )
- if( !isSCPF )
- publishToConfluence( prop[ "manualRun" ], prop[ "postResult" ],
- testCategory[ testName ][ 'wiki_link' ],
- workSpace + "/" + testCategory[ testName ][ 'wiki_file' ] )
- }
- }
-
-
- }
+ }
postResult( prop, graphOnly )
- if( ! graphOnly ){
- resultURL = postLogs( testName, prop[ "WikiPrefix" ] )
- analyzeResult( prop, workSpace, pureTestName, testName, resultURL, isSCPF ? "" : testCategory[ testName ][ 'wiki_link' ], isSCPF )
- }
- }
- }
- }
- }
+ if ( !graphOnly ){
+ resultURL = postLogs( testName, prop[ "WikiPrefix" ] )
+ analyzeResult( prop, workSpace, pureTestName, testName, resultURL,
+ isSCPF ? "" : testCategory[ testName ][ 'wiki_link' ],
+ isSCPF )
+ }
+ }
+ }
+ }
+ }
}
-def databaseAndGraph( prop, testName, graphOnly, graph_generator_file, graph_saved_directory ){
- // part where it insert the data into the database.
- // It will use the predefined encrypted variables from the Jenkins.
- // prop : property dictionary that was read from the machine
- // testName : name of the test
- // graphOnly : boolean whether it is graph only or not
- // graph_generator_file : Rscript file with the full path.
- // graph_saved_directory : where the generated graph will be saved to.
- if( graphOnly || isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
- // 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 = generalFuncs.database_command_create( pass, host, port, user ) + ( !isSCPF ? sqlCommand( testName ) : SCPFfunc.sqlCommand( testName ) )
- sh '''#!/bin/bash
+def databaseAndGraph( prop, testName, graphOnly, graph_generator_file, graph_saved_directory ){
+ // part where it insert the data into the database.
+ // It will use the predefined encrypted variables from the Jenkins.
+ // prop : property dictionary that was read from the machine
+ // testName : name of the test
+ // graphOnly : boolean whether it is graph only or not
+ // graph_generator_file : Rscript file with the full path.
+ // graph_saved_directory : where the generated graph will be saved to.
+
+ if ( graphOnly || isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
+ // 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 = generalFuncs.database_command_create( pass, host, port, user ) +
+ ( !isSCPF ? sqlCommand( testName ) : SCPFfunc.sqlCommand( testName ) )
+ sh '''#!/bin/bash
export DATE=\$(date +%F_%T)
cd ~
- pwd ''' + ( graphOnly ? "" : ( !isSCPF ? databasePart( prop[ "WikiPrefix" ], testName, database_command ) :
- SCPFfunc.databasePart( testName, database_command ) ) ) + '''
- ''' + ( !isSCPF ? graphGenerating( host, port, user, pass, testName, prop, graph_saved_directory, graph_generator_file ) : SCPFfunc.getGraphGeneratingCommand( host, port, user, pass, testName, prop ) )
- }
- }
-}
-def generateCategoryStatsGraph( testMachineOn, manualRun, postresult, stat_file, pie_file, type, branch, testListPart, save_path, pieTestListPart ){
- // function that will generate the category stat graphs for the overall test.
- // testMachineOn : the machine the graph will be generated. It will be TestStation-VMs for the most cases
- // manualRun : string of "true" or "false"
- // postresult : string of "true" or "false"
- // stat_file : file name with full path for Rscript for the stat graph
- // pie_file : file name with full path for Rscript for the pie graph
- // type : type of the test ( USECASE, FUNC, HA )
- // branch : branch of the test ( master, onos-1.12, onos-1.13 )
- // testListPart : list of the test to be included
- // save_path : path that will save the graphs to
- // pieTestListPart : list of the test for pie graph
-
- if( isPostingResult( manualRun, postresult ) ){
- node( testMachineOn ){
-
- 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' ) ] ) {
- sh '''#!/bin/bash
- ''' + generalFuncs.basicGraphPart( stat_file, host, port, user, pass, type, branch ) + " \"" + testListPart + "\" latest " + save_path + '''
- ''' + getOverallPieGraph( pie_file, host, port, user, pass, branch, type, pieTestListPart, 'y', save_path ) + '''
- ''' + getOverallPieGraph( pie_file, host, port, user, pass, branch, type, pieTestListPart, 'n', save_path )
- }
+ pwd ''' + ( graphOnly ? "" :
+ ( !isSCPF ? databasePart( prop[ "WikiPrefix" ], testName, database_command ) :
+ SCPFfunc.databasePart( testName, database_command ) ) ) + '''
+ ''' + ( !isSCPF ? graphGenerating( host, port, user, pass, testName, prop, graph_saved_directory,
+ graph_generator_file ) :
+ SCPFfunc.getGraphGeneratingCommand( host, port, user, pass, testName, prop ) )
}
- postResult( [], true )
}
}
+
+def generateCategoryStatsGraph( testMachineOn, manualRun, postresult, stat_file, pie_file, type, branch, testListPart,
+ save_path, pieTestListPart ){
+ // function that will generate the category stat graphs for the overall test.
+ // testMachineOn : the machine the graph will be generated. It will be TestStation-VMs for the most cases
+ // manualRun : string of "true" or "false"
+ // postresult : string of "true" or "false"
+ // stat_file : file name with full path for Rscript for the stat graph
+ // pie_file : file name with full path for Rscript for the pie graph
+ // type : type of the test ( USECASE, FUNC, HA )
+ // branch : branch of the test ( master, onos-1.12, onos-1.13 )
+ // testListPart : list of the test to be included
+ // save_path : path that will save the graphs to
+ // pieTestListPart : list of the test for pie graph
+
+ if ( isPostingResult( manualRun, postresult ) ){
+ node( testMachineOn ) {
+
+ 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' ) ] ) {
+ sh '''#!/bin/bash
+ ''' + generalFuncs.basicGraphPart( stat_file, host, port, user, pass, type,
+ branch ) + " \"" + testListPart + "\" latest " + save_path + '''
+ ''' + getOverallPieGraph( pie_file, host, port, user, pass, branch, type, pieTestListPart, 'y',
+ save_path ) + '''
+ ''' +
+ getOverallPieGraph( pie_file, host, port, user, pass, branch, type, pieTestListPart, 'n', save_path )
+ }
+ }
+ postResult( [ ], true )
+ }
+}
+
def makeTestList( list, commaNeeded ){
- // make the list of the test in to a string.
- // list : list of the test
- // commaNeeded : if comma is needed for the string
+ // make the list of the test in to a string.
+ // list : list of the test
+ // commaNeeded : if comma is needed for the string
- return generalFuncs.getTestList( list ) + ( commaNeeded ? "," : "" )
+ return generalFuncs.getTestList( list ) + ( commaNeeded ? "," : "" )
}
+
def createStatsList( testCategory, list, semiNeeded ){
- // make the list for stats
- // testCategory : category of the test
- // list : list of the test
- // semiNeeded: if semi colon is needed
+ // make the list for stats
+ // testCategory : category of the test
+ // list : list of the test
+ // semiNeeded: if semi colon is needed
- return testCategory + "-" + generalFuncs.getTestList( list ) + ( semiNeeded ? ";" : "" )
+ return testCategory + "-" + generalFuncs.getTestList( list ) + ( semiNeeded ? ";" : "" )
}
+
def generateOverallGraph( prop, testCategory, graph_saved_directory ){
- // generate the overall graph for the test
+ // generate the overall graph for the test
- if( isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
- node( testMachine ){
+ if ( isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
+ node( testMachine ) {
- 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' ) ] ) {
- testList = generalFuncs.getTestList( testCategory )
- sh '''#!/bin/bash
- ''' + generalFuncs.basicGraphPart( trend_generator_file, host, port, user, pass, testType, prop[ "ONOSBranch" ] ) + " " + testList + " 20 " + graph_saved_directory
- }
+ 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' ) ] ) {
+ testList = generalFuncs.getTestList( testCategory )
+ sh '''#!/bin/bash
+ ''' +
+ generalFuncs.basicGraphPart( trend_generator_file, host, port,
+ user, pass, testType,
+ prop[ "ONOSBranch" ] ) + " " + testList + " 20 " + graph_saved_directory
+ }
}
- postResult( prop, false )
+ postResult( prop, false )
}
}
+
def getOverallPieGraph( file, host, port, user, pass, branch, type, testList, yOrN, path ){
- // Rcommand for the pie graph
+ // Rcommand for the pie graph
- return generalFuncs.basicGraphPart( file, host, port, user, pass, type, branch ) + " \"" + testList + "\" latest " + yOrN + " " + path
+ return generalFuncs.basicGraphPart( file, host, port, user, pass, type, branch ) +
+ " \"" + testList + "\" latest " + yOrN + " " + path
}
+
def sqlCommand( testName ){
- // get the inserting sqlCommand for non-SCPF tests.
+ // get the inserting sqlCommand for non-SCPF tests.
- return "\"INSERT INTO " + table_name + " VALUES('\$DATE','" + result_name + "','" + testName + "',\$BUILD_NUMBER, '\$ONOSBranch', \$line);\" "
+ return "\"INSERT INTO " + table_name + " VALUES('\$DATE','" + result_name + "','" +
+ testName + "',\$BUILD_NUMBER, '\$ONOSBranch', \$line);\" "
}
+
def graphGenerating( host, port, user, pass, testName, prop, graph_saved_directory, graph_generator_file ){
- // get the graphGenerating R command for non-SCPF tests
+ // get the graphGenerating R command for non-SCPF tests
- return generalFuncs.basicGraphPart( graph_generator_file, host, port, user, pass, testName, prop[ "ONOSBranch" ] ) + " 20 " + graph_saved_directory
+ return generalFuncs.basicGraphPart( graph_generator_file, host, port, user, pass, testName,
+ prop[ "ONOSBranch" ] ) + " 20 " + graph_saved_directory
}
-def databasePart( wikiPrefix, testName, database_command ){
- // to read and insert the data from .csv to the database
- return '''
+def databasePart( wikiPrefix, testName, database_command ){
+ // to read and insert the data from .csv to the database
+
+ return '''
sed 1d ''' + workSpace + "/" + wikiPrefix + "-" + testName + '''.csv | while read line
do
echo \$line
echo ''' + database_command + '''
done '''
}
-def generateStatGraph( testMachineOn, onos_branch, AllTheTests, stat_graph_generator_file, pie_graph_generator_file, graph_saved_directory ){
+
+def generateStatGraph( testMachineOn, onos_branch, AllTheTests, stat_graph_generator_file, pie_graph_generator_file,
+ graph_saved_directory ){
// Will generate the stats graph.
testListPart = createStatsList( "FUNC", AllTheTests[ "FUNC" ], true ) +
@@ -497,10 +561,13 @@
pieTestList = makeTestList( AllTheTests[ "FUNC" ], true ) +
makeTestList( AllTheTests[ "HA" ], true ) +
makeTestList( AllTheTests[ "USECASE" ], false )
- generateCategoryStatsGraph( testMachineOn, "false", "true", stat_graph_generator_file, pie_graph_generator_file, "ALL", onos_branch, testListPart, graph_saved_directory, pieTestList )
+ generateCategoryStatsGraph( testMachineOn, "false", "true", stat_graph_generator_file, pie_graph_generator_file,
+ "ALL", onos_branch, testListPart, graph_saved_directory, pieTestList )
}
+
def branchWithPrefix( branch ){
// get the branch with the prefix ( "onos-" )
return ( ( branch != "master" ) ? "onos-" : "" ) + branch
}
-return this;
+
+return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy b/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
index f8700c9..6eb1061 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
@@ -46,5 +46,6 @@
initLocation()
initFiles()
}
-return this;
+
+return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
index b23591b..d5c5166 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
@@ -34,74 +34,473 @@
// wiki_link : link of the wiki page that will be used to publish to confluence later on. SCPF tests don't need one.
return [
- "FUNC":[
- "FUNCipv6Intent" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCipv6Intent", wiki_file:"FUNCipv6IntentWiki.txt" ],
- "FUNCoptical" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCoptical", wiki_file:"FUNCopticalWiki.txt" ],
- "FUNCflow" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCflow", wiki_file:"FUNCflowWiki.txt" ],
- "FUNCnetCfg": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCnetCfg", wiki_file:"FUNCnetCfgWiki.txt" ],
- "FUNCovsdbtest" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCovsdbtest", wiki_file:"FUNCovsdbtestWiki.txt" ],
- "FUNCnetconf" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCnetconf", wiki_file:"FUNCnetconfWiki.txt" ],
- "FUNCgroup" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCgroup", wiki_file:"FUNCgroupWiki.txt" ],
- "FUNCintent" : [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCintent", wiki_file:"FUNCintentWiki.txt" ],
- "FUNCintentRest" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCintentRest", wiki_file:"FUNCintentRestWiki.txt" ],
- "FUNCformCluster" :[ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCformCluster", wiki_file:"FUNCformClusterWiki.txt" ]
- ],
- "HA":[
- "HAsanity" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Sanity", wiki_file:"HAsanityWiki.txt" ],
- "HAclusterRestart" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Cluster Restart", wiki_file:"HAclusterRestartWiki.txt" ],
- "HAsingleInstanceRestart" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Single Instance Restart", wiki_file:"HAsingleInstanceRestartWiki.txt" ],
- "HAstopNodes" : [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Stop Nodes", wiki_file:"HAstopNodes.txt" ],
- "HAfullNetPartition" : [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Full Network Partition", wiki_file:"HAfullNetPartitionWiki.txt" ],
- "HAswapNodes" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Swap Nodes", wiki_file:"HAswapNodesWiki.txt" ],
- "HAscaling" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Scaling", wiki_file:"HAscalingWiki.txt" ],
- "HAkillNodes" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Kill Nodes", wiki_file:"HAkillNodes.txt" ],
- "HAbackupRecover" : [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Backup Recover", wiki_file:"HAbackupRecoverWiki.txt" ],
- "HAupgrade" : [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade", wiki_file:"HAupgradeWiki.txt" ],
- "HAupgradeRollback" : [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "HA Upgrade Rollback", wiki_file:"HAupgradeRollbackWiki.txt" ]
- ],
- "SCPF":[
- "SCPFswitchLat": [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFcbench": [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFportLat": [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFflowTp1g": [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentEventTp": [ "basic":true, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFhostLat": [ "basic":false, "extra_A":true, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFbatchFlowResp": [ "basic":false, "extra_A":true, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentRerouteLat": [ "basic":false, "extra_A":true, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentInstallWithdrawLat": [ "basic":false, "extra_A":true, "extra_B":false, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFflowTp1gWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentEventTpWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentRerouteLatWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFscalingMaxIntentsWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFintentInstallWithdrawLatWithFlowObj": [ "basic":false, "extra_A":false, "extra_B":true, "extra_C":false, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFscaleTopo": [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":true, "extra_D":false, "new_Test":false, day:"" ],
- "SCPFscalingMaxIntents": [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":true, "new_Test":false, day:"" ],
- "SCPFmastershipFailoverLat": [ "basic":false, "extra_A":false, "extra_B":false, "extra_C":false, "extra_D":true, "new_Test":false, day:"" ]
- ],
- "USECASE":[
- "FUNCvirNetNB" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCvirNetNB", wiki_file:"FUNCvirNetNBWiki.txt" ],
- "FUNCbgpls" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "FUNCbgpls", wiki_file:"FUNCbgplsWiki.txt" ],
- "VPLSBasic" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "VPLSBasic", wiki_file:"VPLSBasicWiki.txt" ],
- "VPLSfailsafe" : [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "VPLSfailsafe", wiki_file:"VPLSfailsafeWiki.txt" ],
- "USECASE_SdnipFunction": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SDNIP Function", wiki_file:"USECASE_SdnipFunctionWiki.txt" ],
- "USECASE_SdnipFunctionCluster": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SDNIP Function Cluster", wiki_file:"USECASE_SdnipFunctionClusterWiki.txt" ],
- "PLATdockertest": [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:"Docker Images sanity test", wiki_file:"PLATdockertestTableWiki.txt" ]
- ],
- "SR":[
- "SRBridging": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Bridging", wiki_file:"SRBridgingWiki.txt" ],
- "SRRouting": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Routing", wiki_file:"SRRoutingWiki.txt" ],
- "SRDhcprelay": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Dhcp Relay", wiki_file:"SRDhcprelayWiki.txt" ],
- "SRDynamicConf": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Dynamic Config", wiki_file:"SRDynamicConfWiki.txt" ],
- "SRMulticast": [ "basic":true, "extra_A":false, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Multi Cast", wiki_file:"SRMulticastWiki.txt" ],
- "SRSanity": [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Sanity", wiki_file:"SRSanityWiki.txt" ],
- "SRSwitchFailure": [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Switch Failure", wiki_file:"SRSwitchFailureWiki.txt" ],
- "SRLinkFailure": [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Link Failure", wiki_file:"SRLinkFailureWiki.txt" ],
- "SROnosFailure": [ "basic":false, "extra_A":true, "extra_B":false, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Onos node Failure", wiki_file:"SROnosFailureWiki.txt" ],
- "SRClusterRestart": [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Cluster Restart", wiki_file:"SRClusterRestartWiki.txt" ],
- "SRDynamic": [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR Dynamic", wiki_file:"SRDynamicWiki.txt" ],
- "SRHighAvailability": [ "basic":false, "extra_A":false, "extra_B":true, "new_Test":false, "day":"", wiki_link:wikiPrefix + "-" + "SR High Availability", wiki_file:"SRHighAvailabilityWiki.txt" ]
- ]
- ];
+ "FUNC": [
+ "FUNCipv6Intent": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCipv6Intent",
+ wiki_file: "FUNCipv6IntentWiki.txt" ],
+ "FUNCoptical": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCoptical",
+ wiki_file: "FUNCopticalWiki.txt" ],
+ "FUNCflow": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCflow",
+ wiki_file: "FUNCflowWiki.txt" ],
+ "FUNCnetCfg": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCnetCfg",
+ wiki_file: "FUNCnetCfgWiki.txt" ],
+ "FUNCovsdbtest": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCovsdbtest",
+ wiki_file: "FUNCovsdbtestWiki.txt" ],
+ "FUNCnetconf": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCnetconf",
+ wiki_file: "FUNCnetconfWiki.txt" ],
+ "FUNCgroup": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCgroup",
+ wiki_file: "FUNCgroupWiki.txt" ],
+ "FUNCintent": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCintent",
+ wiki_file: "FUNCintentWiki.txt" ],
+ "FUNCintentRest": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "FUNCintentRest",
+ wiki_file: "FUNCintentRestWiki.txt" ],
+ "FUNCformCluster": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " FUNCformCluster ",
+ wiki_file: "FUNCformClusterWiki.txt" ]
+ ],
+ "HA": [
+ "HAsanity": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Sanity",
+ wiki_file: "HAsanityWiki.txt" ],
+ "HAclusterRestart": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Cluster Restart",
+ wiki_file: "HAclusterRestartWiki.txt" ],
+ "HAsingleInstanceRestart": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Single Instance Restart",
+ wiki_file: "HAsingleInstanceRestartWiki.txt" ],
+ "HAstopNodes": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Stop Nodes",
+ wiki_file: "HAstopNodes.txt" ],
+ "HAfullNetPartition": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Full Network Partition",
+ wiki_file: "HAfullNetPartitionWiki.txt" ],
+ "HAswapNodes": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Swap Nodes",
+ wiki_file: "HAswapNodesWiki.txt" ],
+ "HAscaling": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Scaling",
+ wiki_file: "HAscalingWiki.txt" ],
+ "HAkillNodes": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Kill Nodes",
+ wiki_file: "HAkillNodes.txt" ],
+ "HAbackupRecover": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Backup Recover",
+ wiki_file: "HAbackupRecoverWiki.txt" ],
+ "HAupgrade": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Upgrade",
+ wiki_file: "HAupgradeWiki.txt" ],
+ "HAupgradeRollback": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + "-" + "HA Upgrade Rollback",
+ wiki_file: "HAupgradeRollbackWiki.txt" ]
+ ],
+ "SCPF": [
+ "SCPFswitchLat": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": "" ],
+ "SCPFcbench": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFportLat": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFflowTp1g": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentEventTp": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFhostLat": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFbatchFlowResp": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentRerouteLat": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentInstallWithdrawLat": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFflowTp1gWithFlowObj": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentEventTpWithFlowObj": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentRerouteLatWithFlowObj": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFscalingMaxIntentsWithFlowObj": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFintentInstallWithdrawLatWithFlowObj": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "extra_C": false,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFscaleTopo": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": true,
+ "extra_D": false,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFscalingMaxIntents": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": true,
+ "new_Test": false,
+ "day": " " ],
+ "SCPFmastershipFailoverLat": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": false,
+ "extra_C": false,
+ "extra_D": true,
+ "new_Test": false,
+ "day": " " ]
+ ],
+ "USECASE": [
+ "FUNCvirNetNB": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " FUNCvirNetNB ",
+ wiki_file: " FUNCvirNetNBWiki.txt " ],
+ "FUNCbgpls": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " FUNCbgpls ",
+ wiki_file: " FUNCbgplsWiki.txt " ],
+ "VPLSBasic": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " VPLSBasic ",
+ wiki_file: " VPLSBasicWiki.txt " ],
+ "VPLSfailsafe": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " VPLSfailsafe ",
+ wiki_file: " VPLSfailsafeWiki.txt " ],
+ "USECASE_SdnipFunction": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SDNIP Function ",
+ wiki_file: " USECASE_SdnipFunctionWiki.txt " ],
+ "USECASE_SdnipFunctionCluster": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SDNIP Function Cluster ",
+ wiki_file: " USECASE_SdnipFunctionClusterWiki.txt " ],
+ "PLATdockertest": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: " Docker Images sanity test ",
+ wiki_file: " PLATdockertestTableWiki.txt " ]
+ ],
+ "SR": [
+ "SRBridging": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Bridging ",
+ wiki_file: " SRBridgingWiki.txt " ],
+ "SRRouting": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Routing ",
+ wiki_file: " SRRoutingWiki.txt " ],
+ "SRDhcprelay": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Dhcp Relay ",
+ wiki_file: " SRDhcprelayWiki.txt " ],
+ "SRDynamicConf": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Dynamic Config ",
+ wiki_file: " SRDynamicConfWiki.txt " ],
+ "SRMulticast": [
+ "basic": true,
+ "extra_A": false,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Multi Cast ",
+ wiki_file: " SRMulticastWiki.txt " ],
+ "SRSanity": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Sanity ",
+ wiki_file: " SRSanityWiki.txt " ],
+ "SRSwitchFailure": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Switch Failure ",
+ wiki_file: " SRSwitchFailureWiki.txt " ],
+ "SRLinkFailure": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Link Failure ",
+ wiki_file: " SRLinkFailureWiki.txt " ],
+ "SROnosFailure": [
+ "basic": false,
+ "extra_A": true,
+ "extra_B": false,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Onos node Failure ",
+ wiki_file: " SROnosFailureWiki.txt " ],
+ "SRClusterRestart": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Cluster Restart ",
+ wiki_file: " SRClusterRestartWiki.txt " ],
+ "SRDynamic": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR Dynamic ",
+ wiki_file: " SRDynamicWiki.txt " ],
+ "SRHighAvailability": [
+ "basic": false,
+ "extra_A": false,
+ "extra_B": true,
+ "new_Test": false,
+ "day": "",
+ wiki_link: wikiPrefix + " - " + " SR High Availability ",
+ wiki_file: " SRHighAvailabilityWiki.txt " ]
+ ]
+ ]
}
-return this;
+return this
diff --git a/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy b/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
index c2dfc5d..2c86f43 100644
--- a/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
@@ -25,14 +25,15 @@
fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
fileRelated.init()
+
def init(){
- // init step for SCPFfunctions. It has some mandatory init steps
+ // init step for SCPF functions. It has some mandatory init steps
// none, batches, neighbors, times : to be used for extra parameters for generating graphs.
- none = [ "" ]
- batches = [ 1, 100, 1000 ]
- neighbors = [ 'y', 'n' ]
- times = [ 'y', 'n' ]
+ def none = [ "" ]
+ def batches = [ 1, 100, 1000 ]
+ def neighbors = [ 'y', 'n' ]
+ def times = [ 'y', 'n' ]
//flows : whether the test is affected by oldFlow or newFlow
// test : command of the test to be executed when running the test
@@ -51,91 +52,293 @@
// y_axis : title of the y_axis to be shown for 50 data overall graph if there is one.
SCPF = [
- SCPFcbench: [ flows:false, test:'SCPFcbench', table:'cbench_bm_tests', results:'cbench_bm_results', file:'CbenchDB', rFile:'SCPFcbench.R', extra:none, finalResult:1, graphTitle:[ 'Cbench Test' ], dbCols:'avg', dbWhere:'', y_axis:'Throughput (Responses/sec)' ],
- SCPFhostLat: [ flows:false, test:'SCPFhostLat', table:'host_latency_tests', results:'host_latency_results', file:'HostAddLatency', rFile:'SCPFhostLat.R', extra:none,finalResult:1, graphTitle:[ 'Host Latency Test' ], dbCols:'avg', dbWhere:'AND scale=5', y_axis:'Latency (ms)' ],
- SCPFportLat: [ flows:false, test:'SCPFportLat', table:'port_latency_details', results:'port_latency_results', file:'/tmp/portEventResultDb', rFile:'SCPFportLat.R', extra:none, finalResult:1, graphTitle:[ 'Port Latency Test - Port Up','Port Latency Test - Port Down' ], dbCols:[ 'up_ofp_to_dev_avg, up_dev_to_link_avg, up_link_to_graph_avg', 'down_ofp_to_dev_avg, down_dev_to_link_avg, down_link_to_graph_avg' ], dbWhere:'AND scale=5', y_axis:'Latency (ms)' ],
- SCPFflowTp1g: [ flows:true, test:'SCPFflowTp1g', table:'flow_tp_tests', results:'flow_tp_results', file:'flowTP1gDB', rFile:'SCPFflowTp1g.R n', extra:neighbors, finalResult:1, graphTitle:[ 'Flow Throughput Test - neighbors=0', 'Flow Throughput Test - neighbors=4' ], dbCols:'avg', dbWhere:[ 'AND scale=5 AND neighbors=0 ','AND scale=5 AND NOT neighbors=0' ], y_axis:'Throughput (,000 Flows/sec)' ],
- SCPFflowTp1gWithFlowObj: [ flows:true, test:'SCPFflowTp1g --params TEST/flowObj=True', table:'flow_tp_fobj_tests', results:'flow_tp_fobj_results', file:'flowTP1gDBFlowObj', rFile:'SCPFflowTp1g.R y', extra:neighbors, finalResult:0 ],
- SCPFscaleTopo: [ flows:false, test:'SCPFscaleTopo', table:'scale_topo_latency_details', results:'scale_topo_latency_results', file:'/tmp/scaleTopoResultDb', rFile:'SCPFscaleTopo.R', extra:none, finalResult:1, graphTitle:[ 'Scale Topology Test' ], dbCols:[ 'first_connection_to_last_connection, last_connection_to_last_role_request, last_role_request_to_last_topology' ], dbWhere:'AND scale=20' , y_axis:'Latency (s)' ],
- SCPFswitchLat: [ flows:false, test:'SCPFswitchLat', table:'switch_latency_details', results:'switch_latency_results', file:'/tmp/switchEventResultDb', rFile:'SCPFswitchLat.R', extra:none, finalResult:1, graphTitle:[ 'Switch Latency Test - Switch Up','Switch Latency Test - Switch Down' ], dbCols:[ 'tcp_to_feature_reply_avg,feature_reply_to_device_avg,up_device_to_graph_avg', 'fin_ack_to_ack_avg,ack_to_device_avg,down_device_to_graph_avg' ], dbWhere:'AND scale=5', y_axis:'Latency (ms)' ],
- SCPFbatchFlowResp: [ flows:true, test:'SCPFbatchFlowResp', table:'batch_flow_tests', results:'batch_flow_results', file:'SCPFbatchFlowRespData', rFile:'SCPFbatchFlowResp.R', extra:none, finalResult:1, graphTitle:[ 'Batch Flow Test - Post', 'Batch Flow Test - Del' ], dbCols:[ 'elapsepost, posttoconfrm', 'elapsedel, deltoconfrm' ], dbWhere:'', y_axis:'Latency (s)' ],
- SCPFintentEventTp: [ flows:true, test:'SCPFintentEventTp', table:'intent_tp_tests', results:'intent_tp_results', file:'IntentEventTPDB', rFile:'SCPFintentEventTp.R n', extra:neighbors, finalResult:1, graphTitle:[ 'Intent Throughput Test - neighbors=0','Intent Throughput Test - neighbors=4' ], dbCols:'SUM( avg ) as avg', dbWhere:[ 'AND scale=5 AND neighbors=0 GROUP BY date,build','AND scale=5 AND NOT neighbors=0 GROUP BY date,build' ], y_axis:'Throughput (Ops/sec)' ],
- SCPFintentRerouteLat: [ flows:true, test:'SCPFintentRerouteLat', table:'intent_reroute_latency_tests', results:'intent_reroute_latency_results', file:'IntentRerouteLatDB', rFile:'SCPFIntentInstallWithdrawRerouteLat.R n', extra:batches, finalResult:1, graphTitle:[ 'Intent Reroute Test' ], dbCols:'avg', dbWhere:'AND scale=5 AND batch_size=100', y_axis:'Latency (ms)' ],
- SCPFscalingMaxIntents: [ flows:true, test:'SCPFscalingMaxIntents', table:'max_intents_tests', results:'max_intents_results', file:'ScalingMaxIntentDB', rFile:'SCPFscalingMaxIntents.R n', extra:none, finalResult:0 ],
- SCPFintentEventTpWithFlowObj: [ flows:true, test:'SCPFintentEventTp --params TEST/flowObj=True', table:'intent_tp_fobj_tests', results:'intent_tp_fobj_results', file:'IntentEventTPflowObjDB', rFile:'SCPFintentEventTp.R y', extra:neighbors,finalResult:0 ],
- SCPFintentInstallWithdrawLat: [ flows:true, test:'SCPFintentInstallWithdrawLat', table:'intent_latency_tests', results:'intent_latency_results', file:'IntentInstallWithdrawLatDB', rFile:'SCPFIntentInstallWithdrawRerouteLat.R n', extra:batches,finalResult:1, graphTitle:[ 'Intent Installation Test','Intent Withdrawal Test' ], dbCols:[ 'install_avg','withdraw_avg' ], dbWhere:'AND scale=5 AND batch_size=100', y_axis:'Latency (ms)' ],
- SCPFintentRerouteLatWithFlowObj: [ flows:true, test:'SCPFintentRerouteLat --params TEST/flowObj=True', table:'intent_reroute_latency_fobj_tests', results:'intent_reroute_latency_fobj_results', file:'IntentRerouteLatDBWithFlowObj', rFile:'SCPFIntentInstallWithdrawRerouteLat.R y', extra:batches, finalResult:0 ],
- SCPFscalingMaxIntentsWithFlowObj: [ flows:true, test:'SCPFscalingMaxIntents --params TEST/flowObj=True', table:'max_intents_fobj_tests', results:'max_intents_fobj_results', file:'ScalingMaxIntentDBWFO', rFile:'SCPFscalingMaxIntents.R y', extra:none, finalResult:0 ],
- SCPFintentInstallWithdrawLatWithFlowObj: [ flows:true, test:'SCPFintentInstallWithdrawLat --params TEST/flowObj=True', table:'intent_latency_fobj_tests', results:'intent_latency_fobj_results', file:'IntentInstallWithdrawLatDBWFO', rFile:'SCPFIntentInstallWithdrawRerouteLat.R y', extra:batches, finalResult:0 ],
- SCPFmastershipFailoverLat: [ flows:false, test:'SCPFmastershipFailoverLat', table:'mastership_failover_tests', results:'mastership_failover_results', file:'mastershipFailoverLatDB', rFile:'SCPFmastershipFailoverLat.R', extra:none, finalResult:1, graphTitle:[ 'Mastership Failover Test' ], dbCols:[ 'kill_deact_avg,deact_role_avg' ], dbWhere:'AND scale=5', y_axis:'Latency (ms)' ]
+ SCPFcbench: [ flows: false,
+ test: 'SCPFcbench',
+ table: 'cbench_bm_tests',
+ results: 'cbench_bm_results',
+ file: 'CbenchDB',
+ rFile: 'SCPFcbench.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Cbench Test' ],
+ dbCols: 'avg',
+ dbWhere: '',
+ y_axis: 'Throughput (Responses/sec)' ],
+ SCPFhostLat: [ flows: false,
+ test: 'SCPFhostLat',
+ table: 'host_latency_tests',
+ results: 'host_latency_results',
+ file: 'HostAddLatency',
+ rFile: 'SCPFhostLat.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Host Latency Test' ],
+ dbCols: 'avg',
+ dbWhere: 'AND scale=5',
+ y_axis: 'Latency (ms)' ],
+ SCPFportLat: [ flows: false,
+ test: 'SCPFportLat',
+ table: 'port_latency_details',
+ results: 'port_latency_results',
+ file: '/tmp/portEventResultDb',
+ rFile: 'SCPFportLat.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Port Latency Test - Port Up', 'Port Latency Test - Port Down' ],
+ dbCols: [ 'up_ofp_to_dev_avg, up_dev_to_link_avg, up_link_to_graph_avg',
+ 'down_ofp_to_dev_avg, down_dev_to_link_avg, down_link_to_graph_avg' ],
+ dbWhere: 'AND scale=5', y_axis: 'Latency (ms)' ],
+ SCPFflowTp1g: [ flows: true,
+ test: 'SCPFflowTp1g',
+ table: 'flow_tp_tests',
+ results: 'flow_tp_results',
+ file: 'flowTP1gDB',
+ rFile: 'SCPFflowTp1g.R n',
+ extra: neighbors,
+ finalResult: 1,
+ graphTitle: [ 'Flow Throughput Test - neighbors=0',
+ 'Flow Throughput Test - neighbors=4' ],
+ dbCols: 'avg',
+ dbWhere: [ 'AND scale=5 AND neighbors=0 ',
+ 'AND scale=5 AND NOT neighbors=0' ],
+ y_axis: 'Throughput (,000 Flows/sec)' ],
+ SCPFflowTp1gWithFlowObj: [ flows: true,
+ test: 'SCPFflowTp1g --params TEST/flowObj=True',
+ table: 'flow_tp_fobj_tests',
+ results: 'flow_tp_fobj_results',
+ file: 'flowTP1gDBFlowObj',
+ rFile: 'SCPFflowTp1g.R y',
+ extra: neighbors,
+ finalResult: 0 ],
+ SCPFscaleTopo: [ flows: false,
+ test: 'SCPFscaleTopo',
+ table: 'scale_topo_latency_details',
+ results: 'scale_topo_latency_results',
+ file: '/tmp/scaleTopoResultDb',
+ rFile: 'SCPFscaleTopo.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Scale Topology Test' ],
+ dbCols: [ 'first_connection_to_last_connection, last_connection_to_last_role_request, last_role_request_to_last_topology' ],
+ dbWhere: 'AND scale=20',
+ y_axis: 'Latency (s)' ],
+ SCPFswitchLat: [ flows: false,
+ test: 'SCPFswitchLat',
+ table: 'switch_latency_details',
+ results: 'switch_latency_results',
+ file: '/tmp/switchEventResultDb',
+ rFile: 'SCPFswitchLat.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Switch Latency Test - Switch Up',
+ 'Switch Latency Test - Switch Down' ],
+ dbCols: [ 'tcp_to_feature_reply_avg,feature_reply_to_device_avg,up_device_to_graph_avg',
+ 'fin_ack_to_ack_avg,ack_to_device_avg,down_device_to_graph_avg' ],
+ dbWhere: 'AND scale=5',
+ y_axis: 'Latency (ms)' ],
+ SCPFbatchFlowResp: [ flows: true,
+ test: 'SCPFbatchFlowResp',
+ table: 'batch_flow_tests',
+ results: 'batch_flow_results',
+ file: 'SCPFbatchFlowRespData',
+ rFile: 'SCPFbatchFlowResp.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Batch Flow Test - Post',
+ 'Batch Flow Test - Del' ],
+ dbCols: [ 'elapsepost, posttoconfrm',
+ 'elapsedel, deltoconfrm' ],
+ dbWhere: '',
+ y_axis: 'Latency (s)' ],
+ SCPFintentEventTp: [ flows: true,
+ test: 'SCPFintentEventTp',
+ table: 'intent_tp_tests',
+ results: 'intent_tp_results',
+ file: 'IntentEventTPDB',
+ rFile: 'SCPFintentEventTp.R n',
+ extra: neighbors,
+ finalResult: 1,
+ graphTitle: [ 'Intent Throughput Test - neighbors=0',
+ 'Intent Throughput Test - neighbors=4' ],
+ dbCols: 'SUM( avg ) as avg',
+ dbWhere: [ 'AND scale=5 AND neighbors=0 GROUP BY date,build',
+ 'AND scale=5 AND NOT neighbors=0 GROUP BY date,build' ],
+ y_axis: 'Throughput (Ops/sec)' ],
+ SCPFintentRerouteLat: [ flows: true,
+ test: 'SCPFintentRerouteLat',
+ table: 'intent_reroute_latency_tests',
+ results: 'intent_reroute_latency_results',
+ file: 'IntentRerouteLatDB',
+ rFile: 'SCPFIntentInstallWithdrawRerouteLat.R n',
+ extra: batches,
+ finalResult: 1,
+ graphTitle: [ 'Intent Reroute Test' ],
+ dbCols: 'avg',
+ dbWhere: 'AND scale=5 AND batch_size=100',
+ y_axis: 'Latency (ms)' ],
+ SCPFscalingMaxIntents: [ flows: true,
+ test: 'SCPFscalingMaxIntents',
+ table: 'max_intents_tests',
+ results: 'max_intents_results',
+ file: 'ScalingMaxIntentDB',
+ rFile: 'SCPFscalingMaxIntents.R n',
+ extra: none,
+ finalResult: 0 ],
+ SCPFintentEventTpWithFlowObj: [ flows: true,
+ test: 'SCPFintentEventTp --params TEST/flowObj=True',
+ table: 'intent_tp_fobj_tests',
+ results: 'intent_tp_fobj_results',
+ file: 'IntentEventTPflowObjDB',
+ rFile: 'SCPFintentEventTp.R y',
+ extra: neighbors,
+ finalResult: 0 ],
+ SCPFintentInstallWithdrawLat: [ flows: true,
+ test: 'SCPFintentInstallWithdrawLat',
+ table: 'intent_latency_tests',
+ results: 'intent_latency_results',
+ file: 'IntentInstallWithdrawLatDB',
+ rFile: 'SCPFIntentInstallWithdrawRerouteLat.R n',
+ extra: batches,
+ finalResult: 1,
+ graphTitle: [ 'Intent Installation Test',
+ 'Intent Withdrawal Test' ],
+ dbCols: [ 'install_avg', 'withdraw_avg' ],
+ dbWhere: 'AND scale=5 AND batch_size=100',
+ y_axis: 'Latency (ms)' ],
+ SCPFintentRerouteLatWithFlowObj: [ flows: true,
+ test: 'SCPFintentRerouteLat --params TEST/flowObj=True',
+ table: 'intent_reroute_latency_fobj_tests',
+ results: 'intent_reroute_latency_fobj_results',
+ file: 'IntentRerouteLatDBWithFlowObj',
+ rFile: 'SCPFIntentInstallWithdrawRerouteLat.R y',
+ extra: batches,
+ finalResult: 0 ],
+ SCPFscalingMaxIntentsWithFlowObj: [ flows: true,
+ test: 'SCPFscalingMaxIntents --params TEST/flowObj=True',
+ table: 'max_intents_fobj_tests',
+ results: 'max_intents_fobj_results',
+ file: 'ScalingMaxIntentDBWFO',
+ rFile: 'SCPFscalingMaxIntents.R y',
+ extra: none,
+ finalResult: 0 ],
+ SCPFintentInstallWithdrawLatWithFlowObj: [ flows: true,
+ test: 'SCPFintentInstallWithdrawLat --params TEST/flowObj=True',
+ table: 'intent_latency_fobj_tests',
+ results: 'intent_latency_fobj_results',
+ file: 'IntentInstallWithdrawLatDBWFO',
+ rFile: 'SCPFIntentInstallWithdrawRerouteLat.R y',
+ extra: batches,
+ finalResult: 0 ],
+ SCPFmastershipFailoverLat: [ flows: false,
+ test: 'SCPFmastershipFailoverLat',
+ table: 'mastership_failover_tests',
+ results: 'mastership_failover_results',
+ file: 'mastershipFailoverLatDB',
+ rFile: 'SCPFmastershipFailoverLat.R',
+ extra: none,
+ finalResult: 1,
+ graphTitle: [ 'Mastership Failover Test' ],
+ dbCols: [ 'kill_deact_avg,deact_role_avg' ],
+ dbWhere: 'AND scale=5',
+ y_axis: 'Latency (ms)' ]
]
graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-BM/"
}
+
def getGraphCommand( rFileName, extras, host, port, user, pass, testName, branchName, isOldFlow ){
// generate the list of Rscript command for individual graphs
result = ""
- for( extra in extras ){
+ for ( extra in extras ){
result += generateGraph( rFileName, " " + extra, host, port, user, pass, testName, branchName, isOldFlow ) + ";"
}
return result
}
+
def generateGraph( rFileName, batch, host, port, user, pass, testName, branchName, isOldFlow ){
// generate the Rscript command for individual graphs
- return generalFuncs.basicGraphPart( fileRelated.SCPFSpecificLocation + rFileName, host, port, user, pass, testName, branchName ) +
+ return generalFuncs.basicGraphPart( fileRelated.SCPFSpecificLocation + rFileName,
+ host, port, user, pass, testName, branchName ) +
" " + batch + " " + usingOldFlow( isOldFlow, testName ) + graph_saved_directory
}
+
def generateCombinedResultGraph( host, port, user, pass, testName, branchName, isOldFlow ){
// generate Rscript for overall graph for the front page.
- result = ""
+ def result = ""
- for ( int i=0; i< SCPF[ testName ][ 'graphTitle' ].size(); i++ ){
- result += generalFuncs.basicGraphPart( fileRelated.trendSCPF, host, port, user, pass, "\"" + SCPF[ testName ][ 'graphTitle' ][ i ] + "\"", branchName ) +
- " " + 50 + " \"SELECT " + checkIfList( testName, 'dbCols', i ) + ", build FROM " + SCPF[ testName ][ 'table' ] + " WHERE branch=\'" + branchName + "\' " + sqlOldFlow( isOldFlow, testName ) +
- checkIfList( testName, 'dbWhere', i ) + " ORDER BY date DESC LIMIT 50\" \"" + SCPF[ testName ][ 'y_axis' ] + "\" " + hasOldFlow( isOldFlow, testName ) + graph_saved_directory + ";"
+ for ( int i = 0; i < SCPF[ testName ][ 'graphTitle' ].size(); i++ ){
+ result += generalFuncs.basicGraphPart( fileRelated.trendSCPF,
+ host,
+ port,
+ user,
+ pass,
+ "\"" + SCPF[ testName ][ 'graphTitle' ][ i ] + "\"",
+ branchName ) +
+ " " + 50 + " \"SELECT " +
+ checkIfList( testName, 'dbCols', i ) +
+ ", build FROM " + SCPF[ testName ][ 'table' ] + " WHERE branch=\'" + branchName + "\' " +
+ sqlOldFlow( isOldFlow, testName ) +
+ checkIfList( testName, 'dbWhere', i ) +
+ " ORDER BY date DESC LIMIT 50\" \"" +
+ SCPF[ testName ][ 'y_axis' ] + "\" " +
+ hasOldFlow( isOldFlow, testName ) +
+ graph_saved_directory + ";"
}
return result
}
+
def checkIfList( testName, forWhich, pos ){
// check if some dictionary has list or string.
- return SCPF[ testName ][ forWhich ].getClass().getName() != "java.lang.String" ? SCPF[ testName ][ forWhich ][ pos ] : SCPF[ testName ][ forWhich ]
+ return SCPF[ testName ][ forWhich ].getClass().getName() != "java.lang.String" ?
+ SCPF[ testName ][ forWhich ][ pos ] :
+ SCPF[ testName ][ forWhich ]
}
+
def sqlOldFlow( isOldFlow, testName ){
// sql where command part for checking old flows.
return SCPF[ testName ][ 'flows' ] ? " AND " + ( isOldFlow ? "" : "NOT " ) + "is_old_flow " : ""
}
+
def oldFlowRuleCheck( isOldFlow, branch ){
// checking if it is old flow
this.isOldFlow = isOldFlow
- if( !isOldFlow ){
+ if ( !isOldFlow ){
SCPF[ 'SCPFflowTp1g' ][ 'test' ] += " --params TEST/flows=" + ( branch == "onos-1.11" ? "4000" : "3500" )
}
}
+
def affectedByOldFlow( isOldFlow, testName ){
// For sql command : if the test is affect by old flow, it will return parameters for old flow
return SCPF[ testName ][ 'flows' ] ? "" + isOldFlow + ", " : ""
}
+
def usingOldFlow( isOldFlow, testName ){
// For Rscript command : if it is using old flow.
return SCPF[ testName ][ 'flows' ] ? ( isOldFlow ? "y" : "n" ) + " " : ""
}
+
def hasOldFlow( isOldFlow, testName ){
// For Rscript command for 50 data
return ( SCPF[ testName ][ 'flows' ] && isOldFlow ? "y" : "n" ) + " "
}
+
def sqlCommand( testName ){
// sql command for inserting data into the database
- if ( testName == "SCPFscaleTopo" || testName == "SCPFswitchLat" || testName == "SCPFportLat" )
- return "\"INSERT INTO " + SCPF[ testName ][ 'table' ] + " VALUES( '\$DATE','" + SCPF[ testName ][ 'results' ] + "','\$BUILD_NUMBER', \$line, '\$ONOSBranch');\""
- return "\"INSERT INTO " + SCPF[ testName ][ 'table' ] + " VALUES( '\$DATE','" + SCPF[ testName ][ 'results' ] + "','\$BUILD_NUMBER', '\$ONOSBranch', " + affectedByOldFlow( isOldFlow, testName ) + "\$line);\""
+ if ( testName == "SCPFscaleTopo" || testName == "SCPFswitchLat" || testName == "SCPFportLat" ){
+ return "\"INSERT INTO " + SCPF[ testName ][ 'table' ] + " VALUES( '\$DATE','" +
+ SCPF[ testName ][ 'results' ] + "','\$BUILD_NUMBER', \$line, '\$ONOSBranch');\""
+ }
+ return "\"INSERT INTO " + SCPF[ testName ][ 'table' ] + " VALUES( '\$DATE','" + SCPF[ testName ][ 'results' ] +
+ "','\$BUILD_NUMBER', '\$ONOSBranch', " + affectedByOldFlow( isOldFlow, testName ) + "\$line);\""
}
+
def databasePart( testName, database_command ){
// read the file from the machine and insert it to the database
@@ -147,10 +350,16 @@
echo ''' + database_command + '''
done< ''' + SCPF[ testName ][ 'file' ]
}
+
def getGraphGeneratingCommand( host, port, user, pass, testName, prop ){
// returns the combined Rscript command for each test.
- return getGraphCommand( SCPF[ testName ][ 'rFile' ], SCPF[ testName ][ 'extra' ], host, port, user, pass, testName, prop[ "ONOSBranch" ], isOldFlow ) + '''
- ''' + ( SCPF[ testName ][ 'finalResult' ] ? generateCombinedResultGraph( host, port, user, pass, testName, prop[ "ONOSBranch" ], , isOldFlow ) : "" )
+ return getGraphCommand( SCPF[ testName ][ 'rFile' ],
+ SCPF[ testName ][ 'extra' ],
+ host, port, user, pass, testName,
+ prop[ "ONOSBranch" ], isOldFlow ) + '''
+ ''' + ( SCPF[ testName ][ 'finalResult' ] ?
+ generateCombinedResultGraph( host, port, user, pass, testName, prop[ "ONOSBranch" ], isOldFlow ) : "" )
}
-return this;
+
+return this
diff --git a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy b/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
index 238d7bc..07ea98b 100644
--- a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
@@ -23,24 +23,27 @@
// This will provide the portion that will set up the environment of the machine
// and trigger the corresponding jobs.
+
def init( commonFuncs ){
funcs = commonFuncs
}
+
def lastCommaRemover( str ){
// function that will remove the last comma from the string
if ( str.size() > 0 && str[ str.size() - 1 ] == ',' ){
- str = str.substring( 0,str.size() - 1 )
+ str = str.substring( 0, str.size() - 1 )
}
return str
}
+
def printDaysForTest( AllTheTests ){
// Print the days for what test has.
result = ""
for ( String test in AllTheTests.keySet() ){
result += test + " : \n"
- for( String each in AllTheTests[ test ].keySet() ){
+ for ( String each in AllTheTests[ test ].keySet() ){
AllTheTests[ test ][ each ][ "day" ] = lastCommaRemover( AllTheTests[ test ][ each ][ "day" ] )
result += " " + each + ":[" + AllTheTests[ test ][ each ][ "day" ] + "]\n"
}
@@ -48,34 +51,52 @@
}
return result
}
+
def runTestSeq( testList ){
// Running the test sequentially
- return{
+ return {
for ( test in testList.keySet() ){
testList[ test ].call()
}
}
}
+
def print_tests( tests ){
// print the list of the tsets to be run
- for( String test in tests.keySet() ){
- if( tests[ test ][ "tests" ] != "" ){
+ for ( String test in tests.keySet() ){
+ if ( tests[ test ][ "tests" ] != "" ){
println test + ":"
println tests[ test ][ "tests" ]
}
}
}
+
def organize_tests( tests, testcases ){
// organize the test to its category using its name.
// most of the time it will use the first two character of the test name
// but there are some exceptions like FUNCbgpls or FUNCvirNetNB since they are now under USECASE
- testList = tests.tokenize( "\n;, " )
- for( String test in testList )
- testcases [ Prefix_organizer[ ( test == "FUNCbgpls" || test == "FUNCvirNetNB" ? "US" : ( test[ 0 ] + test[ 1 ] ) ) ] ][ "tests" ] += test + ","
+ // depends on the first two letters of the test name, it will decide which category to put the test into.
+ def prefixes = [
+ "FU": "FUNC",
+ "HA": "HA",
+ "PL": "USECASE",
+ "SA": "USECASE",
+ "SC": "SCPF",
+ "SR": "SR",
+ "US": "USECASE",
+ "VP": "USECASE"
+ ]
+
+ def testList = tests.tokenize( "\n;, " )
+ for ( String test in testList ){
+ String prefix = ( test == "FUNCbgpls" || test == "FUNCvirNetNB" ) ? "US" : ( test[ 0..1 ] )
+ testcases[ prefixes[ prefix ] ][ "tests" ] += test + ","
+ }
return testcases
}
+
def trigger( branch, tests, nodeName, jobOn, manuallyRun, onosTag ){
// triggering function that will setup the environment and determine which pipeline to trigger
@@ -83,7 +104,7 @@
def wiki = branch
branch = funcs.branchWithPrefix( branch )
test_branch = "master"
- node( "TestStation-" + nodeName + "s" ){
+ node( "TestStation-" + nodeName + "s" ) {
envSetup( branch, test_branch, onosTag, jobOn, manuallyRun )
exportEnvProperty( branch, test_branch, wiki, tests, post_result, manuallyRun, onosTag, isOldFlow )
@@ -92,33 +113,36 @@
jobToRun = jobOn + "-pipeline-" + ( manuallyRun ? "manually" : wiki )
build job: jobToRun, propagate: false
}
+
def trigger_pipeline( branch, tests, nodeName, jobOn, manuallyRun, onosTag ){
// nodeName : "BM" or "VM"
// jobOn : "SCPF" or "USECASE" or "FUNC" or "HA"
// this will return the function by wrapping them up with return{} to prevent them to be
// executed once this function is called to assign to specific variable.
- return{
+ return {
trigger( branch, tests, nodeName, jobOn, manuallyRun, onosTag )
}
}
+
// export Environment properties.
def exportEnvProperty( onos_branch, test_branch, wiki, tests, postResult, manually_run, onosTag, isOldFlow ){
// export environment properties to the machine.
- stage( "export Property" ){
+ stage( "export Property" ) {
sh '''
- echo "ONOSBranch=''' + onos_branch +'''" > /var/jenkins/TestONOS.property
- echo "TestONBranch=''' + test_branch +'''" >> /var/jenkins/TestONOS.property
- echo "ONOSTag='''+ onosTag +'''" >> /var/jenkins/TestONOS.property
- echo "WikiPrefix=''' + wiki +'''" >> /var/jenkins/TestONOS.property
- echo "ONOSJVMHeap='''+ env.ONOSJVMHeap +'''" >> /var/jenkins/TestONOS.property
- echo "Tests=''' + tests +'''" >> /var/jenkins/TestONOS.property
- echo "postResult=''' + postResult +'''" >> /var/jenkins/TestONOS.property
- echo "manualRun=''' + manually_run +'''" >> /var/jenkins/TestONOS.property
- echo "isOldFlow=''' + isOldFlow +'''" >> /var/jenkins/TestONOS.property
+ echo "ONOSBranch=''' + onos_branch + '''" > /var/jenkins/TestONOS.property
+ echo "TestONBranch=''' + test_branch + '''" >> /var/jenkins/TestONOS.property
+ echo "ONOSTag=''' + onosTag + '''" >> /var/jenkins/TestONOS.property
+ echo "WikiPrefix=''' + wiki + '''" >> /var/jenkins/TestONOS.property
+ echo "ONOSJVMHeap=''' + env.ONOSJVMHeap + '''" >> /var/jenkins/TestONOS.property
+ echo "Tests=''' + tests + '''" >> /var/jenkins/TestONOS.property
+ echo "postResult=''' + postResult + '''" >> /var/jenkins/TestONOS.property
+ echo "manualRun=''' + manually_run + '''" >> /var/jenkins/TestONOS.property
+ echo "isOldFlow=''' + isOldFlow + '''" >> /var/jenkins/TestONOS.property
'''
}
}
+
// Initialize the environment Setup for the onos and OnosSystemTest
def envSetup( onos_branch, test_branch, onos_tag, jobOn, manuallyRun ){
// to setup the environment using the bash script
@@ -135,30 +159,36 @@
generateKey()
}
}
+
def tagCheck( onos_tag, onos_branch ){
// check the tag for onos if it is not empty
result = "git checkout "
- if ( onos_tag == "" )
- result += onos_branch //create new local branch
- else
- result += onos_tag //checkout the tag
+ if ( onos_tag == "" ){
+ //create new local branch
+ result += onos_branch
+ }
+ else {
+ //checkout the tag
+ result += onos_tag
+ }
return result
}
+
def preSetup( onos_branch, test_branch, onos_tag, isManual ){
// pre setup part which will clean up and checkout to corresponding branch.
result = ""
- if( !isManual ){
+ if ( !isManual ){
result = '''echo -e "\n##### Set TestON Branch #####"
echo "TestON Branch is set on: ''' + test_branch + '''"
cd ~/OnosSystemTest/
git checkout HEAD~1 # Make sure you aren't pn a branch
git branch | grep -v "detached from" | xargs git branch -d # delete all local branches merged with remote
- git branch -D ''' + test_branch + ''' # just incase there are local changes. This will normally result in a branch not found error
+ git branch -D ''' + test_branch + ''' # just in case there are local changes. This will normally result in a branch not found error
git clean -df # clean any local files
git fetch --all # update all caches from remotes
- git reset --hard origin/''' + test_branch +''' # force local index to match remote branch
+ git reset --hard origin/''' + test_branch + ''' # force local index to match remote branch
git clean -df # clean any local files
git checkout ''' + test_branch + ''' #create new local branch
git branch
@@ -190,20 +220,22 @@
}
return result
}
+
def oldFlowCheck( jobOn, onos_branch ){
// part that will check if it is oldFlow. If so, it will switch to use old flow. Only affected with SCPF.
result = ""
- if( jobOn == "SCPF" && ( onos_branch== "master" || onos_branch=="onos-1.12" ) )
+ if ( jobOn == "SCPF" && ( onos_branch == "master" || onos_branch == "onos-1.12" ) )
result = '''sed -i -e 's/@Component(immediate = true)/@Component(enabled = false)/g' ~/onos/core/store/dist/src/main/java/org/onosproject/store/flow/impl/''' + ( isOldFlow ? "DistributedFlowRuleStore" : "ECFlowRuleStore" ) + '''.java
sed -i -e 's/@Component(enabled = false)/@Component(immediate = true)/g' ~/onos/core/store/dist/src/main/java/org/onosproject/store/flow/impl/''' + ( isOldFlow ? "ECFlowRuleStore" : "DistributedFlowRuleStore" ) + ".java"
return result
}
+
def postSetup( onos_branch, test_branch, onos_tag, isManual ){
// setup that will build the onos using buck.
result = ""
- if( !isManual ){
+ if ( !isManual ){
result = '''echo -e "\n##### build ONOS skip unit tests ######"
#mvn clean install -DskipTests
# Force buck update
@@ -218,10 +250,11 @@
}
return result
}
+
def generateKey(){
// generate cluster-key of the onos
- try{
+ try {
sh '''
#!/bin/bash -l
set +e
@@ -230,7 +263,8 @@
onos-push-bits-through-proxy
onos-gen-cluster-key -f
'''
- }catch( all ){}
+ } catch ( all ){
+ }
}
-return this;
+return this