Add µONOS category and setup steps in Jenkins Pipelines

Change-Id: I08850a3461aa4e84cb453f9c52be86f5edcd0e14
diff --git a/TestON/JenkinsFile/MOJenkinsFile.groovy b/TestON/JenkinsFile/MOJenkinsFile.groovy
new file mode 100644
index 0000000..d7add2d
--- /dev/null
+++ b/TestON/JenkinsFile/MOJenkinsFile.groovy
@@ -0,0 +1,123 @@
+#!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/>.
+
+test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
+fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
+
+category = null
+prop = null
+testsToRun = null
+testsToRunStrList = null
+branch = null
+branchWithPrefix = null
+nodeLabel = null
+testStation = null
+testsOverride = null
+pipelineTimeout = null
+
+testsFromList = [:]
+pipeline = [:]
+
+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()
+    }
+}
+
+main()
+
+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 )
+    }
+    prop = getProperties()
+
+    // get the list of the tests from category
+    testsFromList = test_list.getTestsFromCategory( category )
+
+    tokenizeTokens = "\n;, "
+
+    if ( testsOverride == "" || testsOverride == null ){
+        testsToRunStrList = prop[ "Tests" ].tokenize( tokenizeTokens )
+    } else {
+        testsToRunStrList = testsOverride.tokenize( tokenizeTokens )
+    }
+    testsToRun = test_list.getTestsFromStringList( testsToRunStrList )
+}
+
+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 readParams(){
+    category = params.Category       // "MO", 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
+}
+
+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"
+        pipeline[ stepName ] = runMOtest( test,
+                                          toBeRun )
+    }
+
+    // run the tests sequentially.
+    for ( test in pipeline.keySet() ){
+        pipeline[ test ].call()
+    }
+}
+
+def runMOtest( test, toBeRun ){
+    return {
+        catchError {
+            stage( test ){
+                if ( toBeRun ){
+                    node( testStation ) {
+                        sh script: '''. ~/.profile
+                                      cd ~/onos-test
+                                      make clean
+                                      make integration
+                                   ''', label: "make integration"
+                    }
+                }
+            }
+        }
+    }
+}