blob: 1633c44037535b7fa603d30265052ff88197fc28 [file] [log] [blame]
Jeremy Ronquillob27ce4c2017-07-17 12:41:28 -07001"""
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -07002Copyright 2016 Open Networking Foundation ( ONF )
Jeremy Ronquillob27ce4c2017-07-17 12:41:28 -07003
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
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -070011 ( at your option ) any later version.
Jeremy Ronquillob27ce4c2017-07-17 12:41:28 -070012
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"""
YPZhangcb86c5b2016-01-27 17:38:12 -080021import sys
22import json
23import time
24import os
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -070025"""
YPZhangcb86c5b2016-01-27 17:38:12 -080026SCPFscalingMaxIntents
27Push test Intents to onos
28CASE10: set up Null Provider
29CASE11: set up Open Flows
YPZhang14a4aa92016-07-15 13:37:15 -070030Check flows number, if flows number is not as except, finished this test iteration
YPZhangcb86c5b2016-01-27 17:38:12 -080031Scale up when reach the Limited
32Start from 1 nodes, 8 devices. Then Scale up to 3,5,7 nodes
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -070033"""
YPZhangcb86c5b2016-01-27 17:38:12 -080034class SCPFscalingMaxIntents:
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -070035
YPZhangcb86c5b2016-01-27 17:38:12 -080036 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' ] )
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -070066 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 ]
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700100
Devin Lim58046fa2017-07-05 16:55:00 -0700101 def CASE1( self ):
YPZhangcb86c5b2016-01-27 17:38:12 -0800102 copyResult = main.ONOSbench.copyMininetFile( main.topology,
103 main.dependencyPath,
104 main.Mininet1.user_name,
105 main.Mininet1.ip_address )
106
YPZhangcb86c5b2016-01-27 17:38:12 -0800107 def CASE2( self, main ):
108 """
109 - Uninstall ONOS cluster
110 - Verify ONOS start up
111 - Install ONOS cluster
112 - Connect to cli
113 """
Devin Lim142b5342017-07-20 15:22:39 -0700114 main.testSetUp.ONOSSetUp( main.Mininet1, main.Cluster, True,
115 killRemoveMax=False )
YPZhangcb86c5b2016-01-27 17:38:12 -0800116
117 def CASE10( self, main ):
118 """
119 Setting up null-provider
120 """
121 import json
122 # Activate apps
Devin Lim142b5342017-07-20 15:22:39 -0700123 main.step( "Activating null-provider" )
124 appStatus = utilities.retry( main.Cluster.active( 0 ).CLI.activateApp,
YPZhangcb86c5b2016-01-27 17:38:12 -0800125 main.FALSE,
Devin Lim58046fa2017-07-05 16:55:00 -0700126 [ 'org.onosproject.null' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800127 sleep=main.verifySleep,
128 attempts=main.verifyAttempts )
129 utilities.assert_equals( expect=main.TRUE,
130 actual=appStatus,
131 onpass="Successfully activated null-provider",
132 onfail="Failed activate null-provider" )
133
134 # Setup the null-provider
Devin Lim142b5342017-07-20 15:22:39 -0700135 main.step( "Configuring null-provider" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800136 cfgStatus = utilities.retry( main.ONOSbench.onosCfgSet,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700137 main.FALSE,
138 [ main.Cluster.active( 0 ).ipAddress,
139 main.nullProviderCfg, 'deviceCount 8' ],
140 sleep=main.verifySleep,
141 attempts=main.verifyAttempts )
YPZhangcb86c5b2016-01-27 17:38:12 -0800142 cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
143 main.FALSE,
Devin Lim142b5342017-07-20 15:22:39 -0700144 [ main.Cluster.active( 0 ).ipAddress,
145 main.nullProviderCfg, 'topoShape reroute' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800146 sleep=main.verifySleep,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700147 attempts=main.verifyAttempts )
YPZhangcb86c5b2016-01-27 17:38:12 -0800148
149 cfgStatus = cfgStatus and utilities.retry( main.ONOSbench.onosCfgSet,
150 main.FALSE,
Devin Lim142b5342017-07-20 15:22:39 -0700151 [ main.Cluster.active( 0 ).ipAddress,
152 main.nullProviderCfg, 'enabled true' ],
YPZhangcb86c5b2016-01-27 17:38:12 -0800153 sleep=main.verifySleep,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700154 attempts=main.verifyAttempts )
YPZhangcb86c5b2016-01-27 17:38:12 -0800155
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 ):
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700200 """
YPZhangcb86c5b2016-01-27 17:38:12 -0800201 Setting up mininet
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700202 """
YPZhangcb86c5b2016-01-27 17:38:12 -0800203 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,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700213 "useFlowObjectives", value="true" )
Devin Lim142b5342017-07-20 15:22:39 -0700214 main.Cluster.active( 0 ).CLI.setCfg( main.intentConfigRegiCfg,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700215 "defaultFlowObjectiveCompiler",
216 value=main.linkCollectionIntentCfg )
Devin Lim142b5342017-07-20 15:22:39 -0700217 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
YPZhangcb86c5b2016-01-27 17:38:12 -0800280 def CASE20( self, main ):
Devin Lim58046fa2017-07-05 16:55:00 -0700281 try:
282 from tests.dependencies.utils import Utils
283 except ImportError:
284 main.log.error( "Utils not found exiting the test" )
Devin Lim44075962017-08-11 10:56:37 -0700285 main.cleanAndExit()
Devin Lim58046fa2017-07-05 16:55:00 -0700286 try:
287 main.Utils
288 except ( NameError, AttributeError ):
289 main.Utils = Utils()
YPZhangcb86c5b2016-01-27 17:38:12 -0800290 if main.reroute:
Devin Lim142b5342017-07-20 15:22:39 -0700291 main.minIntents = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'min_intents' ] )
292 main.maxIntents = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'max_intents' ] )
293 main.checkInterval = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'check_interval' ] )
294 main.batchSize = int( main.params[ 'NULL' ][ 'REROUTE' ][ 'batch_size' ] )
YPZhangcb86c5b2016-01-27 17:38:12 -0800295 else:
Devin Lim142b5342017-07-20 15:22:39 -0700296 main.minIntents = int( main.params[ 'NULL' ][ 'PUSH' ][ 'min_intents' ] )
297 main.maxIntents = int( main.params[ 'NULL' ][ 'PUSH' ][ 'max_intents' ] )
298 main.checkInterval = int( main.params[ 'NULL' ][ 'PUSH' ][ 'check_interval' ] )
299 main.batchSize = int( main.params[ 'NULL' ][ 'PUSH' ][ 'batch_size' ] )
YPZhangcb86c5b2016-01-27 17:38:12 -0800300
301 # check if the case needs to be skipped
302 if main.setupSkipped:
303 main.setupSkipped = False
304 main.skipCase()
305
306 # the index where the next intents will be installed
307 offfset = 0
308 # keeps track of how many intents have been installed
309 currIntents = 0
YPZhang3097ba92016-02-16 17:32:32 -0800310 # keeps track of how many flows have been installed, set to 0 at start
311 currFlows = 0
YPZhangcb86c5b2016-01-27 17:38:12 -0800312 # limit for the number of intents that can be installed
Devin Lim142b5342017-07-20 15:22:39 -0700313 main.batchSize = int( int( main.batchSize ) / main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800314 limit = main.maxIntents / main.batchSize
315 # total intents installed
316 totalIntents = 0
317
318 intentsState = None
319
320 offtmp = 0
321 main.step( "Pushing intents" )
322 stepResult = main.TRUE
YPZhang47779c22016-03-07 13:03:07 -0800323 # temp variable to contain the number of flows
324 flowsNum = 0
Devin Lim142b5342017-07-20 15:22:39 -0700325 if main.Cluster.numCtrls > 1:
YPZhangebf9eb52016-05-12 15:20:24 -0700326 # if more than one onos nodes, we should check more frequently
Devin Lim142b5342017-07-20 15:22:39 -0700327 main.checkInterval = main.checkInterval / 4
YPZhangcb86c5b2016-01-27 17:38:12 -0800328
YPZhangebf9eb52016-05-12 15:20:24 -0700329 # make sure the checkInterval divisible batchSize
330 main.checkInterval = int( int( main.checkInterval / main.batchSize ) * main.batchSize )
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700331 flowTemp = 0
YPZhang14a4aa92016-07-15 13:37:15 -0700332 intentVerifyTemp = 0
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700333 totalFlows = 0
Devin Lim142b5342017-07-20 15:22:39 -0700334 for i in range( limit ):
YPZhangcb86c5b2016-01-27 17:38:12 -0800335
336 # Threads pool
337 pool = []
338
Devin Lim142b5342017-07-20 15:22:39 -0700339 for j in range( main.Cluster.numCtrls ):
340 if main.Cluster.numCtrls > 1:
YPZhangcb86c5b2016-01-27 17:38:12 -0800341 time.sleep( 1 )
342 offtmp = offfset + main.maxIntents * j
343 # Push intents by using threads
Devin Lim142b5342017-07-20 15:22:39 -0700344 t = main.Thread( target=main.Cluster.active( j ).CLI.pushTestIntents,
YPZhangcb86c5b2016-01-27 17:38:12 -0800345 threadID=main.threadID,
346 name="Push-Test-Intents",
347 args=[ main.switchType + main.ingress,
348 main.switchType + main.egress,
349 main.batchSize ],
350 kwargs={ "offset": offtmp,
351 "options": "-i",
352 "timeout": main.timeout,
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700353 "background": False,
354 "noExit": True } )
Devin Lim142b5342017-07-20 15:22:39 -0700355 pool.append( t )
YPZhangcb86c5b2016-01-27 17:38:12 -0800356 t.start()
357 main.threadID = main.threadID + 1
358 for t in pool:
359 t.join()
360 stepResult = stepResult and t.result
361 offfset = offfset + main.batchSize
362
Devin Lim142b5342017-07-20 15:22:39 -0700363 totalIntents = main.batchSize * main.Cluster.numCtrls + totalIntents
YPZhangcb86c5b2016-01-27 17:38:12 -0800364 if totalIntents >= main.minIntents and totalIntents % main.checkInterval == 0:
365 # if reach to minimum number and check interval, verify Intetns and flows
Devin Lim142b5342017-07-20 15:22:39 -0700366 time.sleep( main.verifySleep * main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800367
Devin Lim142b5342017-07-20 15:22:39 -0700368 main.log.info( "Verify Intents states" )
YPZhang3097ba92016-02-16 17:32:32 -0800369 # k is a control variable for verify retry attempts
YPZhangcb86c5b2016-01-27 17:38:12 -0800370 k = 1
YPZhang3097ba92016-02-16 17:32:32 -0800371 while k <= main.verifyAttempts:
YPZhang14a4aa92016-07-15 13:37:15 -0700372 # while loop for check intents by using CLI driver
Devin Lim142b5342017-07-20 15:22:39 -0700373 time.sleep( 5 )
374 intentsState = main.Cluster.active( 0 ).CLI.checkIntentSummary( timeout=600, noExit=True )
YPZhangebf9eb52016-05-12 15:20:24 -0700375 if intentsState:
Devin Lim142b5342017-07-20 15:22:39 -0700376 verifyTotalIntents = main.Cluster.active( 0 ).CLI.getTotalIntentsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700377 if intentVerifyTemp < verifyTotalIntents:
378 intentVerifyTemp = verifyTotalIntents
YPZhangebf9eb52016-05-12 15:20:24 -0700379 else:
YPZhang14a4aa92016-07-15 13:37:15 -0700380 verifyTotalIntents = intentVerifyTemp
YPZhang6e758fb2016-07-26 09:20:55 -0700381 intentsState = False
Devin Lim142b5342017-07-20 15:22:39 -0700382 main.log.info( "Total Installed Intents: {}".format( verifyTotalIntents ) )
YPZhangcb86c5b2016-01-27 17:38:12 -0800383 break
Devin Lim142b5342017-07-20 15:22:39 -0700384 k = k + 1
YPZhangac53ebf2016-05-13 16:26:19 -0700385
YPZhang14a4aa92016-07-15 13:37:15 -0700386 k = 1
387 flowVerify = True
388 while k <= main.verifyAttempts:
Devin Lim142b5342017-07-20 15:22:39 -0700389 time.sleep( 5 )
390 totalFlows = main.Cluster.active( 0 ).CLI.getTotalFlowsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700391 expectFlows = totalIntents * 7 + main.defaultFlows
392 if totalFlows == expectFlows:
Devin Lim142b5342017-07-20 15:22:39 -0700393 main.log.info( "Total Flows Added: {}".format( totalFlows ) )
YPZhang14a4aa92016-07-15 13:37:15 -0700394 break
395 else:
Devin Lim142b5342017-07-20 15:22:39 -0700396 main.log.info( "Some Flows are not added, retry..." )
397 main.log.info( "Total Flows Added: {} Expect Flows: {}".format( totalFlows, expectFlows ) )
YPZhang14a4aa92016-07-15 13:37:15 -0700398 flowVerify = False
YPZhangac53ebf2016-05-13 16:26:19 -0700399
YPZhang14a4aa92016-07-15 13:37:15 -0700400 k += 1
401 if flowTemp < totalFlows:
402 flowTemp = totalFlows
403 else:
404 totalFlows = flowTemp
405
406 if not intentsState or not flowVerify:
YPZhanga4acbb82016-03-02 17:28:25 -0800407 # If some intents are not installed, grep the previous flows list, and finished this test case
YPZhang14a4aa92016-07-15 13:37:15 -0700408 main.log.warn( "Intents or flows are not installed" )
Devin Lim142b5342017-07-20 15:22:39 -0700409 verifyTotalIntents = main.Cluster.active( 0 ).CLI.getTotalIntentsNum( timeout=600, noExit=True )
YPZhang14a4aa92016-07-15 13:37:15 -0700410 if intentVerifyTemp < verifyTotalIntents:
411 intentVerifyTemp = verifyTotalIntents
412 else:
413 verifyTotalIntents = intentVerifyTemp
414 if flowTemp < totalFlows:
415 flowTemp = totalFlows
416 else:
417 totalFlows = flowTemp
Devin Lim142b5342017-07-20 15:22:39 -0700418 main.log.info( "Total Intents: {}".format( verifyTotalIntents ) )
YPZhangcb86c5b2016-01-27 17:38:12 -0800419 break
YPZhange96a3062016-05-12 16:18:35 -0700420
Jeremy Ronquillo23fb2162017-09-15 14:59:57 -0700421 utilities.assert_equals( expect=main.TRUE,
422 actual=intentsState,
423 onpass="Successfully pushed and verified intents",
424 onfail="Failed to push and verify intents" )
YPZhangcb86c5b2016-01-27 17:38:12 -0800425
YPZhangcb86c5b2016-01-27 17:38:12 -0800426 main.log.info( "Total Intents Installed before crash: {}".format( totalIntents ) )
427 main.log.info( "Total Flows ADDED before crash: {}".format( totalFlows ) )
428
Devin Lim58046fa2017-07-05 16:55:00 -0700429 main.Utils.mininetCleanup( main.Mininet1 )
430
Devin Lim142b5342017-07-20 15:22:39 -0700431 main.log.info( "Writing results to DS file" )
432 with open( main.dbFileName, "a" ) as dbFile:
YPZhangcb86c5b2016-01-27 17:38:12 -0800433 # Scale number
Devin Lim87e12c42017-07-20 13:53:04 -0700434 temp = "'" + main.commit + "',"
435 temp += "'" + main.nic + "',"
Devin Lim142b5342017-07-20 15:22:39 -0700436 temp += str( main.Cluster.numCtrls )
YPZhangcb86c5b2016-01-27 17:38:12 -0800437 temp += ",'" + "baremetal1" + "'"
438 # how many intents we installed before crash
Devin Lim142b5342017-07-20 15:22:39 -0700439 temp += "," + str( verifyTotalIntents )
YPZhangcb86c5b2016-01-27 17:38:12 -0800440 # how many flows we installed before crash
Devin Lim142b5342017-07-20 15:22:39 -0700441 temp += "," + str( totalFlows )
YPZhangcb86c5b2016-01-27 17:38:12 -0800442 # other columns in database, but we didn't use in this test
443 temp += "," + "0,0,0,0,0,0"
444 temp += "\n"
445 dbFile.write( temp )