blob: 9ee512cde0ad64e6d47328584fa334cb52458264 [file] [log] [blame]
Jeremy Ronquillob27ce4c2017-07-17 12:41:28 -07001"""
2Copyright 2016 Open Networking Foundation (ONF)
3
4Please refer questions to either the onos test mailing list at <onos-test@onosproject.org>,
5the System Testing Plans and Results wiki page at <https://wiki.onosproject.org/x/voMg>,
6or 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
YPZhangcb86c5b2016-01-27 17:38:12 -080022import sys
23import json
24import time
25import os
26'''
27SCPFscalingMaxIntents
28Push test Intents to onos
29CASE10: set up Null Provider
30CASE11: set up Open Flows
YPZhang14a4aa92016-07-15 13:37:15 -070031Check flows number, if flows number is not as except, finished this test iteration
YPZhangcb86c5b2016-01-27 17:38:12 -080032Scale up when reach the Limited
33Start from 1 nodes, 8 devices. Then Scale up to 3,5,7 nodes
YPZhangcb86c5b2016-01-27 17:38:12 -080034'''
35class SCPFscalingMaxIntents:
36 def __init__( self ):
37 self.default = ''
38
Devin Lim142b5342017-07-20 15:22:39 -070039 def CASE0( self, main ):
YPZhangcb86c5b2016-01-27 17:38:12 -080040 import sys
41 import json
42 import time
43 import os
44 import imp
Devin Lim58046fa2017-07-05 16:55:00 -070045 try:
46 from tests.dependencies.ONOSSetup import ONOSSetup
47 main.testSetUp = ONOSSetup()
48 except ImportError:
49 main.log.error( "ONOSSetup not found. exiting the test" )
Devin Lim44075962017-08-11 10:56:37 -070050 main.cleanAndExit()
Devin Lim58046fa2017-07-05 16:55:00 -070051 main.testSetUp.envSetupDescription()
52 stepResult = main.FALSE
53 try:
54 # Test variables
55 main.dependencyPath = main.testOnDirectory + \
56 main.params[ 'DEPENDENCY' ][ 'path' ]
57 main.cellName = main.params[ 'ENV' ][ 'cellName' ]
58 main.apps = main.params[ 'ENV' ][ 'cellApps' ]
59 main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
60 main.scale = ( main.params[ 'SCALE' ] ).split( "," )
61 main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
62 main.timeout = int( main.params[ 'SLEEP' ][ 'timeout' ] )
63 main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
64 main.installSleep = int( main.params[ 'SLEEP' ][ 'install' ] )
65 main.verifySleep = int( main.params[ 'SLEEP' ][ 'verify' ] )
66 main.rerouteSleep = int ( main.params[ 'SLEEP' ][ 'reroute' ] )
Devin Lim142b5342017-07-20 15:22:39 -070067 main.intentConfigRegiCfg = main.params[ 'CFG' ][ 'intentConfigRegi' ]
68 main.nullProviderCfg = main.params[ 'CFG' ][ 'nullProvider' ]
69 main.linkCollectionIntentCfg = main.params[ 'CFG' ][ 'linkCollectionIntent' ]
Devin Lim58046fa2017-07-05 16:55:00 -070070 main.verifyAttempts = int( main.params[ 'ATTEMPTS' ][ 'verify' ] )
71 main.ingress = main.params[ 'LINK' ][ 'ingress' ]
72 main.egress = main.params[ 'LINK' ][ 'egress' ]
73 main.reroute = main.params[ 'reroute' ]
74 main.flowObj = main.params[ 'TEST' ][ 'flowObj' ]
75 if main.flowObj == "True":
76 main.flowObj = True
77 main.dbFileName = main.params[ 'DATABASE' ][ 'dbFlowObj' ]
78 else:
79 main.flowObj = False
80 main.dbFileName = main.params[ 'DATABASE' ][ 'dbName' ]
81 main.threadID = 0
YPZhangcb86c5b2016-01-27 17:38:12 -080082
Devin Lim58046fa2017-07-05 16:55:00 -070083 if main.reroute == "True":
84 main.reroute = True
85 else:
86 main.reroute = False
87 main.setupSkipped = False
YPZhangcb86c5b2016-01-27 17:38:12 -080088
Devin Lim58046fa2017-07-05 16:55:00 -070089 wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
Devin Lim87e12c42017-07-20 13:53:04 -070090 main.nic = main.params[ 'DATABASE' ][ 'nic' ]
Devin Lim58046fa2017-07-05 16:55:00 -070091 node = main.params[ 'DATABASE' ][ 'node' ]
Devin Lim142b5342017-07-20 15:22:39 -070092 stepResult = main.testSetUp.envSetup()
Devin Lim58046fa2017-07-05 16:55:00 -070093 main.log.info( "Cresting DB file" )
94 with open( main.dbFileName, "w+" ) as dbFile:
Devin Lim142b5342017-07-20 15:22:39 -070095 dbFile.write( "" )
Devin Lim58046fa2017-07-05 16:55:00 -070096 except Exception as e:
97 main.testSetUp.envSetupException( e )
98 main.testSetUp.evnSetupConclusion( stepResult )
99 main.commit = main.commit.split( " " )[ 1 ]
Devin Lim58046fa2017-07-05 16:55:00 -0700100 def CASE1( self ):
YPZhangcb86c5b2016-01-27 17:38:12 -0800101 copyResult = main.ONOSbench.copyMininetFile( main.topology,
102 main.dependencyPath,
103 main.Mininet1.user_name,
104 main.Mininet1.ip_address )
105
YPZhangcb86c5b2016-01-27 17:38:12 -0800106 def CASE2( self, main ):
107 """
108 - Uninstall ONOS cluster
109 - Verify ONOS start up
110 - Install ONOS cluster
111 - Connect to cli
112 """
Devin Lim142b5342017-07-20 15:22:39 -0700113 main.testSetUp.ONOSSetUp( main.Mininet1, main.Cluster, True,
114 killRemoveMax=False )
YPZhangcb86c5b2016-01-27 17:38:12 -0800115
116 def CASE10( self, main ):
117 """
118 Setting up null-provider
119 """
120 import json
121 # Activate apps
Devin Lim142b5342017-07-20 15:22:39 -0700122 main.step( "Activating null-provider" )
123 appStatus = utilities.retry( main.Cluster.active( 0 ).CLI.activateApp,
YPZhangcb86c5b2016-01-27 17:38:12 -0800124 main.FALSE,
Devin Lim58046fa2017-07-05 16:55:00 -0700125 [ 'org.onosproject.null' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800126 sleep=main.verifySleep,
127 attempts=main.verifyAttempts )
128 utilities.assert_equals( expect=main.TRUE,
129 actual=appStatus,
130 onpass="Successfully activated null-provider",
131 onfail="Failed activate null-provider" )
132
133 # Setup the null-provider
Devin Lim142b5342017-07-20 15:22:39 -0700134 main.step( "Configuring null-provider" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800135 cfgStatus = utilities.retry( main.ONOSbench.onosCfgSet,
136 main.FALSE,
Devin Lim142b5342017-07-20 15:22:39 -0700137 [ main.Cluster.active( 0 ).ipAddress,
138 main.nullProviderCfg, 'deviceCount 8' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800139 sleep=main.verifySleep,
140 attempts = main.verifyAttempts )
141 cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
142 main.FALSE,
Devin Lim142b5342017-07-20 15:22:39 -0700143 [ main.Cluster.active( 0 ).ipAddress,
144 main.nullProviderCfg, 'topoShape reroute' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800145 sleep=main.verifySleep,
146 attempts = main.verifyAttempts )
147
148 cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
149 main.FALSE,
Devin Lim142b5342017-07-20 15:22:39 -0700150 [ main.Cluster.active( 0 ).ipAddress,
151 main.nullProviderCfg, 'enabled true' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800152 sleep=main.verifySleep,
153 attempts = main.verifyAttempts )
154
155
156 utilities.assert_equals( expect=main.TRUE,
157 actual=cfgStatus,
158 onpass="Successfully configured null-provider",
159 onfail="Failed to configure null-provider" )
160
161 # give onos some time to settle
Devin Lim142b5342017-07-20 15:22:39 -0700162 time.sleep( main.startUpSleep )
YPZhangcb86c5b2016-01-27 17:38:12 -0800163
Devin Lim142b5342017-07-20 15:22:39 -0700164 main.log.info( "Setting default flows to zero" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800165 main.defaultFlows = 0
166
Devin Lim142b5342017-07-20 15:22:39 -0700167 main.step( "Check status of null-provider setup" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800168 caseResult = appStatus and cfgStatus
169 utilities.assert_equals( expect=main.TRUE,
170 actual=caseResult,
171 onpass="Setting up null-provider was successfull",
172 onfail="Failed to setup null-provider" )
173
174 # This tells the following cases if we are using the null-provider or ovs
175 main.switchType = "null:"
176
177 # If the null-provider setup was unsuccessfull, then there is no point to
178 # run the subsequent cases
179
Devin Lim142b5342017-07-20 15:22:39 -0700180 time.sleep( main.startUpSleep )
YPZhangcb86c5b2016-01-27 17:38:12 -0800181 main.step( "Balancing Masters" )
182
183 stepResult = main.FALSE
Devin Lim142b5342017-07-20 15:22:39 -0700184 stepResult = utilities.retry( main.Cluster.active( 0 ).CLI.balanceMasters,
YPZhangcb86c5b2016-01-27 17:38:12 -0800185 main.FALSE,
186 [],
187 sleep=3,
188 attempts=3 )
189
190 utilities.assert_equals( expect=main.TRUE,
191 actual=stepResult,
192 onpass="Balance masters was successfull",
Devin Lim142b5342017-07-20 15:22:39 -0700193 onfail="Failed to balance masters" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800194
195 time.sleep( 5 )
196 if not caseResult:
197 main.setupSkipped = True
198
Devin Lim142b5342017-07-20 15:22:39 -0700199 def CASE11( self, main ):
YPZhangcb86c5b2016-01-27 17:38:12 -0800200 '''
201 Setting up mininet
202 '''
203 import json
204 import time
YPZhangebf9eb52016-05-12 15:20:24 -0700205 devices = []
Devin Lim142b5342017-07-20 15:22:39 -0700206 devices = main.Cluster.active( 0 ).CLI.getAllDevicesId()
YPZhangebf9eb52016-05-12 15:20:24 -0700207 for d in devices:
Devin Lim142b5342017-07-20 15:22:39 -0700208 main.Cluster.active( 0 ).CLI.deviceRemove( d )
YPZhangcb86c5b2016-01-27 17:38:12 -0800209
Devin Lim142b5342017-07-20 15:22:39 -0700210 time.sleep( main.startUpSleep )
YPZhange6ef82a2016-07-05 16:48:15 -0700211 if main.flowObj:
Devin Lim142b5342017-07-20 15:22:39 -0700212 main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg,
213 "useFlowObjectives", value="true" )
214 main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg,
You Wang106d0fa2017-05-15 17:22:15 -0700215 "defaultFlowObjectiveCompiler",
Devin Lim142b5342017-07-20 15:22:39 -0700216 value=main.linkCollectionIntentCfg )
217 main.step( 'Starting mininet topology' )
218 mnStatus = main.Mininet1.startNet( topoFile='~/mininet/custom/rerouteTopo.py' )
YPZhangcb86c5b2016-01-27 17:38:12 -0800219 utilities.assert_equals( expect=main.TRUE,
220 actual=mnStatus,
221 onpass="Successfully started Mininet",
222 onfail="Failed to activate Mininet" )
223
Devin Lim142b5342017-07-20 15:22:39 -0700224 main.step( "Assinging masters to switches" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800225 switches = main.Mininet1.getSwitches()
Devin Lim142b5342017-07-20 15:22:39 -0700226 swStatus = main.Mininet1.assignSwController( sw=switches.keys(), ip=main.Cluster.getIps() )
YPZhangcb86c5b2016-01-27 17:38:12 -0800227 utilities.assert_equals( expect=main.TRUE,
228 actual=swStatus,
229 onpass="Successfully assigned switches to masters",
230 onfail="Failed assign switches to masters" )
231
Devin Lim142b5342017-07-20 15:22:39 -0700232 time.sleep( main.startUpSleep )
YPZhangebf9eb52016-05-12 15:20:24 -0700233 # Balancing Masters
234 main.step( "Balancing Masters" )
235 stepResult = main.FALSE
Devin Lim142b5342017-07-20 15:22:39 -0700236 stepResult = utilities.retry( main.Cluster.active( 0 ).CLI.balanceMasters,
YPZhangebf9eb52016-05-12 15:20:24 -0700237 main.FALSE,
238 [],
239 sleep=3,
240 attempts=3 )
241
242 utilities.assert_equals( expect=main.TRUE,
243 actual=stepResult,
244 onpass="Balance masters was successfull",
245 onfail="Failed to balance masters" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800246
Devin Lim142b5342017-07-20 15:22:39 -0700247 main.log.info( "Getting default flows" )
248 jsonSum = json.loads( main.Cluster.active( 0 ).CLI.summary() )
249 main.defaultFlows = jsonSum[ "flows" ]
YPZhangcb86c5b2016-01-27 17:38:12 -0800250
Devin Lim142b5342017-07-20 15:22:39 -0700251 main.step( "Check status of Mininet setup" )
YPZhangebf9eb52016-05-12 15:20:24 -0700252 caseResult = mnStatus and swStatus
YPZhangcb86c5b2016-01-27 17:38:12 -0800253 utilities.assert_equals( expect=main.TRUE,
254 actual=caseResult,
255 onpass="Successfully setup Mininet",
256 onfail="Failed setup Mininet" )
257
258 # This tells the following cases if we are using the null-provider or ovs
259 main.switchType = "of:"
260
Devin Lim142b5342017-07-20 15:22:39 -0700261 time.sleep( main.startUpSleep )
YPZhangcb86c5b2016-01-27 17:38:12 -0800262 main.step( "Balancing Masters" )
263
264 stepResult = main.FALSE
Devin Lim142b5342017-07-20 15:22:39 -0700265 stepResult = utilities.retry( main.Cluster.active( 0 ).CLI.balanceMasters,
YPZhangcb86c5b2016-01-27 17:38:12 -0800266 main.FALSE,
267 [],
268 sleep=3,
269 attempts=3 )
270
271 utilities.assert_equals( expect=main.TRUE,
272 actual=stepResult,
273 onpass="Balance masters was successfull",
Devin Lim142b5342017-07-20 15:22:39 -0700274 onfail="Failed to balance masters" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800275
Devin Lim142b5342017-07-20 15:22:39 -0700276 time.sleep( 5 )
YPZhangcb86c5b2016-01-27 17:38:12 -0800277 if not caseResult:
278 main.setupSkipped = True
279
280
281
282 def CASE20( self, main ):
Devin Lim58046fa2017-07-05 16:55:00 -0700283 try:
284 from tests.dependencies.utils import Utils
285 except ImportError:
286 main.log.error( "Utils not found exiting the test" )
Devin Lim44075962017-08-11 10:56:37 -0700287 main.cleanAndExit()
Devin Lim58046fa2017-07-05 16:55:00 -0700288 try:
289 main.Utils
290 except ( NameError, AttributeError ):
291 main.Utils = Utils()
YPZhangcb86c5b2016-01-27 17:38:12 -0800292 if main.reroute:
Devin Lim142b5342017-07-20 15:22:39 -0700293 main.minIntents = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'min_intents' ] )
294 main.maxIntents = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'max_intents' ] )
295 main.checkInterval = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'check_interval' ] )
296 main.batchSize = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'batch_size' ] )
YPZhangcb86c5b2016-01-27 17:38:12 -0800297 else:
Devin Lim142b5342017-07-20 15:22:39 -0700298 main.minIntents = int( main.params[ 'NULL' ][ 'PUSH' ][ 'min_intents' ] )
299 main.maxIntents = int( main.params[ 'NULL' ][ 'PUSH' ][ 'max_intents' ] )
300 main.checkInterval = int( main.params[ 'NULL' ][ 'PUSH' ][ 'check_interval' ] )
301 main.batchSize = int( main.params[ 'NULL' ][ 'PUSH' ][ 'batch_size' ] )
YPZhangcb86c5b2016-01-27 17:38:12 -0800302
303 # check if the case needs to be skipped
304 if main.setupSkipped:
305 main.setupSkipped = False
306 main.skipCase()
307
308 # the index where the next intents will be installed
309 offfset = 0
310 # keeps track of how many intents have been installed
311 currIntents = 0
YPZhang3097ba92016-02-16 17:32:32 -0800312 # keeps track of how many flows have been installed, set to 0 at start
313 currFlows = 0
YPZhangcb86c5b2016-01-27 17:38:12 -0800314 # limit for the number of intents that can be installed
Devin Lim142b5342017-07-20 15:22:39 -0700315 main.batchSize = int( int( main.batchSize ) / main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800316 limit = main.maxIntents / main.batchSize
317 # total intents installed
318 totalIntents = 0
319
320 intentsState = None
321
322 offtmp = 0
323 main.step( "Pushing intents" )
324 stepResult = main.TRUE
YPZhang47779c22016-03-07 13:03:07 -0800325 # temp variable to contain the number of flows
326 flowsNum = 0
Devin Lim142b5342017-07-20 15:22:39 -0700327 if main.Cluster.numCtrls > 1:
YPZhangebf9eb52016-05-12 15:20:24 -0700328 # if more than one onos nodes, we should check more frequently
Devin Lim142b5342017-07-20 15:22:39 -0700329 main.checkInterval = main.checkInterval / 4
YPZhangcb86c5b2016-01-27 17:38:12 -0800330
YPZhangebf9eb52016-05-12 15:20:24 -0700331 # make sure the checkInterval divisible batchSize
332 main.checkInterval = int( int( main.checkInterval / main.batchSize ) * main.batchSize )
YPZhangac53ebf2016-05-13 16:26:19 -0700333 flowTemp=0
YPZhang14a4aa92016-07-15 13:37:15 -0700334 intentVerifyTemp = 0
YPZhangac53ebf2016-05-13 16:26:19 -0700335 totalFlows=0
Devin Lim142b5342017-07-20 15:22:39 -0700336 for i in range( limit ):
YPZhangcb86c5b2016-01-27 17:38:12 -0800337
338 # Threads pool
339 pool = []
340
Devin Lim142b5342017-07-20 15:22:39 -0700341 for j in range( main.Cluster.numCtrls ):
342 if main.Cluster.numCtrls > 1:
YPZhangcb86c5b2016-01-27 17:38:12 -0800343 time.sleep( 1 )
344 offtmp = offfset + main.maxIntents * j
345 # Push intents by using threads
Devin Lim142b5342017-07-20 15:22:39 -0700346 t = main.Thread( target=main.Cluster.active( j ).CLI.pushTestIntents,
YPZhangcb86c5b2016-01-27 17:38:12 -0800347 threadID=main.threadID,
348 name="Push-Test-Intents",
349 args=[ main.switchType + main.ingress,
350 main.switchType + main.egress,
351 main.batchSize ],
352 kwargs={ "offset": offtmp,
353 "options": "-i",
354 "timeout": main.timeout,
YPZhangebf9eb52016-05-12 15:20:24 -0700355 "background":False,
Devin Lim142b5342017-07-20 15:22:39 -0700356 "noExit":True } )
357 pool.append( t )
YPZhangcb86c5b2016-01-27 17:38:12 -0800358 t.start()
359 main.threadID = main.threadID + 1
360 for t in pool:
361 t.join()
362 stepResult = stepResult and t.result
363 offfset = offfset + main.batchSize
364
Devin Lim142b5342017-07-20 15:22:39 -0700365 totalIntents = main.batchSize * main.Cluster.numCtrls + totalIntents
YPZhangcb86c5b2016-01-27 17:38:12 -0800366 if totalIntents >= main.minIntents and totalIntents % main.checkInterval == 0:
367 # if reach to minimum number and check interval, verify Intetns and flows
Devin Lim142b5342017-07-20 15:22:39 -0700368 time.sleep( main.verifySleep * main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800369
Devin Lim142b5342017-07-20 15:22:39 -0700370 main.log.info( "Verify Intents states" )
YPZhang3097ba92016-02-16 17:32:32 -0800371 # k is a control variable for verify retry attempts
YPZhangcb86c5b2016-01-27 17:38:12 -0800372 k = 1
YPZhang3097ba92016-02-16 17:32:32 -0800373 while k <= main.verifyAttempts:
YPZhang14a4aa92016-07-15 13:37:15 -0700374 # while loop for check intents by using CLI driver
Devin Lim142b5342017-07-20 15:22:39 -0700375 time.sleep( 5 )
376 intentsState = main.Cluster.active( 0 ).CLI.checkIntentSummary( timeout=600, noExit=True )
YPZhangebf9eb52016-05-12 15:20:24 -0700377 if intentsState:
Devin Lim142b5342017-07-20 15:22:39 -0700378 verifyTotalIntents = main.Cluster.active( 0 ).CLI.getTotalIntentsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700379 if intentVerifyTemp < verifyTotalIntents:
380 intentVerifyTemp = verifyTotalIntents
YPZhangebf9eb52016-05-12 15:20:24 -0700381 else:
YPZhang14a4aa92016-07-15 13:37:15 -0700382 verifyTotalIntents = intentVerifyTemp
YPZhang6e758fb2016-07-26 09:20:55 -0700383 intentsState = False
Devin Lim142b5342017-07-20 15:22:39 -0700384 main.log.info( "Total Installed Intents: {}".format( verifyTotalIntents ) )
YPZhangcb86c5b2016-01-27 17:38:12 -0800385 break
Devin Lim142b5342017-07-20 15:22:39 -0700386 k = k + 1
YPZhangac53ebf2016-05-13 16:26:19 -0700387
YPZhang14a4aa92016-07-15 13:37:15 -0700388 k = 1
389 flowVerify = True
390 while k <= main.verifyAttempts:
Devin Lim142b5342017-07-20 15:22:39 -0700391 time.sleep( 5 )
392 totalFlows = main.Cluster.active( 0 ).CLI.getTotalFlowsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700393 expectFlows = totalIntents * 7 + main.defaultFlows
394 if totalFlows == expectFlows:
Devin Lim142b5342017-07-20 15:22:39 -0700395 main.log.info( "Total Flows Added: {}".format( totalFlows ) )
YPZhang14a4aa92016-07-15 13:37:15 -0700396 break
397 else:
Devin Lim142b5342017-07-20 15:22:39 -0700398 main.log.info( "Some Flows are not added, retry..." )
399 main.log.info( "Total Flows Added: {} Expect Flows: {}".format( totalFlows, expectFlows ) )
YPZhang14a4aa92016-07-15 13:37:15 -0700400 flowVerify = False
YPZhangac53ebf2016-05-13 16:26:19 -0700401
YPZhang14a4aa92016-07-15 13:37:15 -0700402 k += 1
403 if flowTemp < totalFlows:
404 flowTemp = totalFlows
405 else:
406 totalFlows = flowTemp
407
408 if not intentsState or not flowVerify:
YPZhanga4acbb82016-03-02 17:28:25 -0800409 # If some intents are not installed, grep the previous flows list, and finished this test case
YPZhang14a4aa92016-07-15 13:37:15 -0700410 main.log.warn( "Intents or flows are not installed" )
Devin Lim142b5342017-07-20 15:22:39 -0700411 verifyTotalIntents = main.Cluster.active( 0 ).CLI.getTotalIntentsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700412 if intentVerifyTemp < verifyTotalIntents:
413 intentVerifyTemp = verifyTotalIntents
414 else:
415 verifyTotalIntents = intentVerifyTemp
416 if flowTemp < totalFlows:
417 flowTemp = totalFlows
418 else:
419 totalFlows = flowTemp
Devin Lim142b5342017-07-20 15:22:39 -0700420 main.log.info( "Total Intents: {}".format( verifyTotalIntents ) )
YPZhangcb86c5b2016-01-27 17:38:12 -0800421 break
YPZhange96a3062016-05-12 16:18:35 -0700422
YPZhangcb86c5b2016-01-27 17:38:12 -0800423 utilities.assert_equals( expect = main.TRUE,
YPZhangebf9eb52016-05-12 15:20:24 -0700424 actual = intentsState,
YPZhangcb86c5b2016-01-27 17:38:12 -0800425 onpass = "Successfully pushed and verified intents",
426 onfail = "Failed to push and verify intents" )
427
YPZhangcb86c5b2016-01-27 17:38:12 -0800428 main.log.info( "Total Intents Installed before crash: {}".format( totalIntents ) )
429 main.log.info( "Total Flows ADDED before crash: {}".format( totalFlows ) )
430
Devin Lim58046fa2017-07-05 16:55:00 -0700431 main.Utils.mininetCleanup( main.Mininet1 )
432
Devin Lim142b5342017-07-20 15:22:39 -0700433 main.log.info( "Writing results to DS file" )
434 with open( main.dbFileName, "a" ) as dbFile:
YPZhangcb86c5b2016-01-27 17:38:12 -0800435 # Scale number
Devin Lim87e12c42017-07-20 13:53:04 -0700436 temp = "'" + main.commit + "',"
437 temp += "'" + main.nic + "',"
Devin Lim142b5342017-07-20 15:22:39 -0700438 temp += str( main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800439 temp += ",'" + "baremetal1" + "'"
440 # how many intents we installed before crash
Devin Lim142b5342017-07-20 15:22:39 -0700441 temp += "," + str( verifyTotalIntents )
YPZhangcb86c5b2016-01-27 17:38:12 -0800442 # how many flows we installed before crash
Devin Lim142b5342017-07-20 15:22:39 -0700443 temp += "," + str( totalFlows )
YPZhangcb86c5b2016-01-27 17:38:12 -0800444 # other columns in database, but we didn't use in this test
445 temp += "," + "0,0,0,0,0,0"
446 temp += "\n"
447 dbFile.write( temp )