[ONOS-7994]: Combine TestON Pipeline Scripts Containing Similar Code
Change-Id: I1727233b87ca957c8e23c6c839232b22121847dd
diff --git a/TestON/JenkinsFile/MasterTrigger.groovy b/TestON/JenkinsFile/MasterTrigger.groovy
new file mode 100644
index 0000000..8347add
--- /dev/null
+++ b/TestON/JenkinsFile/MasterTrigger.groovy
@@ -0,0 +1,235 @@
+#!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
+simulateDay = null
+day = 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()
+
+ 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 = params.isOldFlow
+ testsParam = params.Tests
+ isFabric = params.isFabric
+ simulateDay = params.simulate_day
+}
+
+// Set tests based on day of week
+def initDates(){
+ echo "-> initDates()"
+ now = funcs.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
+ }
+}
+
+// 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.histogramMultiple )
+ graphPaths.put( "pieMultiple", fileRelated.pieMultiple )
+ graphPaths.put( "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 ){
+ 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 + "-" + category, 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",
+ test_list.addPrefixToBranch( b ),
+ graphPaths[ "histogramMultiple" ],
+ graphPaths[ "pieMultiple" ],
+ graphPaths[ "saveDirectory" ] )
+ }
+ }
+}