blob: d3faeed8ba92bd7f57ce5e05ea9f39511c60be3d [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
Devin Lim431408d2018-03-23 17:51:31 -0700103 println jobOn + "-pipeline-" + manuallyRun ? "manually" : branch
Devin Lim6c77b7c2018-04-06 19:36:56 -0700104 def wiki = branch
You Wang79527502018-08-02 12:18:20 -0700105 onos_branch = funcs.branchWithPrefix( branch )
You Wangfe3877b2018-08-02 11:48:35 -0700106 test_branch = funcs.testBranchWithPrefix( branch )
Jon Hall6af749d2018-05-29 12:59:47 -0700107 node( "TestStation-" + nodeName + "s" ) {
You Wang79527502018-08-02 12:18:20 -0700108 envSetup( onos_branch, test_branch, onosTag, jobOn, manuallyRun )
109 exportEnvProperty( onos_branch, test_branch, wiki, tests, post_result, manuallyRun, onosTag, isOldFlow )
Devin Lim431408d2018-03-23 17:51:31 -0700110 }
111
112 jobToRun = jobOn + "-pipeline-" + ( manuallyRun ? "manually" : wiki )
113 build job: jobToRun, propagate: false
114}
Jon Hall6af749d2018-05-29 12:59:47 -0700115
Devin Lim431408d2018-03-23 17:51:31 -0700116def trigger_pipeline( branch, tests, nodeName, jobOn, manuallyRun, onosTag ){
Devin Limf5175192018-05-14 19:13:22 -0700117 // nodeName : "BM" or "VM"
118 // jobOn : "SCPF" or "USECASE" or "FUNC" or "HA"
119 // this will return the function by wrapping them up with return{} to prevent them to be
120 // executed once this function is called to assign to specific variable.
Jon Hall6af749d2018-05-29 12:59:47 -0700121 return {
Devin Lim5b22fbb2018-04-06 15:30:45 -0700122 trigger( branch, tests, nodeName, jobOn, manuallyRun, onosTag )
Devin Lim431408d2018-03-23 17:51:31 -0700123 }
124}
Jon Hall6af749d2018-05-29 12:59:47 -0700125
Devin Lim431408d2018-03-23 17:51:31 -0700126// export Environment properties.
127def exportEnvProperty( onos_branch, test_branch, wiki, tests, postResult, manually_run, onosTag, isOldFlow ){
Devin Limf5175192018-05-14 19:13:22 -0700128 // export environment properties to the machine.
129
Jon Hall6af749d2018-05-29 12:59:47 -0700130 stage( "export Property" ) {
Devin Lim431408d2018-03-23 17:51:31 -0700131 sh '''
Jon Hall6af749d2018-05-29 12:59:47 -0700132 echo "ONOSBranch=''' + onos_branch + '''" > /var/jenkins/TestONOS.property
133 echo "TestONBranch=''' + test_branch + '''" >> /var/jenkins/TestONOS.property
134 echo "ONOSTag=''' + onosTag + '''" >> /var/jenkins/TestONOS.property
135 echo "WikiPrefix=''' + wiki + '''" >> /var/jenkins/TestONOS.property
136 echo "ONOSJVMHeap=''' + env.ONOSJVMHeap + '''" >> /var/jenkins/TestONOS.property
137 echo "Tests=''' + tests + '''" >> /var/jenkins/TestONOS.property
138 echo "postResult=''' + postResult + '''" >> /var/jenkins/TestONOS.property
139 echo "manualRun=''' + manually_run + '''" >> /var/jenkins/TestONOS.property
140 echo "isOldFlow=''' + isOldFlow + '''" >> /var/jenkins/TestONOS.property
Devin Lim431408d2018-03-23 17:51:31 -0700141 '''
142 }
143}
Jon Hall6af749d2018-05-29 12:59:47 -0700144
Devin Lim431408d2018-03-23 17:51:31 -0700145// Initialize the environment Setup for the onos and OnosSystemTest
146def envSetup( onos_branch, test_branch, onos_tag, jobOn, manuallyRun ){
Devin Limf5175192018-05-14 19:13:22 -0700147 // to setup the environment using the bash script
148
Devin Lim431408d2018-03-23 17:51:31 -0700149 stage( "envSetup" ) {
150 // after env: ''' + borrow_mn( jobOn ) + '''
151 sh '''#!/bin/bash -l
152 set +e
153 . ~/.bashrc
154 env
155 ''' + preSetup( onos_branch, test_branch, onos_tag, manuallyRun ) + '''
156 ''' + oldFlowCheck( jobOn, onos_branch ) + '''
157 ''' + postSetup( onos_branch, test_branch, onos_tag, manuallyRun )
Devin Lim90b6a592018-05-09 13:20:33 -0700158 generateKey()
Devin Lim431408d2018-03-23 17:51:31 -0700159 }
160}
Jon Hall6af749d2018-05-29 12:59:47 -0700161
Devin Lim431408d2018-03-23 17:51:31 -0700162def tagCheck( onos_tag, onos_branch ){
Devin Limf5175192018-05-14 19:13:22 -0700163 // check the tag for onos if it is not empty
164
Devin Lim431408d2018-03-23 17:51:31 -0700165 result = "git checkout "
Jon Hall6af749d2018-05-29 12:59:47 -0700166 if ( onos_tag == "" ){
167 //create new local branch
168 result += onos_branch
169 }
170 else {
171 //checkout the tag
172 result += onos_tag
173 }
Devin Lim431408d2018-03-23 17:51:31 -0700174 return result
175}
Jon Hall6af749d2018-05-29 12:59:47 -0700176
Devin Lim431408d2018-03-23 17:51:31 -0700177def preSetup( onos_branch, test_branch, onos_tag, isManual ){
Devin Limf5175192018-05-14 19:13:22 -0700178 // pre setup part which will clean up and checkout to corresponding branch.
179
Devin Lim431408d2018-03-23 17:51:31 -0700180 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700181 if ( !isManual ){
Devin Lim431408d2018-03-23 17:51:31 -0700182 result = '''echo -e "\n##### Set TestON Branch #####"
183 echo "TestON Branch is set on: ''' + test_branch + '''"
184 cd ~/OnosSystemTest/
185 git checkout HEAD~1 # Make sure you aren't pn a branch
186 git branch | grep -v "detached from" | xargs git branch -d # delete all local branches merged with remote
Jon Hall6af749d2018-05-29 12:59:47 -0700187 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 -0700188 git clean -df # clean any local files
189 git fetch --all # update all caches from remotes
Jon Hall6af749d2018-05-29 12:59:47 -0700190 git reset --hard origin/''' + test_branch + ''' # force local index to match remote branch
Devin Lim431408d2018-03-23 17:51:31 -0700191 git clean -df # clean any local files
192 git checkout ''' + test_branch + ''' #create new local branch
193 git branch
194 git log -1 --decorate
195 echo -e "\n##### Set ONOS Branch #####"
196 echo "ONOS Branch is set on: ''' + onos_branch + '''"
197 echo -e "\n #### check karaf version ######"
198 env |grep karaf
199 cd ~/onos
Devin Lim431408d2018-03-23 17:51:31 -0700200 git checkout HEAD~1 # Make sure you aren't pn a branch
201 git branch | grep -v "detached from" | xargs git branch -d # delete all local branches merged with remote
202 git branch -D ''' + onos_branch + ''' # just incase there are local changes. This will normally result in a branch not found error
203 git clean -df # clean any local files
204 git fetch --all # update all caches from remotes
205 git reset --hard origin/''' + onos_branch + ''' # force local index to match remote branch
206 git clean -df # clean any local files
207 ''' + tagCheck( onos_tag, onos_branch ) + '''
208 git branch
209 git log -1 --decorate
210 echo -e "\n##### set jvm heap size to 8G #####"
211 echo ${ONOSJVMHeap}
212 inserted_line="export JAVA_OPTS=\"\${ONOSJVMHeap}\""
213 sed -i "s/bash/bash\\n$inserted_line/" ~/onos/tools/package/bin/onos-service
214 echo "##### Check onos-service setting..... #####"
215 cat ~/onos/tools/package/bin/onos-service
216 export JAVA_HOME=/usr/lib/jvm/java-8-oracle'''
217 }
218 return result
219}
Jon Hall6af749d2018-05-29 12:59:47 -0700220
Devin Lim431408d2018-03-23 17:51:31 -0700221def oldFlowCheck( jobOn, onos_branch ){
Devin Limf5175192018-05-14 19:13:22 -0700222 // part that will check if it is oldFlow. If so, it will switch to use old flow. Only affected with SCPF.
223
Devin Lim431408d2018-03-23 17:51:31 -0700224 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700225 if ( jobOn == "SCPF" && ( onos_branch == "master" || onos_branch == "onos-1.12" ) )
Devin Lim431408d2018-03-23 17:51:31 -0700226 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
227 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"
228 return result
229}
Jon Hall6af749d2018-05-29 12:59:47 -0700230
Devin Lim431408d2018-03-23 17:51:31 -0700231def postSetup( onos_branch, test_branch, onos_tag, isManual ){
Devin Limf5175192018-05-14 19:13:22 -0700232 // setup that will build the onos using buck.
233
Devin Lim431408d2018-03-23 17:51:31 -0700234 result = ""
Jon Hall6af749d2018-05-29 12:59:47 -0700235 if ( !isManual ){
Devin Lim431408d2018-03-23 17:51:31 -0700236 result = '''echo -e "\n##### build ONOS skip unit tests ######"
237 #mvn clean install -DskipTests
238 # Force buck update
239 rm -f ~/onos/bin/buck
240 ~/onos/tools/build/onos-buck build onos
241 sleep 30
242 echo -e "\n##### Stop all running instances of Karaf #####"
243 kill $(ps -efw | grep karaf | grep -v grep | awk '{print $2}')
244 sleep 30
Devin Lim2d7371a2018-05-08 18:02:05 -0700245 git branch
Devin Lim2d7371a2018-05-08 18:02:05 -0700246 '''
Devin Lim431408d2018-03-23 17:51:31 -0700247 }
248 return result
249}
Jon Hall6af749d2018-05-29 12:59:47 -0700250
Devin Lim90b6a592018-05-09 13:20:33 -0700251def generateKey(){
Devin Limf5175192018-05-14 19:13:22 -0700252 // generate cluster-key of the onos
253
Jon Hall6af749d2018-05-29 12:59:47 -0700254 try {
Devin Lim018203a2018-05-09 11:33:20 -0700255 sh '''
256 #!/bin/bash -l
257 set +e
258 . ~/.bashrc
259 env
Devin Lim90b6a592018-05-09 13:20:33 -0700260 onos-push-bits-through-proxy
261 onos-gen-cluster-key -f
Devin Lim018203a2018-05-09 11:33:20 -0700262 '''
Jon Hall6af749d2018-05-29 12:59:47 -0700263 } catch ( all ){
264 }
Devin Lim018203a2018-05-09 11:33:20 -0700265}
Devin Lim431408d2018-03-23 17:51:31 -0700266
Jon Hall6af749d2018-05-29 12:59:47 -0700267return this