blob: 2ca4f7234c5de90d20c6b7bfcba8975eb6a34f66 [file] [log] [blame]
Devin Lime1346f42018-05-15 15:41:36 -07001#!groovy
2
Devin Limf5175192018-05-14 19:13:22 -07003// Copyright 2017 Open Networking Foundation (ONF)
4//
5// Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
6// the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
7// or the System Testing Guide page at <https://wiki.onosproject.org/x/WYQg>
8//
9// TestON is free software: you can redistribute it and/or modify
10// it under the terms of the GNU General Public License as published by
11// the Free Software Foundation, either version 2 of the License, or
12// (at your option) any later version.
13//
14// TestON is distributed in the hope that it will be useful,
15// but WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18//
19// You should have received a copy of the GNU General Public License
20// along with TestON. If not, see <http://www.gnu.org/licenses/>.
21
22// This is the dependency Jenkins script.
23// This will provide the portion that will set up the environment of the machine
24// and trigger the corresponding jobs.
25
Jon Hall6af749d2018-05-29 12:59:47 -070026
Devin Lim431408d2018-03-23 17:51:31 -070027def init( commonFuncs ){
28 funcs = commonFuncs
29}
Jon Hall6af749d2018-05-29 12:59:47 -070030
Devin Lim431408d2018-03-23 17:51:31 -070031def lastCommaRemover( str ){
Devin Limf5175192018-05-14 19:13:22 -070032 // function that will remove the last comma from the string
33
Devin Lim431408d2018-03-23 17:51:31 -070034 if ( str.size() > 0 && str[ str.size() - 1 ] == ',' ){
Jon Hall6af749d2018-05-29 12:59:47 -070035 str = str.substring( 0, str.size() - 1 )
Devin Lim431408d2018-03-23 17:51:31 -070036 }
37 return str
38}
Jon Hall6af749d2018-05-29 12:59:47 -070039
Devin Lim431408d2018-03-23 17:51:31 -070040def printDaysForTest( AllTheTests ){
Devin Limf5175192018-05-14 19:13:22 -070041 // Print the days for what test has.
42
Devin Lim431408d2018-03-23 17:51:31 -070043 result = ""
44 for ( String test in AllTheTests.keySet() ){
45 result += test + " : \n"
Jon Hall6af749d2018-05-29 12:59:47 -070046 for ( String each in AllTheTests[ test ].keySet() ){
Devin Lim431408d2018-03-23 17:51:31 -070047 AllTheTests[ test ][ each ][ "day" ] = lastCommaRemover( AllTheTests[ test ][ each ][ "day" ] )
48 result += " " + each + ":[" + AllTheTests[ test ][ each ][ "day" ] + "]\n"
49 }
50 result += "\n"
51 }
52 return result
53}
Jon Hall6af749d2018-05-29 12:59:47 -070054
Devin Lim431408d2018-03-23 17:51:31 -070055def runTestSeq( testList ){
Devin Limf5175192018-05-14 19:13:22 -070056 // Running the test sequentially
Jon Hall6af749d2018-05-29 12:59:47 -070057 return {
Devin Lim431408d2018-03-23 17:51:31 -070058 for ( test in testList.keySet() ){
59 testList[ test ].call()
60 }
61 }
62}
Jon Hall6af749d2018-05-29 12:59:47 -070063
Devin Lim431408d2018-03-23 17:51:31 -070064def print_tests( tests ){
Devin Limf5175192018-05-14 19:13:22 -070065 // print the list of the tsets to be run
66
Jon Hall6af749d2018-05-29 12:59:47 -070067 for ( String test in tests.keySet() ){
68 if ( tests[ test ][ "tests" ] != "" ){
Devin Lim431408d2018-03-23 17:51:31 -070069 println test + ":"
70 println tests[ test ][ "tests" ]
71 }
72 }
73}
Jon Hall6af749d2018-05-29 12:59:47 -070074
Devin Lim431408d2018-03-23 17:51:31 -070075def organize_tests( tests, testcases ){
Devin Limf5175192018-05-14 19:13:22 -070076 // organize the test to its category using its name.
77 // most of the time it will use the first two character of the test name
78 // but there are some exceptions like FUNCbgpls or FUNCvirNetNB since they are now under USECASE
79
Jon Hall6af749d2018-05-29 12:59:47 -070080 // depends on the first two letters of the test name, it will decide which category to put the test into.
81 def prefixes = [
82 "FU": "FUNC",
83 "HA": "HA",
84 "PL": "USECASE",
85 "SA": "USECASE",
86 "SC": "SCPF",
87 "SR": "SR",
88 "US": "USECASE",
89 "VP": "USECASE"
90 ]
91
92 def testList = tests.tokenize( "\n;, " )
93 for ( String test in testList ){
94 String prefix = ( test == "FUNCbgpls" || test == "FUNCvirNetNB" ) ? "US" : ( test[ 0..1 ] )
95 testcases[ prefixes[ prefix ] ][ "tests" ] += test + ","
96 }
Devin Lim431408d2018-03-23 17:51:31 -070097 return testcases
98}
Jon Hall6af749d2018-05-29 12:59:47 -070099
Devin Lim431408d2018-03-23 17:51:31 -0700100def trigger( branch, tests, nodeName, jobOn, manuallyRun, onosTag ){
Devin Limf5175192018-05-14 19:13:22 -0700101 // triggering function that will setup the environment and determine which pipeline to trigger
102
You Wang49461a82018-08-02 13:15:30 -0700103 println "Job name: " + jobOn + "-pipeline-" + ( manuallyRun ? "manually" : branch )
Devin Lim6c77b7c2018-04-06 19:36:56 -0700104 def wiki = branch
You Wangf7a07522018-08-02 14:23:25 -0700105 def onos_branch = funcs.branchWithPrefix( branch )
106 def test_branch = funcs.testBranchWithPrefix( branch )
You Wang49461a82018-08-02 13:15:30 -0700107 println "onos_branch with prefix: " + onos_branch
108 println "test_branch with prefix: " + test_branch
Jon Hall6af749d2018-05-29 12:59:47 -0700109 node( "TestStation-" + nodeName + "s" ) {
You Wang79527502018-08-02 12:18:20 -0700110 envSetup( onos_branch, test_branch, onosTag, jobOn, manuallyRun )
111 exportEnvProperty( onos_branch, test_branch, wiki, tests, post_result, manuallyRun, onosTag, isOldFlow )
Devin Lim431408d2018-03-23 17:51:31 -0700112 }
113
114 jobToRun = jobOn + "-pipeline-" + ( manuallyRun ? "manually" : wiki )
115 build job: jobToRun, propagate: false
116}
Jon Hall6af749d2018-05-29 12:59:47 -0700117
Devin Lim431408d2018-03-23 17:51:31 -0700118def trigger_pipeline( branch, tests, nodeName, jobOn, manuallyRun, onosTag ){
Devin Limf5175192018-05-14 19:13:22 -0700119 // nodeName : "BM" or "VM"
120 // jobOn : "SCPF" or "USECASE" or "FUNC" or "HA"
121 // this will return the function by wrapping them up with return{} to prevent them to be
122 // executed once this function is called to assign to specific variable.
Jon Hall6af749d2018-05-29 12:59:47 -0700123 return {
Devin Lim5b22fbb2018-04-06 15:30:45 -0700124 trigger( branch, tests, nodeName, jobOn, manuallyRun, onosTag )
Devin Lim431408d2018-03-23 17:51:31 -0700125 }
126}
Jon Hall6af749d2018-05-29 12:59:47 -0700127
Devin Lim431408d2018-03-23 17:51:31 -0700128// export Environment properties.
129def exportEnvProperty( onos_branch, test_branch, wiki, tests, postResult, manually_run, onosTag, isOldFlow ){
Devin Limf5175192018-05-14 19:13:22 -0700130 // export environment properties to the machine.
131
Jon Hall6af749d2018-05-29 12:59:47 -0700132 stage( "export Property" ) {
Devin Lim431408d2018-03-23 17:51:31 -0700133 sh '''
Jon Hall6af749d2018-05-29 12:59:47 -0700134 echo "ONOSBranch=''' + onos_branch + '''" > /var/jenkins/TestONOS.property
135 echo "TestONBranch=''' + test_branch + '''" >> /var/jenkins/TestONOS.property
136 echo "ONOSTag=''' + onosTag + '''" >> /var/jenkins/TestONOS.property
137 echo "WikiPrefix=''' + wiki + '''" >> /var/jenkins/TestONOS.property
138 echo "ONOSJVMHeap=''' + env.ONOSJVMHeap + '''" >> /var/jenkins/TestONOS.property
139 echo "Tests=''' + tests + '''" >> /var/jenkins/TestONOS.property
140 echo "postResult=''' + postResult + '''" >> /var/jenkins/TestONOS.property
141 echo "manualRun=''' + manually_run + '''" >> /var/jenkins/TestONOS.property
142 echo "isOldFlow=''' + isOldFlow + '''" >> /var/jenkins/TestONOS.property
Devin Lim431408d2018-03-23 17:51:31 -0700143 '''
144 }
145}
Jon Hall6af749d2018-05-29 12:59:47 -0700146
Devin Lim431408d2018-03-23 17:51:31 -0700147// Initialize the environment Setup for the onos and OnosSystemTest
148def envSetup( onos_branch, test_branch, onos_tag, jobOn, manuallyRun ){
Devin Limf5175192018-05-14 19:13:22 -0700149 // to setup the environment using the bash script
You Wang49461a82018-08-02 13:15:30 -0700150 println "onos_branch is set to " + onos_branch
151 println "test_branch is set to " + test_branch
Devin Lim431408d2018-03-23 17:51:31 -0700152 stage( "envSetup" ) {
153 // after env: ''' + borrow_mn( jobOn ) + '''
154 sh '''#!/bin/bash -l
155 set +e
156 . ~/.bashrc
157 env
158 ''' + preSetup( onos_branch, test_branch, onos_tag, manuallyRun ) + '''
159 ''' + oldFlowCheck( jobOn, onos_branch ) + '''
160 ''' + postSetup( onos_branch, test_branch, onos_tag, manuallyRun )
Devin Lim90b6a592018-05-09 13:20:33 -0700161 generateKey()
Devin Lim431408d2018-03-23 17:51:31 -0700162 }
163}
Jon Hall6af749d2018-05-29 12:59:47 -0700164
Devin Lim431408d2018-03-23 17:51:31 -0700165def tagCheck( onos_tag, onos_branch ){
Devin Limf5175192018-05-14 19:13:22 -0700166 // check the tag for onos if it is not empty
167
Devin Lim431408d2018-03-23 17:51:31 -0700168 result = "git checkout "
Jon Hall6af749d2018-05-29 12:59:47 -0700169 if ( onos_tag == "" ){
170 //create new local branch
171 result += onos_branch
172 }
173 else {
174 //checkout the tag
175 result += onos_tag
176 }
Devin Lim431408d2018-03-23 17:51:31 -0700177 return result
178}
Jon Hall6af749d2018-05-29 12:59:47 -0700179
Devin Lim431408d2018-03-23 17:51:31 -0700180def preSetup( onos_branch, test_branch, onos_tag, isManual ){
Devin Limf5175192018-05-14 19:13:22 -0700181 // pre setup part which will clean up and checkout to corresponding branch.
182
Devin Lim431408d2018-03-23 17:51:31 -0700183 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700184 if ( !isManual ){
Devin Lim431408d2018-03-23 17:51:31 -0700185 result = '''echo -e "\n##### Set TestON Branch #####"
186 echo "TestON Branch is set on: ''' + test_branch + '''"
187 cd ~/OnosSystemTest/
188 git checkout HEAD~1 # Make sure you aren't pn a branch
189 git branch | grep -v "detached from" | xargs git branch -d # delete all local branches merged with remote
Jon Hall6af749d2018-05-29 12:59:47 -0700190 git branch -D ''' + test_branch + ''' # just in case there are local changes. This will normally result in a branch not found error
Devin Lim431408d2018-03-23 17:51:31 -0700191 git clean -df # clean any local files
192 git fetch --all # update all caches from remotes
Jon Hall6af749d2018-05-29 12:59:47 -0700193 git reset --hard origin/''' + test_branch + ''' # force local index to match remote branch
Devin Lim431408d2018-03-23 17:51:31 -0700194 git clean -df # clean any local files
195 git checkout ''' + test_branch + ''' #create new local branch
196 git branch
197 git log -1 --decorate
198 echo -e "\n##### Set ONOS Branch #####"
199 echo "ONOS Branch is set on: ''' + onos_branch + '''"
200 echo -e "\n #### check karaf version ######"
201 env |grep karaf
202 cd ~/onos
Devin Lim431408d2018-03-23 17:51:31 -0700203 git checkout HEAD~1 # Make sure you aren't pn a branch
204 git branch | grep -v "detached from" | xargs git branch -d # delete all local branches merged with remote
205 git branch -D ''' + onos_branch + ''' # just incase there are local changes. This will normally result in a branch not found error
206 git clean -df # clean any local files
207 git fetch --all # update all caches from remotes
208 git reset --hard origin/''' + onos_branch + ''' # force local index to match remote branch
209 git clean -df # clean any local files
Jon Hall5b056262018-09-25 11:44:41 -0700210 rm -rf buck-out
211 rm -rf bazel-*
Devin Lim431408d2018-03-23 17:51:31 -0700212 ''' + tagCheck( onos_tag, onos_branch ) + '''
213 git branch
214 git log -1 --decorate
215 echo -e "\n##### set jvm heap size to 8G #####"
216 echo ${ONOSJVMHeap}
217 inserted_line="export JAVA_OPTS=\"\${ONOSJVMHeap}\""
218 sed -i "s/bash/bash\\n$inserted_line/" ~/onos/tools/package/bin/onos-service
219 echo "##### Check onos-service setting..... #####"
220 cat ~/onos/tools/package/bin/onos-service
221 export JAVA_HOME=/usr/lib/jvm/java-8-oracle'''
222 }
223 return result
224}
Jon Hall6af749d2018-05-29 12:59:47 -0700225
Devin Lim431408d2018-03-23 17:51:31 -0700226def oldFlowCheck( jobOn, onos_branch ){
Devin Limf5175192018-05-14 19:13:22 -0700227 // part that will check if it is oldFlow. If so, it will switch to use old flow. Only affected with SCPF.
228
Devin Lim431408d2018-03-23 17:51:31 -0700229 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700230 if ( jobOn == "SCPF" && ( onos_branch == "master" || onos_branch == "onos-1.12" ) )
Devin Lim431408d2018-03-23 17:51:31 -0700231 result = '''sed -i -e 's/@Component(immediate = true)/@Component(enabled = false)/g' ~/onos/core/store/dist/src/main/java/org/onosproject/store/flow/impl/''' + ( isOldFlow ? "DistributedFlowRuleStore" : "ECFlowRuleStore" ) + '''.java
232 sed -i -e 's/@Component(enabled = false)/@Component(immediate = true)/g' ~/onos/core/store/dist/src/main/java/org/onosproject/store/flow/impl/''' + ( isOldFlow ? "ECFlowRuleStore" : "DistributedFlowRuleStore" ) + ".java"
233 return result
234}
Jon Hall6af749d2018-05-29 12:59:47 -0700235
Devin Lim431408d2018-03-23 17:51:31 -0700236def postSetup( onos_branch, test_branch, onos_tag, isManual ){
Jon Hall3e6edb32018-08-21 16:20:30 -0700237 // setup that will build ONOS
Devin Limf5175192018-05-14 19:13:22 -0700238
Devin Lim431408d2018-03-23 17:51:31 -0700239 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700240 if ( !isManual ){
Devin Lim431408d2018-03-23 17:51:31 -0700241 result = '''echo -e "\n##### build ONOS skip unit tests ######"
Jon Hall3e6edb32018-08-21 16:20:30 -0700242 cd ~/onos
243 . tools/dev/bash_profile
244 op
Devin Lim431408d2018-03-23 17:51:31 -0700245 sleep 30
246 echo -e "\n##### Stop all running instances of Karaf #####"
247 kill $(ps -efw | grep karaf | grep -v grep | awk '{print $2}')
248 sleep 30
Devin Lim2d7371a2018-05-08 18:02:05 -0700249 git branch
Devin Lim2d7371a2018-05-08 18:02:05 -0700250 '''
Devin Lim431408d2018-03-23 17:51:31 -0700251 }
252 return result
253}
Jon Hall6af749d2018-05-29 12:59:47 -0700254
Devin Lim90b6a592018-05-09 13:20:33 -0700255def generateKey(){
Devin Limf5175192018-05-14 19:13:22 -0700256 // generate cluster-key of the onos
257
Jon Hall6af749d2018-05-29 12:59:47 -0700258 try {
Devin Lim018203a2018-05-09 11:33:20 -0700259 sh '''
260 #!/bin/bash -l
261 set +e
262 . ~/.bashrc
263 env
Devin Lim90b6a592018-05-09 13:20:33 -0700264 onos-push-bits-through-proxy
265 onos-gen-cluster-key -f
Devin Lim018203a2018-05-09 11:33:20 -0700266 '''
Jon Hall6af749d2018-05-29 12:59:47 -0700267 } catch ( all ){
268 }
Devin Lim018203a2018-05-09 11:33:20 -0700269}
Devin Lim431408d2018-03-23 17:51:31 -0700270
Jon Hall6af749d2018-05-29 12:59:47 -0700271return this