blob: 66e8228197366bb4d32f491ff91665755ef26b47 [file] [log] [blame]
GlennRCdc7ab012015-07-23 15:40:12 -07001# CASE1 starts number of nodes specified in param file
2#
3# cameron@onlab.us
4
5class SCPFportLat:
6
7 def __init__( self ):
8 self.default = ''
9
10 def CASE1( self, main ):
11 import sys
12 import os.path
13 import os
14 import time
15
16 global init
17 try:
18 if type(init) is not bool:
19 init = Fals
20 except NameError:
21 init = False
22
23 #Load values from params file
24 checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
25 gitPull = main.params[ 'GIT' ][ 'autopull' ]
26 cellName = main.params[ 'ENV' ][ 'cellName' ]
27 Apps = main.params[ 'ENV' ][ 'cellApps' ]
28 BENCHIp = main.params[ 'BENCH' ][ 'ip' ]
29 MN1Ip = main.params[ 'MN' ][ 'ip1' ]
30 main.maxNodes = int(main.params[ 'max' ])
31 cellName = main.params[ 'ENV' ][ 'cellName' ]
32 homeDir = os.path.expanduser('~')
33 topoCfgFile = main.params['TEST']['topoConfigFile']
34 topoCfgName = main.params['TEST']['topoConfigName']
GlennRCb3147232015-07-31 14:09:40 -070035 resultPath = main.params['DB']['portEventResultPath']
GlennRCdc7ab012015-07-23 15:40:12 -070036 skipMvn = main.params ['TEST']['mci']
37 testONpath = os.getcwd() #testON/bin
38
39 # -- INIT SECTION, ONLY RUNS ONCE -- #
40 if init == False:
41 init = True
42 global clusterCount #number of nodes running
43 global ONOSIp #list of ONOS IP addresses
44 global scale
45 global commit
46 global timeToPost
47 global runNum
48 global jenkinsBuildNumber
49 global CLIs
50 CLIs = []
51
52 timeToPost = time.strftime('%Y-%m-%d %H:%M:%S')
53 runNum = time.strftime('%d%H%M%S')
54 ONOSIp = main.ONOSbench.getOnosIps()
55
56 #Assigning ONOS cli handles to a list
57 for i in range(main.maxNodes):
58 CLIs.append( getattr( main, 'ONOS' + str(i+1) + 'cli'))
59
60 try:
61 jenkinsBuildNumber = str(os.environ['BUILD_NUMBER'])
62 main.log.report( 'Jenkins build number: ' + jenkinsBuildNumber )
63 except KeyError:
64 jenkinsBuildNumber = str(0)
65 main.log.info( 'Job is not run by jenkins. ' + 'Build number set to: ' + jenkinsBuildNumber)
66
67 clusterCount = 0
68 ONOSIp = main.ONOSbench.getOnosIps()
69
70 scale = (main.params[ 'SCALE' ]).split(",")
71 clusterCount = int(scale[0])
72
73 #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
74 if skipMvn != "off":
75 mvnResult = main.ONOSbench.cleanInstall()
76
77 #git
78 main.step( "Git checkout and pull " + checkoutBranch )
79 if gitPull == 'on':
80 checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
81 pullResult = main.ONOSbench.gitPull()
82
83 else:
84 checkoutResult = main.TRUE
85 pullResult = main.TRUE
86 main.log.info( "Skipped git checkout and pull" )
87
88 main.step("Grabbing commit number")
89 commit = main.ONOSbench.getVersion()
90 commit = (commit.split(" "))[1]
91
92 main.step("Creating results file")
GlennRCb3147232015-07-31 14:09:40 -070093 resultsDB = open(resultPath, "w+")
GlennRCdc7ab012015-07-23 15:40:12 -070094 resultsDB.close()
95
96 main.log.report('Commit information - ')
97 main.ONOSbench.getVersion(report=True)
98
99 # -- END OF INIT SECTION --#
100
101 main.step("Adjusting scale")
102 clusterCount = int(scale[0])
103 scale.remove(scale[0])
104
105 #kill off all onos processes
106 main.step("Killing all ONOS processes before environmnet setup")
107 for node in range(main.maxNodes):
108 main.ONOSbench.onosDie(ONOSIp[node])
109
110 #Uninstall everywhere
111 main.step( "Cleaning Enviornment..." )
112 for i in range(main.maxNodes):
113 main.log.info(" Uninstalling ONOS " + str(i) )
114 main.ONOSbench.onosUninstall( ONOSIp[i] )
115 main.log.info("Sleep 10 second for uninstall to settle...")
116 time.sleep(10)
117 main.ONOSbench.handle.sendline(" ")
118 main.ONOSbench.handle.expect(":~")
119
120 #construct the cell file
121 main.log.info("Creating cell file")
122 cellIp = []
123 for node in range (clusterCount):
124 cellIp.append(ONOSIp[node])
125
126 main.ONOSbench.createCellFile("localhost",cellName,MN1Ip,str(Apps), cellIp)
127
128 main.step( "Set Cell" )
129 main.ONOSbench.setCell(cellName)
130
131 main.step( "Creating ONOS package" )
132 packageResult = main.ONOSbench.onosPackage()
133
134 main.step( "verify cells" )
135 verifyCellResult = main.ONOSbench.verifyCell()
136
137 main.step('Starting mininet topology ')
138 main.Mininet1.startNet()
139
GlennRCdc7ab012015-07-23 15:40:12 -0700140 main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." )
141 for node in range(clusterCount):
142 main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
143 main.ONOSbench.onosInstall( ONOSIp[node])
144
145 for node in range(clusterCount):
146 for i in range( 2 ):
147 isup = main.ONOSbench.isup( ONOSIp[node] )
148 if isup:
149 main.log.info("ONOS " + str(node + 1) + " is up\n")
150 break
151 if not isup:
152 main.log.report( "ONOS " + str(node) + " didn't start!" )
153 main.log.info("Startup sequence complete")
154
155 main.step('Starting onos CLIs')
156 for i in range(clusterCount):
157 CLIs[i].startOnosCli(ONOSIp[i])
158
159 time.sleep(20)
160
161 main.step( 'activating essential applications' )
162 CLIs[0].activateApp( 'org.onosproject.metrics' )
163 CLIs[0].activateApp( 'org.onosproject.openflow' )
164
165 main.step( 'Configuring application parameters' )
166
167 configName = 'org.onosproject.net.topology.impl.DefaultTopologyProvider'
168 configParam = 'maxEvents 1'
169 main.ONOSbench.onosCfgSet( ONOSIp[0], configName, configParam )
170 configParam = 'maxBatchMs 0'
171 main.ONOSbench.onosCfgSet( ONOSIp[0], configName, configParam )
172 configParam = 'maxIdleMs 0'
173 main.ONOSbench.onosCfgSet( ONOSIp[0], configName, configParam )
174
175 def CASE2( self, main ):
176 """
177 Bring port up / down and measure latency.
178 Port enable / disable is simulated by ifconfig up / down
179
180 In ONOS-next, we must ensure that the port we are
181 manipulating is connected to another switch with a valid
182 connection. Otherwise, graph view will not be updated.
183 """
184 import time
185 import subprocess
186 import os
187 import requests
188 import json
189 import numpy
190
191 ONOSUser = main.params['CTRL']['user']
192 numIter = main.params['TEST']['numIter']
193 iterIgnore = int(main.params['TEST']['iterIgnore'])
194
195 deviceTimestampKey = main.params['JSON']['deviceTimestamp']
196 graphTimestampKey = main.params['JSON']['graphTimestamp']
197 linkTimestampKey = main.params['JSON']['linkTimestamp']
198
199 tsharkPortUp = '/tmp/tshark_port_up.txt'
200 tsharkPortDown = '/tmp/tshark_port_down.txt'
201 tsharkPortStatus = main.params[ 'TSHARK' ][ 'ofpPortStatus' ]
202
203 debugMode = main.params['TEST']['debugMode']
204 postToDB = main.params['DB']['postToDB']
205 resultPath = main.params['DB']['portEventResultPath']
206 localTime = time.strftime('%x %X')
207 localTime = localTime.replace('/', '')
208 localTime = localTime.replace(' ', '_')
209 localTime = localTime.replace(':', '')
210
211 if debugMode == 'on':
212 main.ONOSbench.tsharkPcap('eth0', '/tmp/port_lat_pcap_' + localTime)
213
214 upThresholdStr = main.params['TEST']['portUpThreshold']
215 downThresholdStr = main.params['TEST']['portDownThreshold']
216 upThresholdObj = upThresholdStr.split(',')
217 downThresholdObj = downThresholdStr.split(',')
218 upThresholdMin = int(upThresholdObj[0])
219 upThresholdMax = int(upThresholdObj[1])
220 downThresholdMin = int(downThresholdObj[0])
221 downThresholdMax = int(downThresholdObj[1])
222
223 interfaceConfig = 's1-eth1'
224 main.log.report('Port enable / disable latency')
225 main.log.report('Simulated by ifconfig up / down')
226 main.log.report('Total iterations of test: ' + str(numIter))
227 main.step('Assign switches s1 and s2 to controller 1')
228
229 main.Mininet1.assignSwController(sw='s1', ip=ONOSIp[0])
230 main.Mininet1.assignSwController(sw='s2', ip=ONOSIp[0])
231
232 time.sleep(15)
233
234 portUpEndToEndNodeIter = numpy.zeros((clusterCount, int(numIter)))
235 portUpOfpToDevNodeIter = numpy.zeros((clusterCount, int(numIter)))
236 portUpDevToLinkNodeIter = numpy.zeros((clusterCount, int(numIter)))
237 portUpLinkToGraphNodeIter = numpy.zeros((clusterCount, int(numIter)))
238
239 portDownEndToEndNodeIter = numpy.zeros((clusterCount, int(numIter)))
240 portDownOfpToDevNodeIter = numpy.zeros((clusterCount, int(numIter)))
241 portDownDevToLinkNodeIter = numpy.zeros((clusterCount, int(numIter)))
242 portDownLinkToGraphNodeIter = numpy.zeros((clusterCount, int(numIter)))
243
244 for i in range(0, int(numIter)):
245 main.step('Starting wireshark capture for port status down')
246 main.ONOSbench.tsharkGrep(tsharkPortStatus, tsharkPortDown)
247
248 time.sleep(2)
249
250 main.step('Disable port: ' + interfaceConfig)
251 main.Mininet1.handle.sendline('sh ifconfig ' +
252 interfaceConfig + ' down')
253 main.Mininet1.handle.expect('mininet>')
254
255 time.sleep(2)
256
257 jsonStrPtDown = []
258 for node in range (0, clusterCount):
259 metricsPortDown = CLIs[node].topologyEventsMetrics()
260 jsonStrPtDown.append(metricsPortDown)
261
262 time.sleep(10)
263
264 main.ONOSbench.tsharkStop()
265
266 fPortDown = open(tsharkPortDown, 'r')
267 fLine = fPortDown.readline()
268 objDown = fLine.split(' ')
269 if len(fLine) > 0:
270 timestampBeginPtDown = int(float(objDown[1]) * 1000)
271 # At times, tshark reports timestamp at the 3rd
272 # index of the array. If initial readings were
273 # unlike the epoch timestamp, then check the 3rd
274 # index and set that as a timestamp
275 if timestampBeginPtDown < 1400000000000:
276 timestampBeginPtDown = int(float(objDown[2]) * 1000)
277 else:
278 main.log.info('Tshark output file returned unexpected' +
279 ' results: ' + str(objDown))
280 timestampBeginPtDown = 0
281 fPortDown.close()
282
283 for node in range(0, clusterCount):
284 nodeNum = node+1
285 metricsDown = CLIs[node].topologyEventsMetrics
286 jsonStrPtDown[node] = metricsDown()
287 jsonObj = json.loads(jsonStrPtDown[node])
288
289 if jsonObj:
290 graphTimestamp = jsonObj[graphTimestampKey]['value']
291 deviceTimestamp = jsonObj[deviceTimestampKey]['value']
292 linkTimestamp = jsonObj[linkTimestampKey]['value']
293 else:
294 main.log.error( "Unexpected json object" )
295 graphTimestamp = 0
296 deviceTimestamp = 0
297 linkTimestamp = 0
298
299 main.log.info('ptDownTimestamp: ' + str(timestampBeginPtDown))
300 main.log.info("graphTimestamp: " + str(graphTimestamp))
301 main.log.info("deviceTimestamp: " + str(deviceTimestamp))
302 main.log.info("linkTimestamp: " + str(linkTimestamp))
303
304 ptDownEndToEnd = int(graphTimestamp) - int(timestampBeginPtDown)
305 ptDownOfpToDevice = float(deviceTimestamp) - float(timestampBeginPtDown)
306 ptDownDeviceToLink = float(linkTimestamp) - float(deviceTimestamp)
307 ptDownLinkToGraph = float(graphTimestamp) - float(linkTimestamp)
308
309 if ptDownEndToEnd < downThresholdMin or ptDownEndToEnd >= downThresholdMax:
310 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port down End-to-end: "+ str(ptDownEndToEnd) + " ms")
311 elif i < iterIgnore:
312 main.log.info("ONOS "+str(nodeNum) + " warming up - port down End-to-end: "+ str(ptDownEndToEnd) + " ms")
313 else:
314 portDownEndToEndNodeIter[node][i] = ptDownEndToEnd
315 main.log.info("ONOS "+str(nodeNum) + " port down End-to-end: "+ str(ptDownEndToEnd) + " ms")
316
317 if ptDownOfpToDevice < downThresholdMin or ptDownOfpToDevice >= downThresholdMax:
318 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port down Ofp-to-device: "+ str(ptDownOfpToDevice) + " ms")
319 elif i < iterIgnore:
320 main.log.info("ONOS "+str(nodeNum) + " warming up - port down Ofp-to-device: "+ str(ptDownOfpToDevice) + " ms")
321 else:
322 portDownOfpToDevNodeIter[node][i] = ptDownOfpToDevice
323 main.log.info("ONOS "+str(nodeNum) + " port down Ofp-to-device: "+ str(ptDownOfpToDevice) + " ms")
324
325 if ptDownDeviceToLink < downThresholdMin or ptDownDeviceToLink >= downThresholdMax:
326 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port down Device-to-link: "+ str(ptDownDeviceToLink) + " ms")
327 elif i < iterIgnore:
328 main.log.info("ONOS "+str(nodeNum) + " warming up - port down Device-to-link: "+ str(ptDownDeviceToLink) + " ms")
329 else:
330 portDownDevToLinkNodeIter[node][i] = ptDownDeviceToLink
331 main.log.info("ONOS "+str(nodeNum) + " port down Device-to-link: "+ str(ptDownDeviceToLink) + " ms")
332
333 if ptDownLinkToGraph < downThresholdMin or ptDownLinkToGraph >= downThresholdMax:
334 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port down Link-to-graph: "+ str(ptDownLinkToGraph) + " ms")
335 elif i < iterIgnore:
336 main.log.info("ONOS "+str(nodeNum) + " warming up - port down Link-to-graph: "+ str(ptDownLinkToGraph) + " ms")
337 else:
338 portDownLinkToGraphNodeIter[node][i] = ptDownLinkToGraph
339 main.log.info("ONOS "+str(nodeNum) + " port down Link-to-graph: "+ str(ptDownLinkToGraph) + " ms")
340
341 time.sleep(3)
342
343 main.step('Starting wireshark capture for port status up')
344 main.ONOSbench.tsharkGrep(tsharkPortStatus, tsharkPortUp)
345
346 time.sleep(5)
347 main.step('Enable port and obtain timestamp')
348 main.Mininet1.handle.sendline('sh ifconfig ' + interfaceConfig + ' up')
349 main.Mininet1.handle.expect('mininet>')
350
GlennRCb3147232015-07-31 14:09:40 -0700351 time.sleep(5)
352
GlennRCdc7ab012015-07-23 15:40:12 -0700353 jsonStrPtUp = []
354 for node in range (0, clusterCount):
355 metricsPortUp = CLIs[node].topologyEventsMetrics()
356 jsonStrPtUp.append(metricsPortUp)
357
358 time.sleep(5)
359 main.ONOSbench.tsharkStop()
360
361 time.sleep(3)
362
363 fPortUp = open(tsharkPortUp, 'r')
364 fLine = fPortUp.readline()
365 objUp = fLine.split(' ')
366 if len(fLine) > 0:
367 timestampBeginPtUp = int(float(objUp[1]) * 1000)
368 if timestampBeginPtUp < 1400000000000:
369 timestampBeginPtUp = int(float(objUp[2]) * 1000)
370 else:
371 main.log.info('Tshark output file returned unexpected' + ' results.')
372 timestampBeginPtUp = 0
373 fPortUp.close()
374
375 for node in range(0, clusterCount):
376 nodeNum = node+1
377 metricsUp = CLIs[node].topologyEventsMetrics
378 jsonStrUp = metricsUp()
379 jsonObj = json.loads(jsonStrPtUp[node])
380
381 if jsonObj:
382 graphTimestamp = jsonObj[graphTimestampKey]['value']
383 deviceTimestamp = jsonObj[deviceTimestampKey]['value']
384 linkTimestamp = jsonObj[linkTimestampKey]['value']
385 else:
386 main.log.error( "Unexpected json object" )
387 graphTimestamp = 0
388 deviceTimestamp = 0
389 linkTimestamp = 0
390
391
GlennRCb3147232015-07-31 14:09:40 -0700392 main.log.info('ptUpTimestamp: ' + str(timestampBeginPtUp))
GlennRCdc7ab012015-07-23 15:40:12 -0700393 main.log.info("graphTimestamp: " + str(graphTimestamp))
394 main.log.info("deviceTimestamp: " + str(deviceTimestamp))
395 main.log.info("linkTimestamp: " + str(linkTimestamp))
396
397 ptUpEndToEnd = int(graphTimestamp) - int(timestampBeginPtUp)
398 ptUpOfpToDevice = float(deviceTimestamp) - float(timestampBeginPtUp)
399 ptUpDeviceToLink = float(linkTimestamp) - float(deviceTimestamp)
400 ptUpLinkToGraph = float(graphTimestamp) - float(linkTimestamp)
401
402 if ptUpEndToEnd < upThresholdMin or ptUpEndToEnd >= upThresholdMax:
403 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port up End-to-end: "+ str(ptUpEndToEnd) + " ms")
404 elif i < iterIgnore:
405 main.log.info("ONOS "+str(nodeNum) + " warming up - port up End-to-end: "+ str(ptUpEndToEnd) + " ms")
406 else:
407 portUpEndToEndNodeIter[node][i] = ptUpEndToEnd
408 main.log.info("ONOS "+str(nodeNum) + " port up End-to-end: "+ str(ptUpEndToEnd) + " ms")
409
410 if ptUpOfpToDevice < upThresholdMin or ptUpOfpToDevice >= upThresholdMax:
411 main.log.info("ONOS " + str(nodeNum) + " surpassed threshold - port up Ofp-to-device: "+ str(ptUpOfpToDevice) + " ms")
412 elif i < iterIgnore:
413 main.log.info("ONOS "+ str(nodeNum) + " warming up - port up Ofp-to-device: "+ str(ptUpOfpToDevice) + " ms")
414 else:
415 portUpOfpToDevNodeIter[node][i] = ptUpOfpToDevice
416 main.log.info("ONOS "+ str(nodeNum) + " port up Ofp-to-device: "+ str(ptUpOfpToDevice) + " ms")
417
418 if ptUpDeviceToLink < upThresholdMin or ptUpDeviceToLink >= upThresholdMax:
419 main.log.info("ONOS " +str(nodeNum) + " surpassed threshold - port up Device-to-link: "+ str(ptUpDeviceToLink) + " ms")
420 elif i < iterIgnore:
421 main.log.info("ONOS "+str(nodeNum) + " warming up - port up Device-to-link: "+ str(ptUpDeviceToLink) + " ms")
422 else:
423 portUpDevToLinkNodeIter[node][i] = ptUpDeviceToLink
424 main.log.info("ONOS "+str(nodeNum) + " port up Device-to-link: "+ str(ptUpDeviceToLink) + " ms")
425
426 if ptUpLinkToGraph < upThresholdMin or ptUpLinkToGraph >= upThresholdMax:
427 main.log.info("ONOS " + str(nodeNum) + " surpassed threshold - port up Link-to-graph: " + str(ptUpLinkToGraph) + " ms")
428 elif i < iterIgnore:
429 main.log.info("ONOS " + str(nodeNum) + " warming up - port up Link-to-graph: " + str(ptUpLinkToGraph) + " ms")
430 else:
431 portUpLinkToGraphNodeIter[node][i] = ptUpLinkToGraph
432 main.log.info("ONOS " + str(nodeNum) + " port up Link-to-graph: " + str(ptUpLinkToGraph) + " ms")
433
434 dbCmdList = []
435 for node in range(0, clusterCount):
436 portUpEndToEndList = []
437 portUpOfpToDevList = []
438 portUpDevToLinkList = []
439 portUpLinkToGraphList = []
440
441 portDownEndToEndList = []
442 portDownOfpToDevList = []
443 portDownDevToLinkList = []
444 portDownLinkToGraphList = []
445
446 portUpEndToEndAvg = 0
447 portUpOfpToDevAvg = 0
448 portUpDevToLinkAvg = 0
449 portUpLinkToGraphAvg = 0
450
451 portDownEndToEndAvg = 0
452 portDownOfpToDevAvg = 0
453 portDownDevToLinkAvg = 0
454 portDownLinkToGraphAvg = 0
455
456 # TODO: Update for more pythonic way to get list
457 # portUpDevList = [item for item in portUpDevNodeIter[node]
458 # if item > 0.0]
459 for item in portUpEndToEndNodeIter[node]:
460 if item > 0.0:
461 portUpEndToEndList.append(item)
462
463 for item in portUpOfpToDevNodeIter[node]:
464 if item > 0.0:
465 portUpOfpToDevList.append(item)
466
467 for item in portUpDevToLinkNodeIter[node]:
468 if item > 0.0:
469 portUpDevToLinkList.append(item)
470
471 for item in portUpLinkToGraphNodeIter[node]:
472 if item >= 0.0:
473 portUpLinkToGraphList.append(item)
474
475 for item in portDownEndToEndNodeIter[node]:
476 if item > 0.0:
477 portDownEndToEndList.append(item)
478
479 for item in portDownOfpToDevNodeIter[node]:
480 if item > 0.0:
481 portDownOfpToDevList.append(item)
482
483 for item in portDownDevToLinkNodeIter[node]:
484 if item >= 0.0:
485 portDownDevToLinkList.append(item)
486
487 for item in portDownLinkToGraphNodeIter[node]:
488 if item >= 0.0:
489 portDownLinkToGraphList.append(item)
490
491 portUpEndToEndAvg = round(numpy.mean(portUpEndToEndList), 2)
492 portUpOfpToDevAvg = round(numpy.mean(portUpOfpToDevList), 2)
493 portUpDevToLinkAvg = round(numpy.mean(portUpDevToLinkList), 2)
494 portUpLinkToGraphAvg = round(numpy.mean(portUpLinkToGraphList), 2)
495
496 portDownEndToEndAvg = round(numpy.mean(portDownEndToEndList), 2)
497 portDownOfpToDevAvg = round(numpy.mean(portDownOfpToDevList), 2)
498 portDownDevToLinkAvg = round(numpy.mean(portDownDevToLinkList), 2)
499 portDownLinkToGraphAvg = round(numpy.mean(portDownLinkToGraphList), 2)
500
501 portUpStdDev = round(numpy.std(portUpEndToEndList), 2)
502 portDownStdDev = round(numpy.std(portDownEndToEndList), 2)
503
504 main.log.report(' - Node ' + str(node + 1) + ' Summary ---------------- ')
505 main.log.report(' Port up End-to-end ' +
506 str(portUpEndToEndAvg) + ' ms')
507 main.log.report(' Port up Ofp-to-device ' +
508 str(portUpOfpToDevAvg) + ' ms')
509 main.log.report(' Port up Device-to-link ' +
510 str(portUpDevToLinkAvg) + ' ms')
511 main.log.report(' Port up Link-to-graph ' +
512 str(portUpLinkToGraphAvg) + ' ms')
513
514 main.log.report(' Port down End-to-end ' +
515 str(round(portDownEndToEndAvg, 2)) + ' ms')
516 main.log.report(' Port down Ofp-to-device ' +
517 str(portDownOfpToDevAvg) + ' ms')
518 main.log.report(' Port down Device-to-link ' +
519 str(portDownDevToLinkAvg) + ' ms')
520 main.log.report(' Port down Link-to-graph' +
521 str(portDownLinkToGraphAvg) + ' ms')
522
523 dbCmdList.append("INSERT INTO port_latency_details VALUES('" +
524 timeToPost + "','port_latency_results'," + jenkinsBuildNumber +
525 ',' + str(clusterCount) + ",'baremetal" + str(node + 1) +
526 "'," +
527 str(portUpEndToEndAvg) +',' +
528 str(portUpOfpToDevAvg) + ',' +
529 str(portUpDevToLinkAvg) + ',' +
530 str(portUpLinkToGraphAvg) + ',' +
531 str(portDownEndToEndAvg) + ',' +
532 str(portDownOfpToDevAvg) + ',' +
533 str(portDownDevToLinkAvg) + ',' +
534 str(portDownLinkToGraphAvg) +
535 ');')
536
537 fResult = open(resultPath, 'a')
538 for line in dbCmdList:
539 if line:
540 fResult.write(line + '\n')
541
542 fResult.close()
543
544 # Delete switches from controller to prepare for next
545 # set of tests
546 main.Mininet1.deleteSwController('s1')
547 main.Mininet1.deleteSwController('s2')
548
549 main.log.info("Stopping mininet")
550 main.Mininet1.stopNet()