blob: 52e7efecd7d7698cb98cad19c2ac15a379cb1a59 [file] [log] [blame]
Devin Lime1346f42018-05-15 15:41:36 -07001#!groovy
Devin Limf5175192018-05-14 19:13:22 -07002// Copyright 2017 Open Networking Foundation (ONF)
3//
4// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
5// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
6// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
7//
8// TestON is free software: you can redistribute it and/or modify
9// it under the terms of the GNU General Public License as published by
10// the Free Software Foundation, either version 2 of the License, or
11// (at your option) any later version.
12//
13// TestON is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17//
18// You should have received a copy of the GNU General Public License
19// along with TestON. If not, see <http://www.gnu.org/licenses/>.
20
21// This is the Jenkins script for vm-pipeline-trigger or bm-pipeline-trigger
22
Devin Limf5175192018-05-14 19:13:22 -070023// set the functions of the dependencies.
Devin Limb734ea52018-05-14 14:13:05 -070024funcs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsCommonFuncs.groovy' )
Devin Limb734ea52018-05-14 14:13:05 -070025triggerFuncs = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/TriggerFuncs.groovy' )
26fileRelated = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsPathAndFiles.groovy' )
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -070027test_list = evaluate readTrusted( 'TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy' )
Devin Lim2edfcec2018-05-09 17:16:21 -070028
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070029onos_tag = null
30manually_run = null
31now = null
32today = null
33onos_branches = null
34day = null
35post_result = null
36branchesParam = null
37isFabric = null
38testsParam = null
Jeremy Ronquillo4fd82442019-05-21 20:56:58 -070039
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070040dayMap = [:]
41fullDayMap = [:]
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -070042all_testcases = [:]
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070043runTest = [:]
44selectedTests = [:]
45graphPaths = [:]
Devin Lim2edfcec2018-05-09 17:16:21 -070046
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070047main()
Devin Limf5175192018-05-14 19:13:22 -070048
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070049def main() {
50 init()
51 runTests()
52 generateGraphs()
53}
54
55// **************
56// Initialization
57// **************
58
59// initialize file scope vars
60def init(){
61 // get the name of the job.
62 jobName = env.JOB_NAME
63
64 // set the versions of the onos
65 fileRelated.init()
66 test_list.init()
67 readParams()
68
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -070069 funcs.initializeTrend( "Fabric" )
70 funcs.initialize( "Fabric" )
71
72 funcs.initializeTrend( "VM" )
73
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070074 triggerFuncs.init( funcs )
75
76 // list of the tests to be run will be saved in each choices.
77 day = ""
78
79 initDates()
80 onos_branches = getONOSBranches()
81 selectedTests = getONOSTests()
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -070082
Jeremy Ronquillod98c2a12019-06-07 15:13:29 -070083 initGraphPaths()
84
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -070085 echo "selectedTests: " + selectedTests
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070086}
87
88def readParams(){
89 // get post result from the params for manually run.
90 post_result = params.PostResult
91 manually_run = params.manual_run
92 onos_tag = params.ONOSTag
93 branchesParam = params.branches
94 isOldFlow = params.isOldFlow
95 testsParam = params.Tests
96 isFabric = params.isFabric
97}
Devin Lim2edfcec2018-05-09 17:16:21 -070098
99// Set tests based on day of week
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700100def initDates(){
101 echo "-> initDates()"
102 now = funcs.getCurrentTime()
103 today = now[ Calendar.DAY_OF_WEEK ]
104 dayMap = [ ( Calendar.MONDAY ) : "mon",
105 ( Calendar.TUESDAY ) : "tue",
106 ( Calendar.WEDNESDAY ) : "wed",
107 ( Calendar.THURSDAY ) : "thu",
108 ( Calendar.FRIDAY ) : "fri",
109 ( Calendar.SATURDAY ) : "sat",
110 ( Calendar.SUNDAY ) : "sun" ]
111 fullDayMap = [ ( Calendar.MONDAY ) : "Monday",
112 ( Calendar.TUESDAY ) : "Tuesday",
113 ( Calendar.WEDNESDAY ) : "Wednesday",
114 ( Calendar.THURSDAY ) : "Thursday",
115 ( Calendar.FRIDAY ) : "Friday",
116 ( Calendar.SATURDAY ) : "Saturday",
117 ( Calendar.SUNDAY ) : "Sunday" ]
118 print now.toString()
Jon Hall6af749d2018-05-29 12:59:47 -0700119}
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700120
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700121// gets ONOS branches from params or string parameter
122def getONOSBranches(){
123 echo "-> getONOSBranches()"
124 if ( manually_run ){
125 return branchesParam.tokenize( "\n;, " )
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700126 } else {
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700127 return test_list.getBranchesFromDay( dayMap[ today ] )
Devin Lim2edfcec2018-05-09 17:16:21 -0700128 }
129}
Devin Limf5175192018-05-14 19:13:22 -0700130
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700131def getONOSTests(){
132 echo "-> getONOSTests()"
133 if ( manually_run ){
134 return test_list.getTestsFromStringList( testsParam.tokenize( "\n;, " ) )
135 } else {
136 day = dayMap[ today ]
137 return test_list.getTestsFromDay( day )
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700138 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700139}
Devin Limf5175192018-05-14 19:13:22 -0700140
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700141// init paths for the files and directories.
142def initGraphPaths(){
Jeremy Ronquillod98c2a12019-06-07 15:13:29 -0700143 graphPaths.put( "histogramMultiple", fileRelated.histogramMultiple )
144 graphPaths.put( "pieMultiple", fileRelated.pieMultiple )
145 graphPaths.put( "saveDirectory", fileRelated.jenkinsWorkspace + "postjob-VM/" )
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700146}
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700147
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700148// **********************
149// Determine Tests to Run
150// **********************
151
152def printTestsToRun( runList ){
153 if ( manually_run ){
154 println "Tests to be run manually:"
155 } else {
156 if ( isFabric ){
157 postToSlackSR()
Devin Lim2edfcec2018-05-09 17:16:21 -0700158 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700159 if ( today == Calendar.MONDAY ){
160 postToSlackTestsToRun()
161 }
162 println "Defaulting to " + day + " tests:"
Devin Lim2edfcec2018-05-09 17:16:21 -0700163 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700164 for ( list in runList ){
165 // triggerFuncs.print_tests( all_testcases[ b ] )
166 echo "" + list
167 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700168}
Devin Limf5175192018-05-14 19:13:22 -0700169
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700170def postToSlackSR(){
171 // If it is automated running, it will post the beginning message to the channel.
172 slackSend( channel: 'sr-failures', color: '#03CD9F',
173 message: ":sparkles:" * 16 + "\n" +
174 "Starting tests on : " + now.toString() +
175 "\n" + ":sparkles:" * 16 )
176}
177
178def postToSlackTestsToRun(){
179 slackSend( color: '#FFD988',
180 message: "Tests to be run this weekdays : \n" +
181 triggerFuncs.printDaysForTest() )
182}
183
184// *********
185// Run Tests
186// *********
187
188def generateRunList(){
189 runList = [:]
190 for ( branch in onos_branches ){
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -0700191 runBranch = []
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700192 nodeLabels = test_list.getAllNodeLabels( branch, selectedTests )
193 for ( nodeLabel in nodeLabels ){
194 selectedNodeLabelTests = test_list.getTestsFromNodeLabel( nodeLabel, branch, selectedTests )
195 selectedNodeLabelCategories = test_list.getAllTestCategories( selectedNodeLabelTests )
196 for ( category in selectedNodeLabelCategories ){
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -0700197 selectedNodeLabelCategoryTests = test_list.getTestsFromCategory( category, selectedNodeLabelTests )
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700198 exeTestList = test_list.getTestListAsString( selectedNodeLabelCategoryTests )
Jeremy Ronquillof3b173d2019-06-07 14:53:25 -0700199 runList.put( branch + "-" + nodeLabel + "-" + category, triggerFuncs.trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700200 }
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700201 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700202 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700203 return runList
Devin Lim2edfcec2018-05-09 17:16:21 -0700204}
Devin Limf5175192018-05-14 19:13:22 -0700205
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700206def runTests(){
207 runList = generateRunList()
208 printTestsToRun( runList )
209 parallel runList
Devin Lim2edfcec2018-05-09 17:16:21 -0700210}
Devin Limf5175192018-05-14 19:13:22 -0700211
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700212// ***************
213// Generate Graphs
214// ***************
Devin Lim2edfcec2018-05-09 17:16:21 -0700215
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700216def generateGraphs(){
217 // If it is automated running, it will generate the stats graph on VM.
218 if ( !manually_run ){
219 for ( String b in onos_branches ){
220 funcs.generateStatGraph( "TestStation-VMs",
221 funcs.branchWithPrefix( b ),
222 graphPaths[ "histogramMultiple" ],
223 graphPaths[ "pieMultiple" ],
224 graphPaths[ "saveDirectory" ] )
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700225 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700226 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700227}