[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" ] )
+        }
+    }
+}