blob: ac1195e88e127ebef6d95327309b2a3c804bad4b [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
83 echo "selectedTests: " + selectedTests
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070084}
85
86def readParams(){
87 // get post result from the params for manually run.
88 post_result = params.PostResult
89 manually_run = params.manual_run
90 onos_tag = params.ONOSTag
91 branchesParam = params.branches
92 isOldFlow = params.isOldFlow
93 testsParam = params.Tests
94 isFabric = params.isFabric
95}
Devin Lim2edfcec2018-05-09 17:16:21 -070096
97// Set tests based on day of week
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -070098def initDates(){
99 echo "-> initDates()"
100 now = funcs.getCurrentTime()
101 today = now[ Calendar.DAY_OF_WEEK ]
102 dayMap = [ ( Calendar.MONDAY ) : "mon",
103 ( Calendar.TUESDAY ) : "tue",
104 ( Calendar.WEDNESDAY ) : "wed",
105 ( Calendar.THURSDAY ) : "thu",
106 ( Calendar.FRIDAY ) : "fri",
107 ( Calendar.SATURDAY ) : "sat",
108 ( Calendar.SUNDAY ) : "sun" ]
109 fullDayMap = [ ( Calendar.MONDAY ) : "Monday",
110 ( Calendar.TUESDAY ) : "Tuesday",
111 ( Calendar.WEDNESDAY ) : "Wednesday",
112 ( Calendar.THURSDAY ) : "Thursday",
113 ( Calendar.FRIDAY ) : "Friday",
114 ( Calendar.SATURDAY ) : "Saturday",
115 ( Calendar.SUNDAY ) : "Sunday" ]
116 print now.toString()
Jon Hall6af749d2018-05-29 12:59:47 -0700117}
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700118
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700119// gets ONOS branches from params or string parameter
120def getONOSBranches(){
121 echo "-> getONOSBranches()"
122 if ( manually_run ){
123 return branchesParam.tokenize( "\n;, " )
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700124 } else {
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700125 return test_list.getBranchesFromDay( dayMap[ today ] )
Devin Lim2edfcec2018-05-09 17:16:21 -0700126 }
127}
Devin Limf5175192018-05-14 19:13:22 -0700128
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700129def getONOSTests(){
130 echo "-> getONOSTests()"
131 if ( manually_run ){
132 return test_list.getTestsFromStringList( testsParam.tokenize( "\n;, " ) )
133 } else {
134 day = dayMap[ today ]
135 return test_list.getTestsFromDay( day )
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700136 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700137}
Devin Limf5175192018-05-14 19:13:22 -0700138
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700139// init paths for the files and directories.
140def initGraphPaths(){
141 graphPaths[ "histogramMultiple" ] = fileRelated.histogramMultiple
142 graphPaths[ "pieMultiple" ] = fileRelated.pieMultiple
143 graphPaths[ "saveDirectory" ] = fileRelated.jenkinsWorkspace + "postjob-VM/"
144}
Jeremy Ronquillo64eeeb12019-05-13 11:19:46 -0700145
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700146// **********************
147// Determine Tests to Run
148// **********************
149
150def printTestsToRun( runList ){
151 if ( manually_run ){
152 println "Tests to be run manually:"
153 } else {
154 if ( isFabric ){
155 postToSlackSR()
Devin Lim2edfcec2018-05-09 17:16:21 -0700156 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700157 if ( today == Calendar.MONDAY ){
158 postToSlackTestsToRun()
159 }
160 println "Defaulting to " + day + " tests:"
Devin Lim2edfcec2018-05-09 17:16:21 -0700161 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700162 for ( list in runList ){
163 // triggerFuncs.print_tests( all_testcases[ b ] )
164 echo "" + list
165 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700166}
Devin Limf5175192018-05-14 19:13:22 -0700167
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700168def postToSlackSR(){
169 // If it is automated running, it will post the beginning message to the channel.
170 slackSend( channel: 'sr-failures', color: '#03CD9F',
171 message: ":sparkles:" * 16 + "\n" +
172 "Starting tests on : " + now.toString() +
173 "\n" + ":sparkles:" * 16 )
174}
175
176def postToSlackTestsToRun(){
177 slackSend( color: '#FFD988',
178 message: "Tests to be run this weekdays : \n" +
179 triggerFuncs.printDaysForTest() )
180}
181
182// *********
183// Run Tests
184// *********
185
186def generateRunList(){
187 runList = [:]
188 for ( branch in onos_branches ){
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -0700189 runBranch = []
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700190 nodeLabels = test_list.getAllNodeLabels( branch, selectedTests )
191 for ( nodeLabel in nodeLabels ){
192 selectedNodeLabelTests = test_list.getTestsFromNodeLabel( nodeLabel, branch, selectedTests )
193 selectedNodeLabelCategories = test_list.getAllTestCategories( selectedNodeLabelTests )
194 for ( category in selectedNodeLabelCategories ){
Jeremy Ronquilloa5aa7c12019-06-04 10:26:36 -0700195 selectedNodeLabelCategoryTests = test_list.getTestsFromCategory( category, selectedNodeLabelTests )
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700196 exeTestList = test_list.getTestListAsString( selectedNodeLabelCategoryTests )
Jeremy Ronquillof3b173d2019-06-07 14:53:25 -0700197 runList.put( branch + "-" + nodeLabel + "-" + category, triggerFuncs.trigger_pipeline( branch, exeTestList, nodeLabel, category, manually_run, onos_tag ) )
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700198 }
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700199 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700200 }
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700201 return runList
Devin Lim2edfcec2018-05-09 17:16:21 -0700202}
Devin Limf5175192018-05-14 19:13:22 -0700203
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700204def runTests(){
205 runList = generateRunList()
206 printTestsToRun( runList )
207 parallel runList
Devin Lim2edfcec2018-05-09 17:16:21 -0700208}
Devin Limf5175192018-05-14 19:13:22 -0700209
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700210// ***************
211// Generate Graphs
212// ***************
Devin Lim2edfcec2018-05-09 17:16:21 -0700213
Jeremy Ronquillo96e2bd32019-05-28 15:40:18 -0700214def generateGraphs(){
215 // If it is automated running, it will generate the stats graph on VM.
216 if ( !manually_run ){
217 for ( String b in onos_branches ){
218 funcs.generateStatGraph( "TestStation-VMs",
219 funcs.branchWithPrefix( b ),
220 graphPaths[ "histogramMultiple" ],
221 graphPaths[ "pieMultiple" ],
222 graphPaths[ "saveDirectory" ] )
Jeremy Ronquilloa37920b2019-05-23 14:34:25 -0700223 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700224 }
Devin Lim2edfcec2018-05-09 17:16:21 -0700225}