Merge "Revert "Revert "set window size after ssh connection"""
diff --git a/TestON/JenkinsFile/CHO_Graph_Generator b/TestON/JenkinsFile/CHO_Graph_Generator
index 26e7ca2..db65ce7 100644
--- a/TestON/JenkinsFile/CHO_Graph_Generator
+++ b/TestON/JenkinsFile/CHO_Graph_Generator
@@ -24,6 +24,7 @@
fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
fileRelated.init()
+
// The way reading the parameters from the Jenkins.
branches = params.ONOSbranch
hours = params.hours
@@ -34,10 +35,11 @@
// initialize the directory.
// Script file is the R script path
-script_file = fileRelated.trendCHO
+script_file = fileRelated.rScriptPaths[ "scripts" ][ "trendCHO" ]
+
// saving_directory is the directory that save the generate graphs.
-saving_directory = fileRelated.jenkinsWorkspace + "postjob-Fabric5/"
-scriptDir = fileRelated.CHOScriptDir
+saving_directory = fileRelated.workspaces[ "Fabric5" ]
+scriptDir = fileRelated.rScriptPaths[ "directories" ][ "CHO" ]
// create a bash script that will generate the graph
graphScript = generateGraphScript( branchList )
@@ -54,7 +56,7 @@
postJob()
}
-saving_directory = fileRelated.jenkinsWorkspace + "postjob-Trellis-POD/"
+saving_directory = fileRelated.workspaces[ "Trellis" ]
graphScript = generateGraphScript( branchList )
stage( 'Generating-Graph-POD' ) {
// This will run on TestStation-Trellis-POD node.
diff --git a/TestON/JenkinsFile/CommonJenkinsFile.groovy b/TestON/JenkinsFile/CommonJenkinsFile.groovy
new file mode 100644
index 0000000..3060f08
--- /dev/null
+++ b/TestON/JenkinsFile/CommonJenkinsFile.groovy
@@ -0,0 +1,442 @@
+#!groovy
+// Copyright 2017 Open Networking Foundation (ONF)
+//
+// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+//
+// TestON is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// TestON is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+import groovy.time.TimeCategory
+import groovy.time.TimeDuration
+
+// read the dependency files
+graphs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy' )
+test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
+fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
+SCPFfuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy' )
+
+category = null
+prop = null
+testsToRun = null
+testsToRunStrList = null
+branch = null
+branchWithPrefix = null
+start = null
+nodeLabel = null
+testStation = null
+testsOverride = null
+isGraphOnly = false
+isSCPF = false
+pipelineTimeout = null
+
+testsFromList = [:]
+graphPaths = [:]
+pipeline = [:]
+
+main()
+
+def main(){
+ pipelineTimeout = params.TimeOut.toInteger() // integer minutes until the entire pipeline times out. Usually passed from upstream master-trigger job.
+ timeout( time: pipelineTimeout, unit: "MINUTES" ){
+ init()
+ runTests()
+ generateGraphs()
+ sendToSlack()
+ }
+}
+
+def init(){
+ fileRelated.init()
+ test_list.init()
+ readParams()
+
+ if ( branch == "manually" ){
+ echo '''Warning: entered branch was: "manually". Defaulting to master branch.'''
+ branch = "master"
+ branchWithPrefix = test_list.addPrefixToBranch( branch )
+ }
+
+ if ( category == "SCPF" ){
+ isSCPF = true
+ SCPFfuncs.init()
+ graphs.initialize( SCPFfuncs );
+ prop = getProperties()
+ isOldFlow = ( prop[ "isOldFlow" ] == "true" )
+ SCPFfuncs.oldFlowRuleCheck( isOldFlow, prop[ "ONOSBranch" ] )
+ } else {
+ isSCPF = false
+ graphs.initialize()
+ prop = getProperties()
+ }
+
+ // get the list of the tests from category
+ testsFromList = test_list.getTestsFromCategory( category )
+
+ initGraphPaths()
+ tokenizeTokens = "\n;, "
+
+ if ( testsOverride == "" || testsOverride == null ){
+ testsToRunStrList = prop[ "Tests" ].tokenize( tokenizeTokens )
+ } else {
+ testsToRunStrList = testsOverride.tokenize( tokenizeTokens )
+ }
+ testsToRun = test_list.getTestsFromStringList( testsToRunStrList )
+}
+
+def readParams(){
+ category = params.Category // "FUNC", "HA", "USECASE", etc.
+ branch = params.Branch // "1.15", "2.1", "master", etc.
+ branchWithPrefix = test_list.addPrefixToBranch( branch )
+ testStation = params.TestStation // "TestStation-BMs", etc.
+ nodeLabel = params.NodeLabel // "BM", "VM", "Fabric-1.x", etc.
+ testsOverride = params.TestsOverride // "FUNCflow, FUNCintent, [...]", overrides property file
+ isGraphOnly = params.OnlyRefreshGraphs // true or false
+}
+
+def getProperties(){
+ // get the properties of the test by reading the TestONOS.property
+
+ filePath = '''/var/jenkins/TestONOS-''' + category + '''-''' + branchWithPrefix + '''.property'''
+
+ node( testStation ) {
+ return readProperties( file: filePath )
+ }
+}
+
+def getCurrentTime(){
+ // get time of the PST zone.
+
+ TimeZone.setDefault( TimeZone.getTimeZone( 'PST' ) )
+ return new Date()
+}
+
+def initGraphPaths(){
+ graphPaths.put( "trendIndividual", fileRelated.rScriptPaths[ "scripts" ][ "trendIndividual" ] )
+ if ( category == "SR" ){
+ graphPaths.put( "saveDirectory", fileRelated.workspaces[ "base" ] + "postjob-" + ( testStation - "TestStation-" - "s" ) + "/" )
+ } else if ( category == "SRHA" ) {
+ graphPaths.put( "saveDirectory", fileRelated.workspaces[ "Fabric" ] )
+ } else if ( category == "SCPF" || category == "USECASE" ){
+ graphPaths.put( "saveDirectory", fileRelated.workspaces[ "BM" ] )
+ } else {
+ graphPaths.put( "saveDirectory", fileRelated.workspaces[ "VM" ] )
+ }
+}
+
+def runTests(){
+ // run the test sequentially and save the function into the dictionary.
+ for ( String test : testsFromList.keySet() ){
+ toBeRun = testsToRun.keySet().contains( test )
+ stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
+ pureTestName = test.contains( "WithFlowObj" ) ? test - "WithFlowObj" : test
+ pipeline[ stepName ] = runTest( test,
+ toBeRun,
+ prop,
+ pureTestName,
+ isGraphOnly,
+ testsToRun,
+ graphPaths[ "trendIndividual" ],
+ graphPaths[ "saveDirectory" ] )
+ }
+
+ // get the start time of the test.
+ start = getCurrentTime()
+
+ // run the tests sequentially.
+ for ( test in pipeline.keySet() ){
+ pipeline[ test ].call()
+ }
+}
+
+def initTest(){
+ return '''#!/bin/bash -l
+ set -i # interactive
+ set +e
+ shopt -s expand_aliases # expand alias in non-interactive mode
+ export PYTHONUNBUFFERED=1
+ ifconfig
+ echo "ONOS Branch is: $ONOSBranch"
+ echo "TestON Branch is: $TestONBranch"
+ echo "Test date: "
+ date
+ cd ~
+ export PATH=$PATH:onos/tools/test/bin
+ timeout 240 stc shutdown | head -100
+ timeout 240 stc teardown | head -100
+ timeout 240 stc shutdown | head -100
+ cd ~/OnosSystemTest/TestON/bin
+ git log | head
+ ./cleanup.sh -f || true
+ '''
+}
+
+def runTestCli_py( testName, pureTestName, testCategory ){
+ // Bash script that will run the test.
+ // testName : name of the test
+ // testCategory : (SR,FUNC ... )
+ flowObjFlag = false
+
+ if ( isSCPF && testName.contains( "WithFlowObj" ) ){
+ flowObjFlag = true
+ }
+
+ command = '''cd ~/OnosSystemTest/TestON/bin
+ ./cli.py run ''' + pureTestName + ''' --params''' + ( flowObjFlag ? '''TEST/flowObj=True ''' : ''' ''' ) + '''GRAPH/nodeCluster=''' + graphs.getPostjobType( nodeLabel ) + ''' '''
+ echo command
+
+ return command
+
+
+}
+
+def concludeRunTest(){
+ return '''cd ~/OnosSystemTest/TestON/bin
+ ./cleanup.sh -f || true
+ # cleanup config changes
+ cd ~/onos/tools/package/config
+ git clean -df'''
+}
+
+def copyLogs(){
+ // bash script to copy the logs and other necessary element for SR tests.
+
+ result = ""
+ if ( category == "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}/
+ sudo cp *Groups* /var/jenkins/workspace/SR-log-${WikiPrefix}/
+ sudo cp *.tar.gz /var/jenkins/workspace/SR-log-${WikiPrefix}/
+ sudo cp t3-* /var/jenkins/workspace/SR-log-${WikiPrefix}/
+ '''
+ }
+ 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
+ set +e
+ echo "ONOS Branch is: ${ONOSBranch}"
+ echo "TestON Branch is: ${TestONBranch}"
+ echo "Job name is: "''' + testName + '''
+ echo "Workspace is: ${WORKSPACE}/"
+ echo "Wiki page to post is: ${WikiPrefix}-"
+ # remove any leftover files from previous tests
+ sudo rm ${WORKSPACE}/*Wiki.txt
+ sudo rm ${WORKSPACE}/*Summary.txt
+ sudo rm ${WORKSPACE}/*Result.txt
+ sudo rm ${WORKSPACE}/*Alarm.txt || true
+ sudo rm ${WORKSPACE}/*.csv
+ #copy files to workspace
+ cd `ls -t ~/OnosSystemTest/TestON/logs/*/ | head -1 | sed 's/://'`
+ ''' + copyLogs() + '''
+ sudo cp *.txt ${WORKSPACE}/
+ sudo cp *.csv ${WORKSPACE}/
+ cd ${WORKSPACE}/
+ for i in *.csv
+ do mv "$i" "$WikiPrefix"-"$i"
+ done
+ 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
+ set +e
+ cd ~/OnosSystemTest/TestON/logs
+ echo "TestON test name is: "''' + testName + '''
+ TestONlogDir=$(ls -t | grep ${TEST_NAME}_ |head -1)
+ echo "########################################################################################"
+ echo "##### copying ONOS logs from all nodes to TestON/logs directory: ${TestONlogDir}"
+ echo "########################################################################################"
+ cd $TestONlogDir
+ if [ $? -eq 1 ]
+ then
+ echo "Job name does not match any test suite name to move log!"
+ else
+ pwd
+ for i in $OC{1..7}; do onos-fetch-logs $i || echo log does not exist for onos $i; done
+ for i in $OC{1..7}; do atomix-fetch-logs $i || echo log does not exist for atomix $i; done
+ fi
+ cd'''
+}
+
+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
+
+ if ( graphs.isPostingResult( isManualRun, isPostResult ) ){
+ publishConfluence siteName: 'wiki.onosproject.org', pageName: wikiLink, spaceName: 'ONOS',
+ attachArchivedArtifacts: true, buildIfUnstable: true,
+ editorList: [ confluenceWritePage( confluenceFile( file ) ) ]
+ }
+}
+
+def postLogs( testName, prefix ){
+ // posting logs of the onos jobs specifically SR tests
+ // testName : name of the test
+ // prefix : branch prefix ( master, 2.1, 1.15 ... )
+
+ resultURL = ""
+ if ( category == "SR" ){
+ def post = build job: "SR-log-" + prefix, propagate: false
+ resultURL = post.getAbsoluteUrl()
+ }
+ return resultURL
+}
+
+def analyzeResult( prop, workSpace, pureTestName, testName, resultURL, wikiLink, isSCPF ){
+ // analyzing the result of the test and send to slack if any abnormal result is logged.
+ // prop : property dictionary
+ // workSpace : workSpace where the result file is saved
+ // pureTestName : TestON name of the test
+ // testName : Jenkins name of the test. Example: 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( testStation ) {
+ def alarmFile = workSpace + "/" + pureTestName + "Alarm.txt"
+ if ( fileExists( alarmFile ) ) {
+ def alarmContents = readFile( alarmFile )
+ slackSend( channel: "#jenkins-related",
+ color: "FF0000",
+ message: "[" + prop[ "ONOSBranch" ] + "]" + testName + " : triggered alarms:\n" +
+ alarmContents + "\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' )
+ print "Abnormal test result."
+ throw new Exception( "Abnormal test result." )
+ }
+ else {
+ print "Test results are OK."
+ }
+ }
+}
+
+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 in Jenkins
+ // 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 : Map for the test suit ( SCPF, SR, FUNC, ... ) which contains information about the tests
+ // 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( testStation ) {
+ withEnv( [ 'ONOSBranch=' + prop[ "ONOSBranch" ],
+ 'ONOSJAVAOPTS=' + prop[ "ONOSJAVAOPTS" ],
+ 'TestONBranch=' + prop[ "TestONBranch" ],
+ 'ONOSTag=' + prop[ "ONOSTag" ],
+ 'WikiPrefix=' + prop[ "WikiPrefix" ],
+ 'WORKSPACE=' + workSpace ] ) {
+ if ( !graphOnly ){
+ if ( isSCPF ){
+ // Remove the old database file
+ sh SCPFfuncs.cleanupDatabaseFile( testName )
+ }
+ sh script: initTest(), label: "Test Initialization: stc shutdown; stc teardown; ./cleanup.sh"
+ catchError{
+ sh script: runTestCli_py( testName, pureTestName, testCategory ), label: ( "Run Test: ./cli.py run " + testName )
+ }
+ catchError{
+ sh script: concludeRunTest(), label: "Conclude Running Test: ./cleanup.sh; git clean -df"
+ }
+ catchError{
+ // For the Wiki page
+ sh script: cleanAndCopyFiles( pureTestName ), label: "Clean and Copy Files"
+ }
+ }
+ graphs.databaseAndGraph( prop, testName, pureTestName, graphOnly,
+ graph_generator_file, graph_saved_directory )
+ if ( !graphOnly ){
+ sh script: fetchLogs( pureTestName ), label: "Fetch Logs"
+ if ( !isSCPF ){
+ publishToConfluence( prop[ "manualRun" ], prop[ "postResult" ],
+ prop[ "WikiPrefix" ] + "-" + testCategory[ testName ][ 'wikiName' ],
+ workSpace + "/" + testCategory[ testName ][ 'wikiFile' ] )
+ }
+ }
+ }
+ }
+ graphs.postResult( prop, graphOnly, nodeLabel )
+ if ( !graphOnly ){
+ def resultURL = postLogs( testName, prop[ "WikiPrefix" ] )
+ analyzeResult( prop, workSpace, pureTestName, testName, resultURL,
+ isSCPF ? "" : testCategory[ testName ][ 'wikiName' ],
+ isSCPF )
+ }
+ } else {
+ echo testName + " is not being run today. Leaving the rest of stage contents blank."
+ }
+ }
+ }
+ }
+}
+
+def generateGraphs(){
+ if ( category != "SCPF" ){
+ // generate the overall graph of the non SCPF tests.
+ graphs.generateOverallGraph( prop, testsToRun, graphPaths[ "saveDirectory" ], nodeLabel, category )
+ }
+}
+
+def sendToSlack(){
+ // 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 ( prop[ "manualRun" ] == "false" ){
+ end = getCurrentTime()
+ TimeDuration duration = TimeCategory.minus( end, start )
+ // FIXME: for now we disable notifications of normal test results
+ /*
+ slackSend( color: "#5816EE",
+ message: category + "-" + prop[ "WikiPrefix" ] + " tests ended at: " + end.toString() +
+ "\nTime took : " + duration )
+ */
+ }
+ }
+ catch ( all ){
+ }
+}
diff --git a/TestON/JenkinsFile/FUNCJenkinsFile b/TestON/JenkinsFile/FUNCJenkinsFile
deleted file mode 100644
index 6989fd5..0000000
--- a/TestON/JenkinsFile/FUNCJenkinsFile
+++ /dev/null
@@ -1,75 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for FUNC-pipeline-<branch>
-
-// read the dependency files
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-fileRelated.init()
-test_list.init()
-
-// initialize the funcs with category of FUNC
-funcs.initialize( "FUNC" );
-
-// This is a Jenkinsfile for a scripted pipeline for the FUNC tests
-def prop = null
-
-// Read the TestONOS.property from the VM
-prop = funcs.getProperties()
-
-// get the list of the test and init branch to it.
-FUNC_tests = test_list.getTestsFromCategory( "FUNC" )
-
-// init some directories
-graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-VM/"
-
-// get the list of the test to run
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// run the test sequentially and save the function into the dictionary.
-def tests = [ : ]
-for ( String test : FUNC_tests.keySet() ){
- def toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- def pureTestName = ( FUNC_tests[ test ].containsKey( "test" ) ? FUNC_tests[ test ][ "test" ].split().head() : test )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false,
- FUNC_tests, graph_generator_file, graph_saved_directory )
-}
-
-// get the start time of the test.
-start = funcs.getCurrentTime()
-
-// run the tests sequentially.
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
-
-// generate the overall graph of the FUNC tests.
-funcs.generateOverallGraph( prop, FUNC_tests, graph_saved_directory )
-
-// send the notification to Slack that running FUNC tests was ended.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/FabricJenkinsfileTrigger b/TestON/JenkinsFile/FabricJenkinsfileTrigger
deleted file mode 100644
index 4c9c822..0000000
--- a/TestON/JenkinsFile/FabricJenkinsfileTrigger
+++ /dev/null
@@ -1,229 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for the fabric-pipeline-trigger
-
-// init dependencies functions
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-triggerFuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/TriggerFuncs.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-fileRelated.init()
-test_list.init()
-
-// Function that will initialize the configuration of the Fabric.
-funcs.initializeTrend( "Fabric" )
-funcs.initialize( "Fabric" )
-triggerFuncs.init( funcs )
-
-// Wiki contents is the contents for https://wiki.onosproject.org/display/ONOS/Automated+Test+Schedule
-// It will only be used by the VM_BMJenkinsTrigger not in here.
-wikiContents = ""
-
-all_testcases = [:]
-
-// set some variables from the parameter
-manually_run = params.manual_run
-onos_tag = params.ONOSTag
-isOldFlow = true
-
-// Set tests based on day of week
-def now = funcs.getCurrentTime()
-print now.toString()
-today = now[ Calendar.DAY_OF_WEEK ]
-
-dayMap = [ ( Calendar.MONDAY ) : "mon",
- ( Calendar.TUESDAY ) : "tue",
- ( Calendar.WEDNESDAY ) : "wed",
- ( Calendar.THURSDAY ) : "thu",
- ( Calendar.FRIDAY ) : "fri",
- ( Calendar.SATURDAY ) : "sat",
- ( Calendar.SUNDAY ) : "sun" ]
-fullDayMap = [ ( Calendar.MONDAY ) : "Monday",
- ( Calendar.TUESDAY ) : "Tuesday",
- ( Calendar.WEDNESDAY ) : "Wednesday",
- ( Calendar.THURSDAY ) : "Thursday",
- ( Calendar.FRIDAY ) : "Friday",
- ( Calendar.SATURDAY ) : "Saturday",
- ( Calendar.SUNDAY ) : "Sunday" ]
-
-
-// if it is manually run, it will set the onos version to be what it was passed by.
-// Currently, SR-pipeline-manually is not supported due to the special way of it is executed.
-if ( manually_run ){
- onos_branches = params.branches.tokenize( "\n;, " )
-} else {
- onos_branches = test_list.getBranchesFromDay( today )
-}
-
-testcases_template = [
- "FUNC": [ tests: "", nodeName: "VM", wikiContent: "" ],
- "HA": [ tests: "", nodeName: "VM", wikiContent: "" ],
- "SCPF": [ tests: "", nodeName: "BM", wikiContent: "" ],
- "SR": [ tests: "", nodeName: "Fabric", wikiContent: "" ],
- "SRHA": [ tests: "", nodeName: "Fabric", wikiContent: "" ],
- "USECASE": [ tests: "", nodeName: "BM", wikiContent: "" ]
-]
-
-for ( String b in onos_branches ){
- all_testcases.put( b, testcases_template )
-}
-
-day = ""
-
-// initialize the graph generating files.
-stat_graph_generator_file = fileRelated.histogramMultiple
-pie_graph_generator_file = fileRelated.pieMultiple
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-Fabric/"
-
-// get the post_result. This will be affected only for the manual runs.
-post_result = params.PostResult
-
-if ( manually_run ){
- for ( String b in onos_branches ){
- all_testcases[ b ] = triggerFuncs.organize_tests( params.Tests, all_testcases[ b ] )
- }
- isOldFlow = params.isOldFlow
- println "Tests to be run manually : "
-} else {
- for ( String b in onos_branches ){
- // set the list of the tests to run.
- all_testcases[ b ][ "SR" ][ "tests" ] += adder( "SR", dayMap[ today ], true, b )
- all_testcases[ b ][ "SRHA" ][ "tests" ] += adder( "SRHA", dayMap[ today ], true, b )
- }
- println "Defaulting to " + day + " tests:"
-}
-
-// print out the list of the test to run on Jenkins
-for ( String b in onos_branches ){
- triggerFuncs.print_tests( all_testcases[ b ] )
-}
-
-// This will hold the block of code to be run.
-def runTest = [
-
-]
-for ( String b in onos_branches ){
- if ( manually_run ){
- // for manual run situation.
- for ( String test in all_testcases[ b ].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 ( all_testcases[ b ][ test ][ "tests" ] != "" ){
- runTest[ all_testcases[ b ][ test ][ "nodeName" ][ nodeOn( b ) ] ][ test ] = triggerFuncs.
- trigger_pipeline( b,
- all_testcases[ b ][ test ][ "tests" ],
- all_testcases[ b ][ test ][ "nodeName" ][ nodeOn( b ) ],
- test,
- manually_run,
- onos_tag )
- }
- }
- }
- 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( "master",
- all_testcases[ b ][ "SR" ][ "tests" ],
- all_testcases[ b ][ "SR" ][ "nodeName" ][ 2 ],
- "SR",
- manually_run, onos_tag )
- runTest[ "Fabric2" ][ "SR" ] = triggerFuncs.trigger_pipeline( test_list.convertBranchCodeToBranch( "onos-2.x" ),
- all_testcases[ b ][ "SR" ][ "tests" ],
- all_testcases[ b ][ "SR" ][ "nodeName" ][ 0 ],
- "SR",
- manually_run, onos_tag )
- runTest[ "Fabric3" ][ "SR" ] = triggerFuncs.trigger_pipeline( test_list.convertBranchCodeToBranch( "onos-1.x" ),
- all_testcases[ b ][ "SR" ][ "tests" ],
- all_testcases[ b ][ "SR" ][ "nodeName" ][ 1 ],
- "SR",
- manually_run, onos_tag )
- runTest[ "Fabric" ][ "SRHA" ] = triggerFuncs.trigger_pipeline( "master",
- all_testcases[ b ][ "SRHA" ][ "tests" ],
- all_testcases[ b ][ "SRHA" ][ "nodeName" ],
- "SRHA",
- manually_run, onos_tag )
- }
-}
-
-def finalList = [ : ]
-
-// It will run each category of test to run sequentially on each branch.
-finalList[ "Fabric" ] = triggerFuncs.runTestSeq( runTest[ "Fabric" ] )
-finalList[ "Fabric2" ] = triggerFuncs.runTestSeq( runTest[ "Fabric2" ] )
-finalList[ "Fabric3" ] = triggerFuncs.runTestSeq( runTest[ "Fabric3" ] )
-finalList[ "Fabric4" ] = triggerFuncs.runTestSeq( runTest[ "Fabric4" ] )
-
-// It will then run Fabric2, Fabric3 and Fabric4 concurrently.
-// In our case,
-// ----> Fabric4 : current_version
-// This pipeline -----> ----> Fabric2 : previous_version
-// ----> Fabric3 : before_previous_version
-parallel finalList
-
-// Way we are generating pie graphs. not supported in SegmentRouting yet.
-/*
-if ( !manually_run ){
- funcs.generateStatGraph( "TestStation-Fabric4s",
- funcs.branchWithPrefix( current_version ),
- AllTheTests,
- stat_graph_generator_file,
- pie_graph_generator_file,
- graph_saved_directory )
- funcs.generateStatGraph( "TestStation-Fabric2s",
- funcs.branchWithPrefix( previous_version ),
- AllTheTests,
- stat_graph_generator_file,
- pie_graph_generator_file,
- graph_saved_directory )
- funcs.generateStatGraph( "TestStation-Fabric3s",
- funcs.branchWithPrefix( before_previous_version ),
- AllTheTests,
- stat_graph_generator_file,
- pie_graph_generator_file,
- graph_saved_directory )
-}*/
-
-// Way to add list of the tests with specific category to the result
-def adder( category, day, getResult, branch ){
- // category : the category of the test which will be either FUNC,HA,SR...
- // 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.
- def result = ""
- selectedTests = test_list.getTestsFromCategory( category, test_list.getTestsFromDay( day, branch ) )
-
- for ( String test in selectedTests.keySet() ){
- if ( getResult ){
- result += test + ","
- }
- }
- return result
-}
-
-// check which node is on.
-def nodeOn( branch ){
- switch ( branch ){
- case "master": return 2
- case convertBranchCodeToBranch( "onos-2.x" ): return 0
- case convertBranchCodeToBranch( "onos-1.x" ): return 1
- default: return 3
- }
-}
diff --git a/TestON/JenkinsFile/HAJenkinsFile b/TestON/JenkinsFile/HAJenkinsFile
deleted file mode 100644
index 9eee0f9..0000000
--- a/TestON/JenkinsFile/HAJenkinsFile
+++ /dev/null
@@ -1,74 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for HA-pipeline-<branch>
-
-// read the dependency files
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_lists = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-fileRelated.init()
-test_list.init()
-
-// initialize the funcs with category of HA
-funcs.initialize( "HA" );
-
-// This is a Jenkinsfile for a scripted pipeline for the FUNC tests
-def prop = null
-
-// Read the TestONOS.property from the VM
-prop = funcs.getProperties()
-
-// get the list of the test and init branch to it.
-HA_tests = test_list.getTestsFromCategory( "HA" )
-
-// init some directories
-graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-VM/"
-
-// get the list of the test to run
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// run the test sequentially and save the function into the dictionary.
-def tests = [ : ]
-for ( String test : HA_tests.keySet() ){
- toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- def pureTestName = ( HA_tests[ test ].containsKey( "test" ) ? HA_tests[ test ][ "test" ].split().head() : test )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false,
- HA_tests, graph_generator_file, graph_saved_directory )
-}
-
-// get the start time of the test.
-start = funcs.getCurrentTime()
-// run the tests sequentially.
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
-
-// generate the overall graph of the HA tests.
-funcs.generateOverallGraph( prop, HA_tests, graph_saved_directory )
-
-// send the notification to Slack that running HA tests was ended.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/JenkinsfileTrigger b/TestON/JenkinsFile/JenkinsfileTrigger
deleted file mode 100644
index 28d6940..0000000
--- a/TestON/JenkinsFile/JenkinsfileTrigger
+++ /dev/null
@@ -1,62 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for all-pipeline-trigger
-
-// read the dependency functions
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-
-// get current time and send the notification of starting the test.
-def now = funcs.getCurrentTime()
-print now.toString()
-
-// read the passed parameters from the Jenkins.
-machines = params.machines
-manually_run = params.manual_run
-// FIXME: for now we disable any other slack notifications excpet alarms
-/*
-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 = [ : ]
-
-// save the triggering job function as a dictionary.
-for ( machine in machineList ){
- print( machine )
- machineOn[ machine ] = triggerJob( machine )
-}
-
-// run the triggering jobs concurrently.
-parallel machineOn
-
-// function that will trigger the specific jobs from current pipeline.
-def triggerJob( on ){
- return {
- jobToRun = on + "-pipeline-trigger"
- build job: jobToRun, propagate: false
- }
-}
diff --git a/TestON/JenkinsFile/MasterTrigger.groovy b/TestON/JenkinsFile/MasterTrigger.groovy
new file mode 100644
index 0000000..c94aecb
--- /dev/null
+++ b/TestON/JenkinsFile/MasterTrigger.groovy
@@ -0,0 +1,455 @@
+#!groovy
+// Copyright 2019 Open Networking Foundation (ONF)
+//
+// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+//
+// TestON is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// TestON is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+// This is the Jenkins script for master-trigger
+
+import groovy.time.TimeCategory
+import groovy.time.TimeDuration
+
+// set the functions of the dependencies.
+graphs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy' )
+fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
+test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
+
+INITIALIZATION_TIMEOUT_MINUTES = 10 // timeout init() function if it takes too long.
+
+onos_tag = null
+manually_run = null
+now = null
+today = null
+onos_branches = null
+day = null
+post_result = null
+branchesParam = null
+isFabric = null
+testsParam = null
+simulateDay = null
+pipelineTimeOut = null
+
+dayMap = [:]
+fullDayMap = [:]
+all_testcases = [:]
+runTest = [:]
+selectedTests = [:]
+graphPaths = [:]
+
+main()
+
+def main() {
+ timeout( time: INITIALIZATION_TIMEOUT_MINUTES, unit: "MINUTES" ){
+ init()
+ }
+ timeout( time: pipelineTimeOut, unit: "MINUTES" ){
+ runTests()
+ generateGraphs()
+ }
+}
+
+// **************
+// Initialization
+// **************
+
+// initialize file scope vars
+def init(){
+ // get the name of the job.
+ jobName = env.JOB_NAME
+
+ // set the versions of the onos
+ fileRelated.init()
+ test_list.init()
+ readParams()
+
+ // list of the tests to be run will be saved in each choices.
+ day = ""
+
+ initDates()
+ onos_branches = getONOSBranches()
+ selectedTests = getONOSTests()
+
+ initGraphPaths()
+
+ echo "selectedTests: " + selectedTests
+ echo "onos_branches: " + onos_branches
+}
+
+def readParams(){
+ // get post result from the params for manually run.
+ post_result = params.PostResult
+ manually_run = params.manual_run
+ onos_tag = params.ONOSTag
+ branchesParam = params.branches
+ isOldFlow = true // hardcoding to true since we are always using oldFlow.
+ testsParam = params.Tests
+ isFabric = params.isFabric
+ simulateDay = params.simulate_day
+ pipelineTimeOut = params.TimeOut.toInteger()
+}
+
+// Set tests based on day of week
+def initDates(){
+ echo "-> initDates()"
+ now = getCurrentTime()
+ dayMap = [ ( Calendar.MONDAY ) : "mon",
+ ( Calendar.TUESDAY ) : "tue",
+ ( Calendar.WEDNESDAY ) : "wed",
+ ( Calendar.THURSDAY ) : "thu",
+ ( Calendar.FRIDAY ) : "fri",
+ ( Calendar.SATURDAY ) : "sat",
+ ( Calendar.SUNDAY ) : "sun" ]
+ fullDayMap = [ ( Calendar.MONDAY ) : "Monday",
+ ( Calendar.TUESDAY ) : "Tuesday",
+ ( Calendar.WEDNESDAY ) : "Wednesday",
+ ( Calendar.THURSDAY ) : "Thursday",
+ ( Calendar.FRIDAY ) : "Friday",
+ ( Calendar.SATURDAY ) : "Saturday",
+ ( Calendar.SUNDAY ) : "Sunday" ]
+ if ( simulateDay == "" ){
+ today = now[ Calendar.DAY_OF_WEEK ]
+ day = dayMap[ today ]
+ print now.toString()
+ } else {
+ day = simulateDay
+ }
+}
+
+def getCurrentTime(){
+ // get time of the PST zone.
+
+ TimeZone.setDefault( TimeZone.getTimeZone( 'PST' ) )
+ return new Date()
+}
+
+// gets ONOS branches from params or string parameter
+def getONOSBranches(){
+ echo "-> getONOSBranches()"
+ if ( manually_run ){
+ return branchesParam.tokenize( "\n;, " )
+ } else {
+ return test_list.getBranchesFromDay( day )
+ }
+}
+
+def getONOSTests(){
+ echo "-> getONOSTests()"
+ if ( manually_run ){
+ return test_list.getTestsFromStringList( testsParam.tokenize( "\n;, " ) )
+ } else {
+
+ return test_list.getTestsFromDay( day )
+ }
+}
+
+// init paths for the files and directories.
+def initGraphPaths(){
+ graphPaths.put( "histogramMultiple", fileRelated.rScriptPaths[ "scripts" ][ "histogramMultiple" ] )
+ graphPaths.put( "pieMultiple", fileRelated.rScriptPaths[ "scripts" ][ "pieMultiple" ] )
+ graphPaths.put( "saveDirectory", fileRelated.workspaces[ "VM" ] )
+}
+
+// **********************
+// Determine Tests to Run
+// **********************
+
+def printTestsToRun( runList ){
+ if ( manually_run ){
+ println "Tests to be run manually:"
+ } else {
+ if ( isFabric ){
+ postToSlackSR()
+ }
+ if ( today == Calendar.MONDAY ){
+ postToSlackTestsToRun()
+ }
+ println "Defaulting to " + day + " tests:"
+ }
+ for ( list in runList ){
+ echo "" + list
+ }
+}
+
+def postToSlackSR(){
+ // If it is automated running, it will post the beginning message to the channel.
+ slackSend( channel: 'sr-failures', color: '#03CD9F',
+ message: ":sparkles:" * 16 + "\n" +
+ "Starting tests on : " + now.toString() +
+ "\n" + ":sparkles:" * 16 )
+}
+
+def postToSlackTestsToRun(){
+ slackSend( color: '#FFD988',
+ message: "Tests to be run this weekdays : \n" +
+ printDaysForTest() )
+}
+
+def printDaysForTest(){
+ // Print the days for what test has.
+ AllTheTests = test_list.getAllTests()
+
+ result = ""
+ for ( String test in AllTheTests.keySet() ){
+ result += test + ": ["
+ test_schedule = AllTheTests[ test ][ "schedules" ]
+ for ( String sch_dict in test_schedule ){
+ for ( String day in test_list.convertScheduleKeyToDays( sch_dict[ "branch" ] ) ){
+ result += day + " "
+ }
+ }
+ result += "]\n"
+ }
+ return result
+}
+
+// *********
+// Run Tests
+// *********
+
+def tagCheck( onos_tag, onos_branch ){
+ // check the tag for onos if it is not empty
+
+ result = "git checkout "
+ 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 ){
+ 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 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 clean -df # clean any local files
+ git checkout ''' + test_branch + ''' #create new local branch
+ git branch
+ git log -1 --decorate
+ echo -e "\n##### Set ONOS Branch #####"
+ echo "ONOS Branch is set on: ''' + onos_branch + '''"
+ echo -e "\n #### check karaf version ######"
+ env |grep karaf
+ cd ~/onos
+ 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 ''' + onos_branch + ''' # just incase 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/''' + onos_branch + ''' # force local index to match remote branch
+ git clean -df # clean any local files
+ rm -rf buck-out
+ rm -rf bazel-*
+ ''' + tagCheck( onos_tag, onos_branch ) + '''
+ git branch
+ git log -1 --decorate
+ echo -e "\n##### set jvm heap size to 8G #####"
+ echo ${ONOSJAVAOPTS}
+ inserted_line="export JAVA_OPTS=\"\${ONOSJAVAOPTS}\""
+ sed -i "s/bash/bash\\n$inserted_line/" ~/onos/tools/package/bin/onos-service
+ echo "##### Check onos-service setting..... #####"
+ cat ~/onos/tools/package/bin/onos-service
+ export JAVA_HOME=/usr/lib/jvm/java-8-oracle'''
+ } else {
+ result = '''echo "Since this is a manual run, we'll use the current ONOS and TestON branch:"
+ echo "ONOS branch:"
+ cd ~/OnosSystemTest/
+ git branch
+ echo "TestON branch:"
+ cd ~/TestON/
+ git branch'''
+ }
+ return result
+}
+
+def postSetup( onos_branch, test_branch, onos_tag, isManual ){
+ // setup that will build ONOS
+
+ result = ""
+ if ( !isManual ){
+ result = '''echo -e "Installing bazel"
+ cd ~
+ rm -rf ci-management
+ git clone https://gerrit.onosproject.org/ci-management
+ cd ci-management/jjb/onos/
+ export GERRIT_BRANCH="''' + onos_branch + '''"
+ chmod +x install-bazel.sh
+ ./install-bazel.sh
+ '''
+ } else {
+ result = '''echo -e "Since this is a manual run, we will not install Bazel."'''
+ }
+ return result
+}
+
+def generateKey(){
+ // generate cluster-key of the onos
+
+ try {
+ sh script: '''
+ #!/bin/bash -l
+ set +e
+ . ~/.bashrc
+ env
+ onos-push-bits-through-proxy
+ onos-gen-cluster-key -f
+ ''', label: "Generate Cluster Key", returnStdout: false
+ } catch ( all ){
+ }
+}
+
+// Initialize the environment Setup for the onos and OnosSystemTest
+def envSetup( onos_branch, test_branch, onos_tag, jobOn, manuallyRun, nodeLabel ){
+ // to setup the environment using the bash script
+ stage( "Environment Setup: " + onos_branch + "-" + nodeLabel + "-" + jobOn ) {
+ // after env: ''' + borrow_mn( jobOn ) + '''
+ sh script: '''#!/bin/bash -l
+ set +e
+ . ~/.bashrc
+ env
+ ''' + preSetup( onos_branch, test_branch, onos_tag, manuallyRun ), label: "Repo Setup", returnStdout: false
+ sh script: postSetup( onos_branch, test_branch, onos_tag, manuallyRun ), label: "Install Bazel", returnStdout: false
+ generateKey()
+ }
+}
+
+// export Environment properties.
+def exportEnvProperty( onos_branch, test_branch, jobOn, wiki, tests, postResult, manually_run, onosTag, isOldFlow, nodeLabel ){
+ // export environment properties to the machine.
+
+ filePath = "/var/jenkins/TestONOS-" + jobOn + "-" + onos_branch + ".property"
+
+ stage( "Property Export: " + onos_branch + "-" + nodeLabel + "-" + jobOn ) {
+ sh script: '''
+ echo "ONOSBranch=''' + onos_branch + '''" > ''' + filePath + '''
+ echo "TestONBranch=''' + test_branch + '''" >> ''' + filePath + '''
+ echo "ONOSTag=''' + onosTag + '''" >> ''' + filePath + '''
+ echo "WikiPrefix=''' + wiki + '''" >> ''' + filePath + '''
+ echo "ONOSJAVAOPTS=''' + env.ONOSJAVAOPTS + '''" >> ''' + filePath + '''
+ echo "Tests=''' + tests + '''" >> ''' + filePath + '''
+ echo "postResult=''' + postResult + '''" >> ''' + filePath + '''
+ echo "manualRun=''' + manually_run + '''" >> ''' + filePath + '''
+ echo "isOldFlow=''' + isOldFlow + '''" >> ''' + filePath + '''
+ ''', label: "Exporting Property File: " + filePath
+ }
+}
+
+def trigger( branch, tests, nodeLabel, jobOn, manuallyRun, onosTag ){
+ // triggering function that will setup the environment and determine which pipeline to trigger
+
+ println "Job name: " + jobOn + "-pipeline-" + ( manuallyRun ? "manually" : branch )
+ def wiki = branch
+ def onos_branch = test_list.addPrefixToBranch( branch )
+ def test_branch = test_list.addPrefixToBranch( branch )
+ assignedNode = null
+ node( label: nodeLabel ) {
+ envSetup( onos_branch, test_branch, onosTag, jobOn, manuallyRun, nodeLabel )
+ exportEnvProperty( onos_branch, test_branch, jobOn, wiki, tests, post_result, manuallyRun, onosTag, isOldFlow, nodeLabel )
+ assignedNode = env.NODE_NAME
+ }
+
+ jobToRun = jobOn + "-pipeline-" + ( manuallyRun ? "manually" : wiki )
+ build job: jobToRun, propagate: false, parameters: [ [ $class: 'StringParameterValue', name: 'Category', value: jobOn ],
+ [ $class: 'StringParameterValue', name: 'Branch', value: branch ],
+ [ $class: 'StringParameterValue', name: 'TestStation', value: assignedNode ],
+ [ $class: 'StringParameterValue', name: 'NodeLabel', value: nodeLabel ],
+ [ $class: 'StringParameterValue', name: 'TimeOut', value: pipelineTimeOut.toString() ] ]
+}
+
+def trigger_pipeline( branch, tests, nodeLabel, jobOn, manuallyRun, onosTag ){
+ // nodeLabel : nodeLabel from tests.json
+ // 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 {
+ trigger( branch, tests, nodeLabel, jobOn, manuallyRun, onosTag )
+ }
+}
+
+def generateRunList(){
+ runList = [:]
+ validSchedules = test_list.getValidSchedules( day )
+ echo "validSchedules: " + validSchedules
+ for ( branch in onos_branches ){
+ runBranch = []
+ nodeLabels = test_list.getAllNodeLabels( branch, selectedTests )
+ for ( nodeLabel in nodeLabels ){
+ selectedNodeLabelTests = test_list.getTestsFromNodeLabel( nodeLabel, branch, selectedTests )
+ selectedNodeLabelCategories = test_list.getAllTestCategories( selectedNodeLabelTests )
+ for ( category in selectedNodeLabelCategories ){
+ selectedNodeLabelCategoryTests = test_list.getTestsFromCategory( category, selectedNodeLabelTests )
+
+ filteredList = [:]
+ for ( key in selectedNodeLabelCategoryTests.keySet() ){
+ for ( sch in selectedNodeLabelCategoryTests[ key ][ "schedules" ] ){
+ if ( validSchedules.contains( sch[ "day" ] ) && sch[ "branch" ] == test_list.convertBranchToBranchCode( branch ) || manually_run ){
+ filteredList.put( key, selectedNodeLabelCategoryTests[ key ] )
+ break
+ }
+ }
+ }
+
+ echo "=========================================="
+ echo "BRANCH: " + branch
+ echo "CATEGORY: " + category
+ echo "TESTS: " + filteredList
+ if ( filteredList != [:] ){
+ exeTestList = test_list.getTestListAsString( filteredList )
+ runList.put( branch + "-" + nodeLabel + "-" + category, trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
+ }
+
+ }
+ }
+ }
+ return runList
+}
+
+def runTests(){
+ runList = generateRunList()
+ printTestsToRun( runList )
+ parallel runList
+}
+
+// ***************
+// Generate Graphs
+// ***************
+
+def generateGraphs(){
+ // If it is automated running, it will generate the stats graph on VM.
+ if ( !manually_run ){
+ for ( String b in onos_branches ){
+ graphs.generateStatGraph( "TestStation-VMs",
+ test_list.addPrefixToBranch( b ),
+ graphPaths[ "histogramMultiple" ],
+ graphPaths[ "pieMultiple" ],
+ graphPaths[ "saveDirectory" ] )
+ }
+ }
+}
diff --git a/TestON/JenkinsFile/Overall_Graph_Generator b/TestON/JenkinsFile/Overall_Graph_Generator
index 6b30ed0..8e46c7c 100644
--- a/TestON/JenkinsFile/Overall_Graph_Generator
+++ b/TestON/JenkinsFile/Overall_Graph_Generator
@@ -21,25 +21,22 @@
// This is the Jenkins script for manual-graph-generator-overall
// read the dependency functions.
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
+graphs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy' )
fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
fileRelated.init()
// set the file and directory paths.
-stat_graph_generator_file = fileRelated.histogramMultiple
-pie_graph_generator_file = fileRelated.pieMultiple
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-VM/"
-
-// init trend which will generate the pie and histogram graphs to be VM.
-funcs.initializeTrend( "VM" )
+stat_graph_generator_file = fileRelated.rScriptPaths[ "scripts" ][ "histogramMultiple" ]
+pie_graph_generator_file = fileRelated.rScriptPaths[ "scripts" ][ "pieMultiple" ]
+graph_saved_directory = fileRelated.workspaces[ "VM" ]
onos_branch = params.ONOSbranch
// generate the graph and post the result on TestStation-VMs. Right now, all the pie and histograms are saved
// on VM.
-funcs.generateStatGraph( "TestStation-VMs",
+graphs.generateStatGraph( "TestStation-VMs",
onos_branch,
stat_graph_generator_file,
pie_graph_generator_file,
- graph_saved_directory )
+ graph_saved_directory, "VM" )
diff --git a/TestON/JenkinsFile/SCPFJenkinsFile b/TestON/JenkinsFile/SCPFJenkinsFile
deleted file mode 100644
index cf31c9d..0000000
--- a/TestON/JenkinsFile/SCPFJenkinsFile
+++ /dev/null
@@ -1,63 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for SCPF-pipeline-<branch>
-
-// read the dependency files
-SCPFfuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy' )
-SCPFfuncs.init()
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-
-// init funcs with SCPF specification
-funcs.initialize( "SCPF", SCPFfuncs )
-
-// read the information from TestON.property on BM
-def prop = null
-prop = funcs.getProperties()
-
-// get the list of the test to run.
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// check if it is using old flow.
-isOldFlow = prop[ "isOldFlow" ] == "true"
-SCPFfuncs.oldFlowRuleCheck( isOldFlow, prop[ "ONOSBranch" ] )
-
-// set test to run as a list of function
-def tests = [ : ]
-for ( String test : SCPFfuncs.SCPF.keySet() ){
- toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
-
- def pureTestName = test.replaceAll( "WithFlowObj", "" )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false, SCPFfuncs.SCPF, "", "" )
-}
-
-// get start time
-start = funcs.getCurrentTime()
-// run the tests sequentially
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
-
-// send result to slack after running test is done.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/SCPF_Graph_Generator b/TestON/JenkinsFile/SCPF_Graph_Generator
deleted file mode 100644
index da57cd0..0000000
--- a/TestON/JenkinsFile/SCPF_Graph_Generator
+++ /dev/null
@@ -1,53 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for manual-graph-generator-SCPF
-
-// 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' )
-funcs.initialize( "SCPF", SCPFfuncs );
-
-def prop = null
-prop = funcs.getProperties()
-
-// get the variables from the Jenkins parameters.
-def Tests = params.Test
-isOldFlow = params.isOldFlow
-prop[ "ONOSBranch" ] = params.ONOSbranch
-
-SCPFfuncs.oldFlowRuleCheck( isOldFlow, prop[ "ONOSBranch" ] )
-
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( Tests )
-
-// pureTestName is because we don't want 'WFobj' to be used for test name.
-def tests = [ : ]
-for ( String test : testsToRun ){
- println test
- pureTestName = test.replaceAll( "WithFlowObj", "" )
- tests[ test ] = funcs.runTest( test, true, prop, pureTestName, true, [ ], "", "" )
-}
-
-// generate the graphs sequentially.
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
diff --git a/TestON/JenkinsFile/SRHAJenkinsFile b/TestON/JenkinsFile/SRHAJenkinsFile
deleted file mode 100644
index 3ca8810..0000000
--- a/TestON/JenkinsFile/SRHAJenkinsFile
+++ /dev/null
@@ -1,74 +0,0 @@
-#!groovy
-// Copyright 2018 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for SRHA-pipeline-<branch>
-
-// read dependencies.
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-// init configuration to be SR
-fileRelated.init()
-test_list.init()
-funcs.initialize( "SR" )
-
-// Allow to run with --params-file argument
-hasArgs = true
-
-// get the name of the Jenkins job.
-jobName = env.JOB_NAME
-
-// read the TestON.property depends on which branch it is running.
-// ( currently master on Fabric4, 2.1 on Fabric3 and 1.15 on Fabric2 )
-def prop = null
-prop = funcs.getProperties()
-SRHA_tests = test_list.getTestsFromCategory( "SRHA" )
-
-// set the file paths and directory
-graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-Fabric" + "/"
-
-// get the list of the tests.
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// save the functions to run test in the dictionary.
-def tests = [ : ]
-for ( String test : SRHA_tests.keySet() ){
- toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- def pureTestName = ( SRHA_tests[ test ].containsKey( "test" ) ? SRHA_tests[ test ][ "test" ].split().head() : test )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false,
- SRHA_tests, graph_generator_file, graph_saved_directory )
-}
-
-// get start time
-start = funcs.getCurrentTime()
-
-// run the tests sequentially
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
-//funcs.generateOverallGraph( prop, SR, graph_saved_directory )
-// send the notification of ending test after SRHA tests are done.
-funcs.sendResultToSlack( start, prop[ "manualRun" ], prop[ "WikiPrefix" ] )
diff --git a/TestON/JenkinsFile/SRJenkinsFile b/TestON/JenkinsFile/SRJenkinsFile
deleted file mode 100644
index e4af109..0000000
--- a/TestON/JenkinsFile/SRJenkinsFile
+++ /dev/null
@@ -1,74 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for SR-pipeline-<branch>
-
-// read dependencies.
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-// init configuration to be SR
-fileRelated.init()
-test_list.init()
-funcs.initialize( "SR" )
-
-// get the name of the Jenkins job.
-jobName = env.JOB_NAME
-
-// 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.15 on Fabric2 and 2.1 on Fabric3 )
-def prop = null
-prop = funcs.getProperties()
-SR_tests = test_list.getTestsFromCategory( "SR" )
-
-// set the file paths and directory
-graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-Fabric" + funcs.fabricOn( prop[ "ONOSBranch" ] ) + "/"
-
-// get the list of the tests.
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// save the functions to run test in the dictionary.
-def tests = [ : ]
-for ( String test : SR_tests.keySet() ){
- toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- def pureTestName = ( SR_tests[ test ].containsKey( "test" ) ? SR_tests[ test ][ "test" ].split().head() : test )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false,
- SR_tests, graph_generator_file, graph_saved_directory )
-}
-
-// get start time
-start = funcs.getCurrentTime()
-
-// run the tests sequentially
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
-//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" ] )
diff --git a/TestON/JenkinsFile/Trend_Graph_Generator b/TestON/JenkinsFile/Trend_Graph_Generator
deleted file mode 100644
index 2779d9b..0000000
--- a/TestON/JenkinsFile/Trend_Graph_Generator
+++ /dev/null
@@ -1,63 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for manual-graph-generator-trend
-
-// read the dependency functions
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-fileRelated.init()
-
-// read the node cluster ( VM or BM or Fabrics ) from the Jenkins job.
-nodeCluster = params.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 )
-}
-def prop = null
-prop = funcs.getProperties()
-
-// get the list of the tests from the parameters.
-def Tests = params.Test
-prop[ "ONOSBranch" ] = params.ONOSbranch
-
-// 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" ] ) : "" ) + "/"
-
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( Tests )
-
-// set functions into the dictionary.
-def tests = [ : ]
-for ( String test : testsToRun ){
- println test
- def pureTestName = test.split().head()
- tests[ test ] = funcs.runTest( test, true, prop, pureTestName, true, [ ], graph_generator_file, graph_saved_directory )
-}
-
-for ( test in tests.keySet() ){
- tests[ test ].call()
-}
diff --git a/TestON/JenkinsFile/USECASEJenkinsFile b/TestON/JenkinsFile/USECASEJenkinsFile
deleted file mode 100644
index 62da8ff..0000000
--- a/TestON/JenkinsFile/USECASEJenkinsFile
+++ /dev/null
@@ -1,69 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for USECASE-pipeline-<branch>
-
-// set the dependencies.
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-
-// init configuration of funcs to be USECASE
-fileRelated.init()
-test_list.init()
-funcs.initialize( "USECASE" );
-
-// read the TestON.property files and save it as a dictionary
-def prop = null
-prop = funcs.getProperties()
-USECASE_tests = test_list.getTestsFromCategory( "USECASE" )
-
-// save directory and file.
-graph_generator_file = fileRelated.trendIndividual
-graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-BM/"
-
-// get tests to run.
-echo( "Testcases:" )
-def testsToRun = null
-testsToRun = funcs.getTestsToRun( prop[ "Tests" ] )
-funcs.printTestToRun( testsToRun )
-
-// save the function of the test running into the dictionary.
-def tests = [ : ]
-for ( String test : USECASE_tests.keySet() ){
- toBeRun = testsToRun.contains( test )
- def stepName = ( toBeRun ? "" : "Not " ) + "Running $test"
- def pureTestName = ( USECASE_tests[ test ].containsKey( "test" ) ? USECASE_tests[ test ][ "test" ].split().head() : test )
- tests[ stepName ] = funcs.runTest( test, toBeRun, prop, pureTestName, false,
- USECASE_tests, graph_generator_file, graph_saved_directory )
-}
-
-// get start time of the test.
-start = funcs.getCurrentTime()
-// 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" ] )
-
-// generate the overall graph for USECASE.
-funcs.generateOverallGraph( prop, USECASE_tests, graph_saved_directory )
diff --git a/TestON/JenkinsFile/VM_BMJenkinsfileTrigger b/TestON/JenkinsFile/VM_BMJenkinsfileTrigger
deleted file mode 100644
index bb550c3..0000000
--- a/TestON/JenkinsFile/VM_BMJenkinsfileTrigger
+++ /dev/null
@@ -1,225 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the Jenkins script for vm-pipeline-trigger or bm-pipeline-trigger
-
-// set the functions of the dependencies.
-funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
-triggerFuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/TriggerFuncs.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-
-onos_tag = null
-manually_run = null
-now = null
-today = null
-onos_branches = null
-day = null
-post_result = null
-branchesParam = null
-isFabric = null
-testsParam = null
-
-dayMap = [:]
-fullDayMap = [:]
-all_testcases = [:]
-runTest = [:]
-selectedTests = [:]
-graphPaths = [:]
-
-main()
-
-def main() {
- init()
- runTests()
- generateGraphs()
-}
-
-// **************
-// Initialization
-// **************
-
-// initialize file scope vars
-def init(){
- // get the name of the job.
- jobName = env.JOB_NAME
-
- // set the versions of the onos
- fileRelated.init()
- test_list.init()
- readParams()
-
- funcs.initializeTrend( "Fabric" )
- funcs.initialize( "Fabric" )
-
- funcs.initializeTrend( "VM" )
-
- triggerFuncs.init( funcs )
-
- // list of the tests to be run will be saved in each choices.
- day = ""
-
- initDates()
- onos_branches = getONOSBranches()
- selectedTests = getONOSTests()
-
- echo "selectedTests: " + selectedTests
-}
-
-def readParams(){
- // get post result from the params for manually run.
- post_result = params.PostResult
- manually_run = params.manual_run
- onos_tag = params.ONOSTag
- branchesParam = params.branches
- isOldFlow = params.isOldFlow
- testsParam = params.Tests
- isFabric = params.isFabric
-}
-
-// Set tests based on day of week
-def initDates(){
- echo "-> initDates()"
- now = funcs.getCurrentTime()
- today = now[ Calendar.DAY_OF_WEEK ]
- dayMap = [ ( Calendar.MONDAY ) : "mon",
- ( Calendar.TUESDAY ) : "tue",
- ( Calendar.WEDNESDAY ) : "wed",
- ( Calendar.THURSDAY ) : "thu",
- ( Calendar.FRIDAY ) : "fri",
- ( Calendar.SATURDAY ) : "sat",
- ( Calendar.SUNDAY ) : "sun" ]
- fullDayMap = [ ( Calendar.MONDAY ) : "Monday",
- ( Calendar.TUESDAY ) : "Tuesday",
- ( Calendar.WEDNESDAY ) : "Wednesday",
- ( Calendar.THURSDAY ) : "Thursday",
- ( Calendar.FRIDAY ) : "Friday",
- ( Calendar.SATURDAY ) : "Saturday",
- ( Calendar.SUNDAY ) : "Sunday" ]
- print now.toString()
-}
-
-// gets ONOS branches from params or string parameter
-def getONOSBranches(){
- echo "-> getONOSBranches()"
- if ( manually_run ){
- return branchesParam.tokenize( "\n;, " )
- } else {
- return test_list.getBranchesFromDay( dayMap[ today ] )
- }
-}
-
-def getONOSTests(){
- echo "-> getONOSTests()"
- if ( manually_run ){
- return test_list.getTestsFromStringList( testsParam.tokenize( "\n;, " ) )
- } else {
- day = dayMap[ today ]
- return test_list.getTestsFromDay( day )
- }
-}
-
-// init paths for the files and directories.
-def initGraphPaths(){
- graphPaths[ "histogramMultiple" ] = fileRelated.histogramMultiple
- graphPaths[ "pieMultiple" ] = fileRelated.pieMultiple
- graphPaths[ "saveDirectory" ] = fileRelated.jenkinsWorkspace + "postjob-VM/"
-}
-
-// **********************
-// Determine Tests to Run
-// **********************
-
-def printTestsToRun( runList ){
- if ( manually_run ){
- println "Tests to be run manually:"
- } else {
- if ( isFabric ){
- postToSlackSR()
- }
- if ( today == Calendar.MONDAY ){
- postToSlackTestsToRun()
- }
- println "Defaulting to " + day + " tests:"
- }
- for ( list in runList ){
- // triggerFuncs.print_tests( all_testcases[ b ] )
- echo "" + list
- }
-}
-
-def postToSlackSR(){
- // If it is automated running, it will post the beginning message to the channel.
- slackSend( channel: 'sr-failures', color: '#03CD9F',
- message: ":sparkles:" * 16 + "\n" +
- "Starting tests on : " + now.toString() +
- "\n" + ":sparkles:" * 16 )
-}
-
-def postToSlackTestsToRun(){
- slackSend( color: '#FFD988',
- message: "Tests to be run this weekdays : \n" +
- triggerFuncs.printDaysForTest() )
-}
-
-// *********
-// Run Tests
-// *********
-
-def generateRunList(){
- runList = [:]
- for ( branch in onos_branches ){
- runBranch = []
- nodeLabels = test_list.getAllNodeLabels( branch, selectedTests )
- for ( nodeLabel in nodeLabels ){
- selectedNodeLabelTests = test_list.getTestsFromNodeLabel( nodeLabel, branch, selectedTests )
- selectedNodeLabelCategories = test_list.getAllTestCategories( selectedNodeLabelTests )
- for ( category in selectedNodeLabelCategories ){
- selectedNodeLabelCategoryTests = test_list.getTestsFromCategory( category, selectedNodeLabelTests )
- exeTestList = test_list.getTestListAsString( selectedNodeLabelCategoryTests )
- runList.put( branch + "-" + nodeLabel, triggerFuncs.trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
- }
- }
- }
- return runList
-}
-
-def runTests(){
- runList = generateRunList()
- printTestsToRun( runList )
- parallel runList
-}
-
-// ***************
-// Generate Graphs
-// ***************
-
-def generateGraphs(){
- // If it is automated running, it will generate the stats graph on VM.
- if ( !manually_run ){
- for ( String b in onos_branches ){
- funcs.generateStatGraph( "TestStation-VMs",
- funcs.branchWithPrefix( b ),
- graphPaths[ "histogramMultiple" ],
- graphPaths[ "pieMultiple" ],
- graphPaths[ "saveDirectory" ] )
- }
- }
-}
diff --git a/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy b/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy
deleted file mode 100644
index 4c6f021..0000000
--- a/TestON/JenkinsFile/dependencies/GeneralFuncs.groovy
+++ /dev/null
@@ -1,43 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the dependency Jenkins script.
-// it has some general functionality of making database command, basic graph part, and get list of the test
-
-// 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 "
-}
-
-// 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
-}
-
-// get the list of the test as dictionary then return as a string
-def getTestList( tests ){
- def list = ""
- for ( String test : tests.keySet() ){
- list += test + ","
- }
- return list[ 0..-2 ]
-}
-
-return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy b/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy
deleted file mode 100644
index d64f12e..0000000
--- a/TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy
+++ /dev/null
@@ -1,599 +0,0 @@
-#!groovy
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the dependency Jenkins script.
-// it has some common functions that runs test and generate graph.
-
-import groovy.time.TimeCategory
-import groovy.time.TimeDuration
-
-generalFuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/GeneralFuncs.groovy' )
-fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-
-fileRelated.init()
-test_list.init()
-
-def initializeTrend( machine ){
- // 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
- hasArgs = 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
-
- init( type )
- SCPFfunc = SCPFfuncs
- isSCPF = true
- hasArgs = true // Has TestON cli arguments to be added when running the test
- machine = machineType[ type ]
-}
-
-def initialize( type ){
- // 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
- hasArgs = false
-}
-
-def init( type ){
- // 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
-}
-
-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, 2.1, 1.15... )
-
- 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, 2.1, 1.15...
- // branch.reverse().take(4).reverse() will get last 4 characters of the string.
- switch ( branch.reverse().take( 3 ).reverse() ){
- case "ter": return "4"
- case "2.1": return "3"
- case "2.0": return "3"
- case ".15": return "2"
- case ".14": return "3"
- case ".13": return "2"
- case ".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 )
- // FIXME: for now we disable notifications of normal test results
- /*
- 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
- export PYTHONUNBUFFERED=1
- ifconfig
- echo "ONOS Branch is: $ONOSBranch"
- echo "TestON Branch is: $TestONBranch"
- echo "Test date: "
- date
- cd ~
- export PATH=$PATH:onos/tools/test/bin
- timeout 240 stc shutdown | head -100
- timeout 240 stc teardown | head -100
- timeout 240 stc shutdown | head -100
- cd ~/OnosSystemTest/TestON/bin
- git log | head
- ./cleanup.sh -f
- ''' + "./cli.py run " +
- ( !hasArgs ? 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(){
- // bash script to copy the logs and other necessary element for SR tests.
-
- 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}/
- sudo cp *Groups* /var/jenkins/workspace/SR-log-${WikiPrefix}/
- sudo cp *.tar.gz /var/jenkins/workspace/SR-log-${WikiPrefix}/
- sudo cp t3-* /var/jenkins/workspace/SR-log-${WikiPrefix}/
- '''
- }
- 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
- set +e
- echo "ONOS Branch is: ${ONOSBranch}"
- echo "TestON Branch is: ${TestONBranch}"
- echo "Job name is: "''' + testName + '''
- echo "Workspace is: ${WORKSPACE}/"
- echo "Wiki page to post is: ${WikiPrefix}-"
- # remove any leftover files from previous tests
- sudo rm ${WORKSPACE}/*Wiki.txt
- sudo rm ${WORKSPACE}/*Summary.txt
- sudo rm ${WORKSPACE}/*Result.txt
- sudo rm ${WORKSPACE}/*Alarm.txt || true
- sudo rm ${WORKSPACE}/*.csv
- #copy files to workspace
- cd `ls -t ~/OnosSystemTest/TestON/logs/*/ | head -1 | sed 's/://'`
- ''' + copyLogs() + '''
- sudo cp *.txt ${WORKSPACE}/
- sudo cp *.csv ${WORKSPACE}/
- cd ${WORKSPACE}/
- for i in *.csv
- do mv "$i" "$WikiPrefix"-"$i"
- done
- 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
- set +e
- cd ~/OnosSystemTest/TestON/logs
- echo "TestON test name is: "''' + testName + '''
- TestONlogDir=$(ls -t | grep ${TEST_NAME}_ |head -1)
- echo "########################################################################################"
- echo "##### copying ONOS logs from all nodes to TestON/logs directory: ${TestONlogDir}"
- echo "########################################################################################"
- cd $TestONlogDir
- if [ $? -eq 1 ]
- then
- echo "Job name does not match any test suite name to move log!"
- else
- pwd
- for i in $OC{1..7}; do onos-fetch-logs $i || echo log does not exist for onos $i; done
- for i in $OC{1..7}; do atomix-fetch-logs $i || echo log does not exist for atomix $i; done
- 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
-
- 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
-
- 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, 2.1, 1.15 ... )
-
- 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
-
- // FIXME: For now we move all notifications to #jenkins-related
- // return "#" + ( testType == "SR" ? "sr-failures" : "jenkins-related" )
- return "#jenkins-related"
-}
-
-def analyzeResult( prop, workSpace, pureTestName, testName, resultURL, wikiLink, isSCPF ){
- // analyzing the result of the test and send to slack if any abnormal result is logged.
- // prop : property dictionary
- // workSpace : workSpace where the result file is saved
- // pureTestName : TestON name of the test
- // testName : Jenkins name of the test. Example: 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 alarmFile = workSpace + "/" + pureTestName + "Alarm.txt"
- if ( fileExists( alarmFile ) ) {
- print "Abnormal test result logged"
- def alarmContents = readFile( alarmFile )
- slackSend( channel: getSlackChannel(),
- color: "FF0000",
- message: "[" + prop[ "ONOSBranch" ] + "]" + testName + " : triggered alarms:\n" +
- alarmContents + "\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
- }
- else {
- print "Test results are normal"
- }
- }
-}
-
-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
-
- 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 in Jenkins
- // 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 : Map for the test suit ( SCPF, SR, FUNC, ... ) which contains information about the tests
- // 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" ],
- 'ONOSJAVAOPTS=' + prop[ "ONOSJAVAOPTS" ],
- 'TestONBranch=' + prop[ "TestONBranch" ],
- 'ONOSTag=' + prop[ "ONOSTag" ],
- 'WikiPrefix=' + prop[ "WikiPrefix" ],
- 'WORKSPACE=' + workSpace ] ) {
- if ( !graphOnly ){
- if ( isSCPF ){
- // Remove the old database file
- sh SCPFfunc.cleanupDatabaseFile( testName )
- }
- sh initAndRunTest( testName, testCategory )
- // For the Wiki page
- sh cleanAndCopyFiles( pureTestName )
- }
- databaseAndGraph( prop, testName, pureTestName, 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 ){
- def resultURL = postLogs( testName, prop[ "WikiPrefix" ] )
- analyzeResult( prop, workSpace, pureTestName, testName, resultURL,
- isSCPF ? "" : testCategory[ testName ][ 'wiki_link' ],
- isSCPF )
- }
- }
- }
- }
- }
-}
-
-def databaseAndGraph( prop, testName, pureTestName, 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 : Jenkins name for the test
- // pureTestName : TestON name for 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" ], pureTestName, 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-2.1, onos-1.15 )
- // 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 generateOverallGraph( prop, testCategory, graph_saved_directory ){
- // generate the overall graph for the test
-
- 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
- }
- }
- postResult( prop, false )
- }
-}
-
-def getOverallPieGraph( file, host, port, user, pass, branch, type, testList, yOrN, path ){
- // Rcommand for the pie graph
-
- 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.
-
- 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
-
- 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 '''
- sed 1d ''' + workSpace + "/" + wikiPrefix + "-" + testName + '''.csv | while read line
- do
- echo \$line
- echo ''' + database_command + '''
- done '''
-}
-
-def generateStatGraph( testMachineOn, onos_branch, stat_graph_generator_file, pie_graph_generator_file,
- graph_saved_directory ){
-
- // Will generate the stats graph.
- FUNCtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "FUNC" ) )
- HAtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "HA" ) )
- USECASEtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "USECASE" ) )
-
- testListParam = "FUNC-" + FUNCtestsStr + ";" +
- "HA-" + HAtestsStr + ";" +
- "USECASE-" + USECASEtestsStr
-
- pieTestListParam = FUNCtestsStr + "," +
- HAtestsStr + "," +
- USECASEtestsStr
-
- generateCategoryStatsGraph( testMachineOn, "false", "true", stat_graph_generator_file, pie_graph_generator_file,
- "ALL", onos_branch, testListParam, graph_saved_directory, pieTestListParam )
-}
-
-def branchWithPrefix( branch ){
- // get the branch with the prefix ( "onos-" )
- return ( ( branch != "master" ) ? "onos-" : "" ) + branch
-}
-
-def testBranchWithPrefix( branch ){
- // get TestON branch with the prefix ( "onos-" )
- if ( branch == "1.12" )
- return "onos-1.13"
- else if ( branch == "1.13" )
- return "onos-1.13"
- else if ( branch == "1.14" )
- return "onos-1.15"
- else if ( branch == "1.15" )
- return "onos-1.15"
- else if ( branch == "2.0" )
- return "onos-2.0"
- else if ( branch == "2.1" )
- return "onos-2.1"
- else
- return "master"
-}
-
-return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy b/TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy
new file mode 100644
index 0000000..b39c2b4
--- /dev/null
+++ b/TestON/JenkinsFile/dependencies/JenkinsGraphs.groovy
@@ -0,0 +1,230 @@
+#!groovy
+// Copyright 2017 Open Networking Foundation (ONF)
+//
+// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+//
+// TestON is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// TestON is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+// This is the dependency Jenkins script.
+// it has some common functions that runs test and generate graph.
+
+fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
+test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
+
+fileRelated.init()
+test_list.init()
+
+testStation = null
+isSCPF = null
+
+def initialize( SCPFf=null ){
+ isSCPF = ( SCPFf != null )
+ SCPFfunc = SCPFf
+ trend_generator_file = fileRelated.rScriptPaths[ "scripts" ][ "trendMultiple" ]
+ build_stats_generator_file = fileRelated.rScriptPaths[ "scripts" ][ "histogramMultiple" ]
+}
+
+def getPostjobType( nodeL ){
+ switch ( nodeL ){
+ case "Fabric-1.x":
+ return "Fabric2"
+ break
+ case "Fabric-2.x":
+ return "Fabric3"
+ break
+ case "Fabric-master":
+ return "Fabric4"
+ break
+ default:
+ return nodeL
+ break
+ }
+}
+
+def postResult( prop, graphOnly, nodeLabel ){
+ // 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" ] ) ){
+ postjob_type = getPostjobType( nodeLabel )
+ def post = build job: "postjob-" + postjob_type, propagate: false
+ }
+}
+
+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
+
+ return manual == "false" || postresult == "true"
+}
+
+def database_command_create( pass, host, port, user ){
+ return pass + "|psql --host=" + host + " --port=" + port + " --username=" + user + " --password --dbname onostest -c "
+}
+
+def databaseAndGraph( prop, testName, pureTestName, 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 : Jenkins name for the test
+ // pureTestName : TestON name for 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 = database_command_create( pass, host, port, user ) +
+ ( !isSCPF ? sqlCommand( testName ) : SCPFfunc.sqlCommand( testName ) )
+ sh script: '''#!/bin/bash
+ export DATE=\$(date +%F_%T)
+ cd ~
+ pwd ''' + ( graphOnly ? "" :
+ ( !isSCPF ? databasePart( prop[ "WikiPrefix" ], pureTestName, database_command ) :
+ SCPFfunc.databasePart( testName, database_command ) ) ), label: "Database"
+ sh script: ( !isSCPF ? graphGenerating( host, port, user, pass, testName, prop, graph_saved_directory,
+ graph_generator_file ) :
+ SCPFfunc.getGraphGeneratingCommand( host, port, user, pass, testName, prop ) ), label: "Generate Test Graph"
+ }
+ }
+}
+
+// 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
+}
+
+def generateCategoryStatsGraph( testMachineOn, manualRun, postresult, stat_file, pie_file, type, branch, testListPart,
+ save_path, pieTestListPart, nodeLabel ){
+ // 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-2.1, onos-1.15 )
+ // 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 script: ( '''#!/bin/bash
+ ''' + 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 ) ), label: "Generate Stats Graphs"
+ }
+ }
+ postResult( [ ], true, nodeLabel )
+ }
+}
+
+
+def generateOverallGraph( prop, tests, graph_saved_directory, nodeLabel, testType ){
+ // generate the overall graph for the test
+
+ if ( isPostingResult( prop[ "manualRun" ], prop[ "postResult" ] ) ){
+ node( testStation ) {
+
+ 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 = test_list.getTestListAsString( tests )
+ sh script: ( '''#!/bin/bash
+ ''' +
+ basicGraphPart( trend_generator_file, host, port,
+ user, pass, testType,
+ prop[ "ONOSBranch" ] ) + " " + testList + " 20 " + graph_saved_directory ), label: "Generate Overall Graph"
+ }
+ }
+ postResult( prop, false, nodeLabel )
+ }
+}
+
+def getOverallPieGraph( file, host, port, user, pass, branch, type, testList, yOrN, path ){
+ // Rcommand for the pie graph
+
+ return basicGraphPart( file, host, port, user, pass, type, branch ) +
+ " \"" + testList + "\" latest " + yOrN + " " + path
+}
+
+def sqlCommand( testName ){
+ // get the inserting sqlCommand for non-SCPF tests.
+ table_name = "executed_test_tests"
+ result_name = "executed_test_results"
+
+ 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
+
+ return 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 '''
+ sed 1d ''' + workSpace + "/" + wikiPrefix + "-" + testName + '''.csv | while read line
+ do
+ echo \$line
+ echo ''' + database_command + '''
+ done '''
+}
+
+def generateStatGraph( testMachineOn, onos_branch, stat_graph_generator_file, pie_graph_generator_file,
+ graph_saved_directory, nodeLabel ){
+
+ table_name = "executed_test_tests"
+ result_name = "executed_test_results"
+
+ // Will generate the stats graph.
+ FUNCtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "FUNC" ) )
+ HAtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "HA" ) )
+ USECASEtestsStr = test_list.getTestListAsString( test_list.getTestsFromCategory( "USECASE" ) )
+
+ testListParam = "FUNC-" + FUNCtestsStr + ";" +
+ "HA-" + HAtestsStr + ";" +
+ "USECASE-" + USECASEtestsStr
+
+ pieTestListParam = FUNCtestsStr + "," +
+ HAtestsStr + "," +
+ USECASEtestsStr
+
+ generateCategoryStatsGraph( testMachineOn, "false", "true", stat_graph_generator_file, pie_graph_generator_file,
+ "ALL", onos_branch, testListParam, graph_saved_directory, pieTestListParam, nodeLabel )
+}
+
+return this
diff --git a/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy b/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
index 6eb1061..73a8751 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy
@@ -22,30 +22,20 @@
// This is the dependency Jenkins script.
// This will initialize the paths of the jenkins file and paths.
-// init the paths for the directory
-def initLocation(){
- jenkinsFolder = "~/OnosSystemTest/TestON/JenkinsFile/"
- rScriptLocation = jenkinsFolder + "wikiGraphRScripts/"
- jenkinsWorkspace = "/var/jenkins/workspace/"
- SCPFSpecificLocation = rScriptLocation + "SCPFspecificGraphRScripts/"
- CHOScriptDir = "~/CHO_Jenkins_Scripts/"
-}
+import groovy.json.*
-// init the paths for the files.
-def initFiles(){
- trendIndividual = rScriptLocation + "trendIndividualTest.R"
- trendMultiple = rScriptLocation + "trendMultipleTests.R"
- trendSCPF = rScriptLocation + "trendSCPF.R"
- trendCHO = rScriptLocation + "trendCHO.R"
- histogramMultiple = rScriptLocation + "histogramMultipleTestGroups.R"
- pieMultiple = rScriptLocation + "pieMultipleTests.R"
-}
+jenkinsFiles = ""
+rScriptPaths = [:] // paths of r script files that generate wiki graphs
+workspaces = [:] // postjob workspaces
// init both directory and file paths.
def init(){
- initLocation()
- initFiles()
+ def paths_buffer = readTrusted( "TestON/JenkinsFile/dependencies/paths.json" )
+ paths_json = readJSON text: paths_buffer
+
+ jenkinsFiles = paths_json[ "jenkinsFiles" ]
+ workspaces = paths_json[ "workspaces" ]
+ rScriptPaths = paths_json[ "rScript" ]
}
return this
-
diff --git a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
index 5badbcc..d62e114 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
@@ -23,6 +23,7 @@
schedules = [:]
branches = [:]
+// read all json files and save as maps
def init(){
def tests_buffer = readTrusted( "TestON/JenkinsFile/dependencies/tests.json" )
def schedules_buffer = readTrusted( "TestON/JenkinsFile/dependencies/schedule.json" )
@@ -60,6 +61,7 @@
return str_result[ 0..-2 ]
}
+// given a list of tests as a string, returns the list of tests as a map, similar formatted to tests.json
def getTestsFromStringList( list ){
testsResult = [:]
for ( item in list ){
@@ -85,14 +87,15 @@
return schedulePropertyResult
}
-def getAllBranches(){
- return branches
-}
-
// ********
// Branches
// ********
+// returns all branches from branches.json
+def getAllBranches(){
+ return branches
+}
+
// given a day, returns all branches that are run on that day
def getBranchesFromDay( day, tests=[:] ){
branchesFromDayResult = []
@@ -104,8 +107,9 @@
for ( String key in tests.keySet() ){
for ( subDict in tests[ key ][ "schedules" ] ){
sch = subDict[ "day" ]
- if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( sch ) ){
- branchesFromDayResult += convertBranchCodeToBranch( subDict[ "branch" ] )
+ new_branch = convertBranchCodeToBranch( subDict[ "branch" ], false )
+ if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( new_branch ) ){
+ branchesFromDayResult += new_branch
}
}
}
@@ -125,14 +129,32 @@
return branch_code
}
+// given a branch, returns the corresponding branch code (hack)
+// Example: given "onos-1.15", returns "onos-1.x"
def convertBranchToBranchCode( branch ){
- if ( branch == "master" || branch.substring( 0, 1 ) == "o" ){
+ if ( branch == "master" ){
return branch
+ } else if ( branch.substring( 0, 1 ) == "o" ) {
+ return branch.substring( 0, 6 ) + ".x"
} else {
return "onos-" + branch.substring( 0, 1 ) + ".x"
}
}
+// given a branch without a prefix, returns the branch with the "onos-" prefix
+def addPrefixToBranch( branchNoPrefix ){
+ if ( branchNoPrefix == "master" ){
+ return "master"
+ } else {
+ return "onos-" + branchNoPrefix
+ }
+}
+
+// given a branch with the prefix "onos-", returns the branch without the prefix
+def removePrefixFromBranch( branchWithPrefix ){
+ return branchWithPrefix.minus( "onos-" )
+}
+
// *************
// Test Category
// *************
@@ -151,6 +173,7 @@
return testsFromCategoryResult
}
+// given the test name, returns the category (FUNC, HA, etc.) of that test
def getCategoryOfTest( test_name, tests=[:] ){
if ( tests == [:] ){
tests = allTests
@@ -158,6 +181,7 @@
return tests[ test_name ][ "category" ]
}
+// returns all categories of all tests, or the given test list
def getAllTestCategories( tests=[:] ){
testCategoriesResult = []
if ( tests == [:] ){
@@ -187,7 +211,7 @@
return validSchedules
}
-// given a day and branch, returns all tests that run on the given day on the given branch
+// given a day, returns all tests that run on the given day on the given branch
def getTestsFromDay( day, tests=[:] ){
resultDict = [:]
if ( tests == [:] ){
@@ -226,7 +250,7 @@
}
// Given a test name and branch, return the node label associated.
-def getNodeLabel( test_name, branch, tests ){
+def getNodeLabel( test_name, branch, tests=[:] ){
if ( tests == [:] ){
tests = allTests
}
@@ -238,7 +262,8 @@
}
}
-def getAllNodeLabels( branch, tests ){
+// given a branch, returns all nodeLabels from all tests, or a given test list
+def getAllNodeLabels( branch, tests=[:] ){
nodeLabelResult = []
if ( tests == [:] ){
tests = allTests
diff --git a/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy b/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
index 4e185fc..fd70fcc 100644
--- a/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/PerformanceFuncs.groovy
@@ -242,7 +242,7 @@
dbWhere: 'AND scale=5',
y_axis: 'Latency (ms)' ]
]
- graph_saved_directory = fileRelated.jenkinsWorkspace + "postjob-BM/"
+ graph_saved_directory = fileRelated.workspaces[ "BM" ]
}
def getGraphCommand( rFileName, extras, host, port, user, pass, testName, branchName, isOldFlow ){
@@ -255,10 +255,15 @@
return result
}
+// 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
+}
+
def generateGraph( rFileName, batch, host, port, user, pass, testName, branchName, isOldFlow ){
// generate the Rscript command for individual graphs
- return generalFuncs.basicGraphPart( fileRelated.SCPFSpecificLocation + rFileName,
+ return basicGraphPart( fileRelated.rScriptPaths[ "directories" ][ "SCPF" ] + rFileName,
host, port, user, pass, testName, branchName ) +
" " + batch + " " + usingOldFlow( isOldFlow, testName ) + graph_saved_directory
}
@@ -268,7 +273,7 @@
def result = ""
for ( int i = 0; i < SCPF[ testName ][ 'graphTitle' ].size(); i++ ){
- result += generalFuncs.basicGraphPart( fileRelated.trendSCPF,
+ result += basicGraphPart( fileRelated.rScriptPaths[ "scripts" ][ "trendSCPF" ],
host,
port,
user,
diff --git a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy b/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
deleted file mode 100644
index 4eb22ab..0000000
--- a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
+++ /dev/null
@@ -1,276 +0,0 @@
-#!groovy
-
-// Copyright 2017 Open Networking Foundation (ONF)
-//
-// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
-// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
-// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
-//
-// TestON is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 2 of the License, or
-// (at your option) any later version.
-//
-// TestON is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with TestON. If not, see <http://www.gnu.org/licenses/>.
-
-// This is the dependency Jenkins script.
-// This will provide the portion that will set up the environment of the machine
-// and trigger the corresponding jobs.
-
-test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
-test_list.init()
-
-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 )
- }
- return str
-}
-
-def printDaysForTest(){
- // Print the days for what test has.
- AllTheTests = test_list.getAllTests()
-
- result = ""
- for ( String test in AllTheTests.keySet() ){
- result += test + ": ["
- test_schedule = test_list.getTestSchedule( test )
- for ( String sch in test_schedule.keySet() ){
- for ( String day in test_list.convertScheduleKeyToDays( sch ) ){
- result += day + " "
- }
- }
- result += "]\n"
- }
- return result
-}
-
-def runTestSeq( testList ){
- // Running the test sequentially
- 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" ] != "" ){
- 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
-
- // 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
-
- println "Job name: " + jobOn + "-pipeline-" + ( manuallyRun ? "manually" : branch )
- def wiki = branch
- def onos_branch = funcs.branchWithPrefix( branch )
- def test_branch = funcs.testBranchWithPrefix( branch )
- println "onos_branch with prefix: " + onos_branch
- println "test_branch with prefix: " + test_branch
- node( "TestStation-" + nodeName + "s" ) {
- envSetup( onos_branch, test_branch, onosTag, jobOn, manuallyRun )
- exportEnvProperty( onos_branch, test_branch, wiki, tests, post_result, manuallyRun, onosTag, isOldFlow )
- }
-
- 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 {
- 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" ) {
- 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 "ONOSJAVAOPTS=''' + env.ONOSJAVAOPTS + '''" >> /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
- println "onos_branch is set to " + onos_branch
- println "test_branch is set to " + test_branch
- stage( "envSetup" ) {
- // after env: ''' + borrow_mn( jobOn ) + '''
- sh '''#!/bin/bash -l
- set +e
- . ~/.bashrc
- env
- ''' + preSetup( onos_branch, test_branch, onos_tag, manuallyRun ) + '''
- ''' + oldFlowCheck( jobOn, onos_branch ) + '''
- ''' + postSetup( onos_branch, test_branch, onos_tag, manuallyRun )
- generateKey()
- }
-}
-
-def tagCheck( onos_tag, onos_branch ){
- // check the tag for onos if it is not empty
-
- result = "git checkout "
- 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 ){
- 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 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 clean -df # clean any local files
- git checkout ''' + test_branch + ''' #create new local branch
- git branch
- git log -1 --decorate
- echo -e "\n##### Set ONOS Branch #####"
- echo "ONOS Branch is set on: ''' + onos_branch + '''"
- echo -e "\n #### check karaf version ######"
- env |grep karaf
- cd ~/onos
- 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 ''' + onos_branch + ''' # just incase 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/''' + onos_branch + ''' # force local index to match remote branch
- git clean -df # clean any local files
- rm -rf buck-out
- rm -rf bazel-*
- ''' + tagCheck( onos_tag, onos_branch ) + '''
- git branch
- git log -1 --decorate
- echo -e "\n##### set jvm heap size to 8G #####"
- echo ${ONOSJAVAOPTS}
- inserted_line="export JAVA_OPTS=\"\${ONOSJAVAOPTS}\""
- sed -i "s/bash/bash\\n$inserted_line/" ~/onos/tools/package/bin/onos-service
- echo "##### Check onos-service setting..... #####"
- cat ~/onos/tools/package/bin/onos-service
- export JAVA_HOME=/usr/lib/jvm/java-8-oracle'''
- }
- 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" ) )
- 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 ONOS
-
- result = ""
- if ( !isManual ){
- result = '''echo -e "\n##### build ONOS skip unit tests ######"
- cd ~/onos
- . tools/dev/bash_profile
- op
- sleep 30
- echo -e "\n##### Stop all running instances of Karaf #####"
- kill $(ps -efw | grep karaf | grep -v grep | awk '{print $2}')
- sleep 30
- git branch
- '''
- }
- return result
-}
-
-def generateKey(){
- // generate cluster-key of the onos
-
- try {
- sh '''
- #!/bin/bash -l
- set +e
- . ~/.bashrc
- env
- onos-push-bits-through-proxy
- onos-gen-cluster-key -f
- '''
- } catch ( all ){
- }
-}
-
-return this
diff --git a/TestON/JenkinsFile/dependencies/paths.json b/TestON/JenkinsFile/dependencies/paths.json
new file mode 100644
index 0000000..567d484
--- /dev/null
+++ b/TestON/JenkinsFile/dependencies/paths.json
@@ -0,0 +1,27 @@
+{
+ "jenkinsFiles": "~/OnosSystemTest/TestON/JenkinsFile/",
+ "workspaces" : {
+ "base" : "/var/jenkins/workspace/",
+ "all-pipeline-trigger" : "/var/jenkins/workspace/all-pipeline-trigger/",
+ "BM" : "/var/jenkins/workspace/postjob-BM/",
+ "VM" : "/var/jenkins/workspace/postjob-VM/",
+ "Fabric" : "/var/jenkins/workspace/postjob-Fabric/",
+ "Fabric5" : "/var/jenkins/workspace/postjob-Fabric5/",
+ "Trellis" : "/var/jenkins/workspace/postjob-Trellis-POD/"
+ },
+ "rScript": {
+ "directories": {
+ "base": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/",
+ "SCPF": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/SCPFspecificGraphRScripts/",
+ "CHO": "~/CHO_Jenkins_Scripts/"
+ },
+ "scripts": {
+ "trendIndividual": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/trendIndividualTest.R",
+ "trendMultiple": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/trendMultipleTests.R",
+ "trendSCPF": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/trendSCPF.R",
+ "trendCHO": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/trendCHO.R",
+ "histogramMultiple": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/histogramMultipleTestGroups.R",
+ "pieMultiple": "~/OnosSystemTest/TestON/JenkinsFile/wikiGraphRScripts/pieMultipleTests.R"
+ }
+ }
+}
diff --git a/TestON/JenkinsFile/dependencies/tests.json b/TestON/JenkinsFile/dependencies/tests.json
index ed48bcd..51fdb04 100644
--- a/TestON/JenkinsFile/dependencies/tests.json
+++ b/TestON/JenkinsFile/dependencies/tests.json
@@ -785,18 +785,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -808,18 +808,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -831,18 +831,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -854,18 +854,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -877,18 +877,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -901,17 +901,17 @@
{
"branch": "master",
"day": "fri",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "fri",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "fri",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -924,17 +924,17 @@
{
"branch": "master",
"day": "fri",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "fri",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "fri",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -947,17 +947,17 @@
{
"branch": "master",
"day": "fri",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "fri",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "fri",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -970,17 +970,17 @@
{
"branch": "master",
"day": "fri",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "fri",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "fri",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -993,17 +993,17 @@
{
"branch": "master",
"day": "sat",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "sat",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "sat",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1016,17 +1016,17 @@
{
"branch": "master",
"day": "sat",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "sat",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "sat",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1039,17 +1039,17 @@
{
"branch": "master",
"day": "sat",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "sat",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "sat",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1062,18 +1062,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1084,18 +1084,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1108,18 +1108,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1132,18 +1132,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1157,7 +1157,17 @@
{
"branch": "master",
"day": "fri",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
+ },
+ {
+ "branch": "onos-1.x",
+ "day": "fri",
+ "nodeLabel": "Fabric-1.x"
+ },
+ {
+ "branch": "onos-2.x",
+ "day": "fri",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1171,7 +1181,17 @@
{
"branch": "master",
"day": "sat",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
+ },
+ {
+ "branch": "onos-1.x",
+ "day": "sat",
+ "nodeLabel": "Fabric-1.x"
+ },
+ {
+ "branch": "onos-2.x",
+ "day": "sat",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1185,7 +1205,17 @@
{
"branch": "master",
"day": "sat",
- "nodeLabel": "Fabric4"
+ "nodeLabel": "Fabric-master"
+ },
+ {
+ "branch": "onos-1.x",
+ "day": "sat",
+ "nodeLabel": "Fabric-1.x"
+ },
+ {
+ "branch": "onos-2.x",
+ "day": "sat",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1198,18 +1228,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
@@ -1222,18 +1252,18 @@
"schedules": [
{
"branch": "master",
- "day": "weekdays",
- "nodeLabel": "Fabric4"
+ "day": "everyday",
+ "nodeLabel": "Fabric-master"
},
{
"branch": "onos-1.x",
- "day": "onos-1.x_schedule",
- "nodeLabel": "Fabric2"
+ "day": "everyday",
+ "nodeLabel": "Fabric-1.x"
},
{
"branch": "onos-2.x",
- "day": "onos-2.x_schedule",
- "nodeLabel": "Fabric3"
+ "day": "everyday",
+ "nodeLabel": "Fabric-2.x"
}
],
"category": "SR",
diff --git a/TestON/JenkinsFile/generateWikiTestList.groovy b/TestON/JenkinsFile/generateWikiTestList.groovy
new file mode 100644
index 0000000..6ee9328
--- /dev/null
+++ b/TestON/JenkinsFile/generateWikiTestList.groovy
@@ -0,0 +1,181 @@
+#!groovy
+// Copyright 2019 Open Networking Foundation (ONF)
+//
+// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
+// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
+// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
+//
+// TestON is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// TestON is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+// This script generates the test list on the wiki.
+test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
+
+wikiContents = ""
+testHTMLtableContents = ""
+runningNode = "TestStation-BMs"
+supportBranch1 = null
+supportBranch2 = null
+
+testCategoryContents = [:]
+
+main()
+
+def main(){
+ test_list.init()
+
+ supportBranch1 = test_list.convertBranchCodeToBranch( "onos-1.x" )
+ supportBranch2 = test_list.convertBranchCodeToBranch( "onos-2.x" )
+
+ initHtmlForWiki()
+ initTestCategoryContents()
+ wikiContents += contentsToHTML()
+ wikiContents += endTable()
+ wikiContents += addBranchDescription()
+
+ debugPrintHTML()
+
+ node ( runningNode ) {
+ publishToConfluence( "Automated Test Schedule", wikiContents )
+ }
+}
+
+// Initial part of the wiki page.
+def initHtmlForWiki(){
+ wikiContents = '''
+ <table class="wrapped confluenceTable">
+ <colgroup>
+ <col />
+ <col />
+ <col />
+ <col />
+ <col />
+ <col />
+ </colgroup>
+ <tbody>
+ <tr>
+ <th colspan="1" class="confluenceTh">
+ <br />
+ </th>
+ <th class="confluenceTh"><p>Monday</p></th>
+ <th class="confluenceTh"><p>Tuesday</p></th>
+ <th class="confluenceTh"><p>Wednesday</p></th>
+ <th class="confluenceTh"><p>Thursday</p></th>
+ <th class="confluenceTh"><p>Friday</p></th>
+ <th class="confluenceTh"><p>Saturday</p></th>
+ <th class="confluenceTh"><p>Sunday</p></th>
+ </tr>'''
+}
+
+def initTestCategoryContents(){
+ allCategories = test_list.getAllTestCategories()
+
+ for ( category in allCategories ){
+ testsFromCategory = test_list.getTestsFromCategory( category )
+
+ dayOfWeekDict = [ "mon" : null,
+ "tue" : null,
+ "wed" : null,
+ "thu" : null,
+ "fri" : null,
+ "sat" : null,
+ "sun" : null ]
+
+ for ( day in dayOfWeekDict.keySet() ){
+ testsFromDay = test_list.getTestsFromDay( day, testsFromCategory )
+ dayOfWeekDict[ day ] = testsFromDay
+ }
+
+ testCategoryContents.put( category, dayOfWeekDict )
+ }
+}
+
+def contentsToHTML(){
+ testHTMLtableContents = ""
+ for ( category in testCategoryContents.keySet() ){
+ categoryTableCells = ""
+ categoryTableCells += '''
+ <tr>
+ <th colspan="1" class="confluenceTh">''' + category + '''</th>'''
+ for ( day in testCategoryContents[ category ].keySet() ){
+ categoryTableCells += '''
+ <td class="confluenceTd">
+ <ul>'''
+ for ( test in testCategoryContents[ category ][ day ].keySet() ){
+ testName = test
+ categoryTableCells += '''
+ <li>''' + test + addAsterisks( category, day, test ) + '''</li>'''
+ }
+ categoryTableCells += '''
+ </ul>
+ </td>'''
+ }
+ categoryTableCells += '''
+ </tr>'''
+
+ testHTMLtableContents += categoryTableCells
+ }
+ return testHTMLtableContents
+}
+
+// adds asterisks based on the support branch number (hack)
+// Example: if support branch is onos-1.x, then adds 1 asterisks, if onos-2.x, then adds 2 asterisks
+def addAsterisks( category, day, test ){
+ asterisks = ""
+ tempDict = [ test : testCategoryContents[ category ][ day ][ test ] ]
+ testBranches = test_list.getBranchesFromDay( day, tempDict )
+ asteriskCount = 0
+
+ for ( branch in testBranches ){
+ if ( branch.substring( 0, 1 ) != "m" ){
+ asteriskCount += branch.substring( 0, 1 ) as Integer
+ }
+ }
+
+ for ( i = 0; i < asteriskCount; i++ ){
+ asterisks += '''*'''
+ }
+ return asterisks
+}
+
+def endTable(){
+ return '''
+ </tbody>
+ </table>'''
+}
+
+def debugPrintHTML(){
+ echo "wikiContents:\n" + wikiContents
+}
+
+def addBranchDescription(){
+ branchDescription = ""
+
+ branchDescription += '''
+ <p>* test runs on the <b>''' + supportBranch1 + '''</b> branch.</p>
+ <p>** test runs on the <b>''' + supportBranch2 + '''</b> branch.</p>
+ <p>*** test runs on the <b>''' + supportBranch1 + ''', ''' + supportBranch2 + ''', and master branches''' + '''</b>.</p>
+ <p>Otherwise, test runs on the <b>''' + '''master''' + '''</b> branch.</p>'''
+
+
+ return branchDescription
+}
+
+def publishToConfluence( pageName, contents ){
+ // publish HTML script to wiki confluence
+
+ publishConfluence siteName: 'wiki.onosproject.org', pageName: pageName, spaceName: 'ONOS',
+ attachArchivedArtifacts: true, buildIfUnstable: true,
+ editorList: [ confluenceWritePage( confluenceText( contents ) ) ]
+
+}
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index c035569..6196d1f 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -132,6 +132,7 @@
if self.handle:
self.handle.setwinsize( 24, 250 )
self.handle.sendline( "cd " + self.home )
+ self.handle.expect( "cd " + self.home )
self.handle.expect( self.prompt )
return self.handle
else:
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo b/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo
index 4fceea9..6262cb8 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo
@@ -7,6 +7,7 @@
<password></password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo.flex b/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo.flex
index e3ad276..d0d2f36 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo.flex
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.topo.flex
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.topo b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.topo
index 1dd294d..d51ca99 100755
--- a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.topo
+++ b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCflow/FUNCflow.topo b/TestON/tests/FUNC/FUNCflow/FUNCflow.topo
index 6959073..6c4b8aa 100755
--- a/TestON/tests/FUNC/FUNCflow/FUNCflow.topo
+++ b/TestON/tests/FUNC/FUNCflow/FUNCflow.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCformCluster/FUNCformCluster.topo b/TestON/tests/FUNC/FUNCformCluster/FUNCformCluster.topo
index c96b419..88163ad 100644
--- a/TestON/tests/FUNC/FUNCformCluster/FUNCformCluster.topo
+++ b/TestON/tests/FUNC/FUNCformCluster/FUNCformCluster.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo
index 6959073..6c4b8aa 100644
--- a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo
+++ b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo.physical b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo.physical
index 956d1ef..1250fd9 100644
--- a/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo.physical
+++ b/TestON/tests/FUNC/FUNCgroup/FUNCgroup.topo.physical
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCintent/FUNCintent.topo b/TestON/tests/FUNC/FUNCintent/FUNCintent.topo
index b5e4f03..b6a4aa5 100755
--- a/TestON/tests/FUNC/FUNCintent/FUNCintent.topo
+++ b/TestON/tests/FUNC/FUNCintent/FUNCintent.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCintent/FUNCintent.topo.physical b/TestON/tests/FUNC/FUNCintent/FUNCintent.topo.physical
index 0407aa2..9a3c4a2 100755
--- a/TestON/tests/FUNC/FUNCintent/FUNCintent.topo.physical
+++ b/TestON/tests/FUNC/FUNCintent/FUNCintent.topo.physical
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
index 9f36491..5acb7f9 100755
--- a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
+++ b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.topo b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.topo
index 8ea053c..658bac3 100755
--- a/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.topo
+++ b/TestON/tests/FUNC/FUNCipv6Intent/FUNCipv6Intent.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 5 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
index e67d3a2..f149a02 100755
--- a/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
+++ b/TestON/tests/FUNC/FUNCnetCfg/FUNCnetCfg.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.topo b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.topo
index a662af5..a8c1b2d 100644
--- a/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.topo
+++ b/TestON/tests/FUNC/FUNCnetconf/FUNCnetconf.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.topo b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.topo
index e051fd7..33a3845 100755
--- a/TestON/tests/FUNC/FUNCoptical/FUNCoptical.topo
+++ b/TestON/tests/FUNC/FUNCoptical/FUNCoptical.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.topo b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.topo
index 40098fd..cf64189 100644
--- a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.topo
+++ b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.topo b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.topo
index 6390959..b5ceb3f 100644
--- a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.topo
+++ b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAbackupRecover/HAbackupRecover.topo b/TestON/tests/HA/HAbackupRecover/HAbackupRecover.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAbackupRecover/HAbackupRecover.topo
+++ b/TestON/tests/HA/HAbackupRecover/HAbackupRecover.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.topo b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.topo
+++ b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAcontinuousStopNodes/HAcontinuousStopNodes.topo b/TestON/tests/HA/HAcontinuousStopNodes/HAcontinuousStopNodes.topo
index 5d64681..7b00733 100644
--- a/TestON/tests/HA/HAcontinuousStopNodes/HAcontinuousStopNodes.topo
+++ b/TestON/tests/HA/HAcontinuousStopNodes/HAcontinuousStopNodes.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.topo b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.topo
+++ b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAkillNodes/HAkillNodes.topo b/TestON/tests/HA/HAkillNodes/HAkillNodes.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAkillNodes/HAkillNodes.topo
+++ b/TestON/tests/HA/HAkillNodes/HAkillNodes.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HApowerFailure/HApowerFailure.topo b/TestON/tests/HA/HApowerFailure/HApowerFailure.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HApowerFailure/HApowerFailure.topo
+++ b/TestON/tests/HA/HApowerFailure/HApowerFailure.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAsanity/HAsanity.topo b/TestON/tests/HA/HAsanity/HAsanity.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAsanity/HAsanity.topo
+++ b/TestON/tests/HA/HAsanity/HAsanity.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAscaling/HAscaling.topo b/TestON/tests/HA/HAscaling/HAscaling.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.topo
+++ b/TestON/tests/HA/HAscaling/HAscaling.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.topo b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.topo
+++ b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAstopNodes/HAstopNodes.topo b/TestON/tests/HA/HAstopNodes/HAstopNodes.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAstopNodes/HAstopNodes.topo
+++ b/TestON/tests/HA/HAstopNodes/HAstopNodes.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAupgrade/HAupgrade.topo b/TestON/tests/HA/HAupgrade/HAupgrade.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAupgrade/HAupgrade.topo
+++ b/TestON/tests/HA/HAupgrade/HAupgrade.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/HA/HAupgradeRollback/HAupgradeRollback.topo b/TestON/tests/HA/HAupgradeRollback/HAupgradeRollback.topo
index 4bf4bd4..e6082bc 100644
--- a/TestON/tests/HA/HAupgradeRollback/HAupgradeRollback.topo
+++ b/TestON/tests/HA/HAupgradeRollback/HAupgradeRollback.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo b/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
index fdca38d..3f5c225 100755
--- a/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
+++ b/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
@@ -6,6 +6,7 @@
<user>sdn</user>
<password>rocks</password>
<type>OnosClusterDriver</type>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<connect_order>1</connect_order>
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -33,4 +34,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
index 27925b7..1ca2322 100755
--- a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
+++ b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
@@ -11,6 +11,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -20,7 +21,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
index 5eb64a0..a5de4a9 100755
--- a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
+++ b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
@@ -11,6 +11,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -20,7 +21,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo.physical b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo.physical
index 5409afd..8b4de95 100755
--- a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo.physical
+++ b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo.physical
@@ -11,6 +11,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -20,7 +21,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.topo b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.topo
index ff9a459..87cbf84 100644
--- a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.topo
+++ b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.topo
@@ -8,6 +8,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -17,7 +18,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -25,4 +26,3 @@
</COMPONENT>
</TOPOLOGY>
-
diff --git a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
index 93e1e9d..4f7fd1d 100644
--- a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
+++ b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,10 +17,10 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
index ebde314..95ed6aa 100644
--- a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
+++ b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.topo b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.topo
index 93e1e9d..4f7fd1d 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.topo
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,10 +17,10 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.topo b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.topo
index 93e1e9d..4f7fd1d 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.topo
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,10 +17,10 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.topo b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.topo
index 93e1e9d..4f7fd1d 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.topo
+++ b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,10 +17,10 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFmastershipFailoverLat/SCPFmastershipFailoverLat.topo b/TestON/tests/SCPF/SCPFmastershipFailoverLat/SCPFmastershipFailoverLat.topo
index 72c1715..c88da04 100644
--- a/TestON/tests/SCPF/SCPFmastershipFailoverLat/SCPFmastershipFailoverLat.topo
+++ b/TestON/tests/SCPF/SCPFmastershipFailoverLat/SCPFmastershipFailoverLat.topo
@@ -8,6 +8,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -17,7 +18,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt>
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
index 7a08b43..c540850 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
@@ -33,7 +33,7 @@
</CFG>
<TSHARK>
<tsharkReusltPath>/tmp/tshark_portStatus</tsharkReusltPath>
- <ofpPortStatus>OF 1.3 146</ofpPortStatus>
+ <ofpPortStatus>OpenFlow 146</ofpPortStatus>
</TSHARK>
<SLEEP>
<startup>5</startup>
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
index 684335a..047d24f 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
@@ -6,6 +6,7 @@
<host>localhost</host> # ONOS "bench" machine
<user>sdn</user>
<password>rocks</password>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
<COMPONENTS>
@@ -17,7 +18,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -40,4 +41,3 @@
</COMPONENT>
</TOPOLOGY>
-
diff --git a/TestON/tests/SCPF/SCPFportLat/dependencies/portFunc.py b/TestON/tests/SCPF/SCPFportLat/dependencies/portFunc.py
index 4c94193..10dc7ce 100644
--- a/TestON/tests/SCPF/SCPFportLat/dependencies/portFunc.py
+++ b/TestON/tests/SCPF/SCPFportLat/dependencies/portFunc.py
@@ -51,7 +51,7 @@
with open( main.tsharkResultPath, "r" ) as resultFile:
resultText = resultFile.readline()
main.log.info( "Capture result:" + resultText )
- resultText = resultText.split( " " )
+ resultText = resultText.strip().split( " " )
if len( resultText ) > 1:
tsharkResultTime = int( float( resultText[ 1 ] ) * 1000.0 )
resultFile.close()
diff --git a/TestON/tests/SCPF/SCPFscaleTopo/SCPFscaleTopo.topo b/TestON/tests/SCPF/SCPFscaleTopo/SCPFscaleTopo.topo
index 2461858..dcbc87b 100755
--- a/TestON/tests/SCPF/SCPFscaleTopo/SCPFscaleTopo.topo
+++ b/TestON/tests/SCPF/SCPFscaleTopo/SCPFscaleTopo.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
index 8b074c7..18f5fa2 100755
--- a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
@@ -5,6 +5,7 @@
<host>localhost</host> # ONOS "bench" machine
<user>sdn</user>
<password>rocks</password>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
<COMPONENTS>
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -33,4 +34,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
index 134256b..a52690a 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
@@ -50,15 +50,15 @@
<TSHARK>
<up>
- <TCP>openflow\ \[SYN\]</TCP> #1
- <RQ>OF 1.3 90 of_role_request</RQ> #2
- <RR>OF 1.3 90 of_role_reply</RR> #3
- <Feature>OF 1.3 98 of_features_reply</Feature>#4
+ <TCP>6653\ \[SYN\]</TCP> #1
+ <RQ>OpenFlow 90 Type: OFPT_ROLE_REQUEST</RQ> #2
+ <RR>OpenFlow 90 Type: OFPT_ROLE_REPLY</RR> #3
+ <Feature>OpenFlow 98 Type: OFPT_FEATURES_REPLY</Feature> #4
</up>
<down>
<FA>\[FIN,\ ACK\]</FA>
- <ACK>openflow\ \[ACK\]</ACK>
+ <ACK>6653\ \[ACK\]</ACK>
</down>
</TSHARK>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
index e4b8ee4..7736e81 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 7 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -38,4 +39,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
index b9463c2..4c26b59 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/dependencies/switchFunc.py
@@ -59,7 +59,7 @@
package: Package String
"""
- pacakge = package.split( " " )
+ pacakge = package.strip().split( " " )
dic = {}
for s in pacakge:
try:
@@ -101,7 +101,7 @@
for term in keyTerm:
if term in line:
# Exclude non-openflow FIN packets
- if term == "[FIN, ACK]" and "openflow" not in line:
+ if term == "[FIN, ACK]" and "6653" not in line:
continue
path = '/tmp/Tshark_' + str( keyTerm[ term ] )
with open( path, 'a' ) as outputfile:
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
index 7b188e2..82c7b3a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -33,4 +34,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.physical b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.physical
index 4605185..905d24b 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.physical
+++ b/TestON/tests/USECASE/SegmentRouting/SRBridging/SRBridging.topo.physical
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
index ad2c2b0..750b9b3 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.topo b/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.topo
index dbb415d..82c7b3a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRDhcprelay/SRDhcprelay.topo
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDynamic/SRDynamic.topo b/TestON/tests/USECASE/SegmentRouting/SRDynamic/SRDynamic.topo
index ad2c2b0..750b9b3 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRDynamic/SRDynamic.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamic/SRDynamic.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo
index 7b188e2..82c7b3a 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRDynamicConf/SRDynamicConf.topo
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -33,4 +34,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRHighAvailability/SRHighAvailability.topo b/TestON/tests/USECASE/SegmentRouting/SRHighAvailability/SRHighAvailability.topo
index ad2c2b0..750b9b3 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRHighAvailability/SRHighAvailability.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRHighAvailability/SRHighAvailability.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
index ad2c2b0..750b9b3 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
index b5da976..ee60f5e 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.flex b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.flex
index 645243d..8b90b0e 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.flex
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.flex
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.onf b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.onf
index 34a2013..1a7e816 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.onf
+++ b/TestON/tests/USECASE/SegmentRouting/SRMulticast/SRMulticast.topo.onf
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>1</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
index 9ee92d6..750b9b3 100755
--- a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -34,4 +35,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo
index fd61ee9..2e9e958 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.flex b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.flex
index a9c3ed1..767cfc3 100644
--- a/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.flex
+++ b/TestON/tests/USECASE/SegmentRouting/SRRouting/SRRouting.topo.flex
@@ -6,6 +6,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -15,7 +16,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes>3</nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
index 9ee92d6..750b9b3 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -34,4 +35,4 @@
</Mininet1>
</COMPONENT>
-</TOPOLOGY>
\ No newline at end of file
+</TOPOLOGY>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
index a342504..3b9a194 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used for True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.topo b/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.topo
index 680f6bc..d16c088 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.topo
+++ b/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 1 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
@@ -46,4 +47,3 @@
</COMPONENT>
</TOPOLOGY>
-
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.topo b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.topo
index 46a573a..dd9780e 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.topo
+++ b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty. OC# will be used if True.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/VPLS/VPLSBasic/VPLSBasic.topo b/TestON/tests/USECASE/VPLS/VPLSBasic/VPLSBasic.topo
index 4441c62..e49787d 100755
--- a/TestON/tests/USECASE/VPLS/VPLSBasic/VPLSBasic.topo
+++ b/TestON/tests/USECASE/VPLS/VPLSBasic/VPLSBasic.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>
diff --git a/TestON/tests/USECASE/VPLS/VPLSfailsafe/VPLSfailsafe.topo b/TestON/tests/USECASE/VPLS/VPLSfailsafe/VPLSfailsafe.topo
index 4441c62..e49787d 100755
--- a/TestON/tests/USECASE/VPLS/VPLSfailsafe/VPLSfailsafe.topo
+++ b/TestON/tests/USECASE/VPLS/VPLSfailsafe/VPLSfailsafe.topo
@@ -7,6 +7,7 @@
<password>rocks</password>
<type>OnosClusterDriver</type>
<connect_order>1</connect_order>
+ <home></home> # defines where onos home is on the build machine. Defaults to "~/onos/" if empty.
<COMPONENTS>
<cluster_name></cluster_name> # Used as a prefix for cluster components. Defaults to 'ONOS'
<diff_clihost></diff_clihost> # if it has different host other than localhost for CLI. True or empty.
@@ -16,7 +17,7 @@
<web_pass></web_pass>
<rest_port></rest_port>
<prompt></prompt> # TODO: we technically need a few of these, one per component
- <onos_home></onos_home> # defines where onos home is
+ <onos_home></onos_home> # defines where onos home is on the target cell machine. Defaults to entry in "home" if empty.
<nodes> 3 </nodes> # number of nodes in the cluster
</COMPONENTS>
</ONOScell>