| # 2015.03.12 10:28:21 PDT |
| #Embedded file name: ../tests/IntentPerfNextBM/IntentPerfNextBM.py |
| |
| |
| class IntentPerfNextBM: |
| |
| def __init__(self): |
| self.default = '' |
| |
| def CASE1(self, main): |
| """ |
| ONOS startup sequence |
| """ |
| global clusterCount |
| global timeToPost |
| global runNum |
| import time |
| |
| clusterCount = 1 |
| timeToPost = time.strftime('%Y-%m-%d %H:%M:%S') |
| runNum = time.strftime('%d%H%M%S') |
| cellName = main.params['ENV']['cellName'] |
| gitPull = main.params['GIT']['autoPull'] |
| checkoutBranch = main.params['GIT']['checkout'] |
| intentFilePath = main.params['DB']['intentFilePath'] |
| cellStr = main.params[ 'TEST' ][ 'cellStr' ] |
| ONOSIp = [] |
| |
| for i in range(1, 8): |
| ONOSIp.append(main.params['CTRL']['ip' + str(i)]) |
| main.ONOSbench.onosUninstall(nodeIp=ONOSIp[i - 1]) |
| |
| MN1Ip = main.params['MN']['ip1'] |
| BENCHIp = main.params['BENCH']['ip'] |
| main.case('Setting up test environment') |
| main.step('Clearing previous DB log file') |
| fIntentLog = open(intentFilePath, 'w') |
| fIntentLog.write('') |
| fIntentLog.close() |
| main.step('Starting mininet topology') |
| main.Mininet1.startNet() |
| main.step('Creating cell file') |
| cellFileResult = main.ONOSbench.createCellFile( |
| BENCHIp, cellName, MN1Ip, cellStr, ONOSIp[0]) |
| main.step('Applying cell file to environment') |
| cellApplyResult = main.ONOSbench.setCell(cellName) |
| verifyCellResult = main.ONOSbench.verifyCell() |
| main.step('Removing raft logs') |
| main.ONOSbench.onosRemoveRaftLogs() |
| main.step('Git checkout and pull ' + checkoutBranch) |
| |
| if gitPull == 'on': |
| checkoutResult = main.ONOSbench.gitCheckout(checkoutBranch) |
| pullResult = main.ONOSbench.gitPull() |
| main.step('Using onos-build to compile ONOS') |
| buildResult = main.ONOSbench.onosBuild() |
| else: |
| checkoutResult = main.TRUE |
| pullResult = main.TRUE |
| buildResult = main.TRUE |
| main.log.info('Git pull skipped by configuration') |
| |
| main.log.report('Commit information - ') |
| main.ONOSbench.getVersion(report=True) |
| main.step('Creating ONOS package') |
| packageResult = main.ONOSbench.onosPackage() |
| main.step('Installing ONOS package') |
| install1Result = main.ONOSbench.onosInstall(node=ONOSIp[0]) |
| main.step('Set cell for ONOScli env') |
| main.ONOS1cli.setCell(cellName) |
| time.sleep(5) |
| main.step('Start onos cli') |
| cli1 = main.ONOS1cli.startOnosCli(ONOSIp[0]) |
| utilities.assert_equals(expect=main.TRUE, |
| actual=cellFileResult and cellApplyResult and\ |
| verifyCellResult and checkoutResult and\ |
| pullResult and buildResult and install1Result, |
| onpass='ONOS started successfully', |
| onfail='Failed to start ONOS') |
| |
| def CASE2(self, main): |
| """ |
| Batch intent install |
| |
| Supports scale-out scenarios and increasing |
| number of intents within each iteration |
| """ |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| ONOS1Ip = main.params['CTRL']['ip1'] |
| ONOS2Ip = main.params['CTRL']['ip2'] |
| ONOS3Ip = main.params['CTRL']['ip3'] |
| ONOS4Ip = main.params['CTRL']['ip4'] |
| ONOS5Ip = main.params['CTRL']['ip5'] |
| ONOS6Ip = main.params['CTRL']['ip6'] |
| ONOS7Ip = main.params['CTRL']['ip7'] |
| assertion = main.TRUE |
| ONOSIpList = [] |
| |
| for i in range(1, 8): |
| ONOSIpList.append(main.params['CTRL']['ip' + str(i)]) |
| |
| ONOSUser = main.params['CTRL']['user'] |
| defaultSwPort = main.params['CTRL']['port1'] |
| batchIntentSize = int(main.params['TEST']['batchIntentSize']) |
| batchThreshMin = int(main.params['TEST']['batchThresholdMin']) |
| batchThreshMax = int(main.params['TEST']['batchThresholdMax']) |
| numIter = main.params['TEST']['numIter'] |
| numIgnore = int(main.params['TEST']['numIgnore']) |
| numSwitch = int(main.params['TEST']['numSwitch']) |
| nThread = main.params['TEST']['numMult'] |
| intentFilePath = main.params['DB']['intentFilePath'] |
| |
| if clusterCount == 1: |
| for i in range(1, numSwitch + 1): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| if clusterCount == 3: |
| for i in range(1, 3): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| for i in range(3, 6): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS2Ip, port1=defaultSwPort) |
| for i in range(6, 9): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS3Ip, port1=defaultSwPort) |
| if clusterCount == 5: |
| main.Mininet1.assignSwController(sw='1', |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='2', |
| ip1=ONOS2Ip, port1=defaultSwPort) |
| for i in range(3, 6): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS3Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='6', |
| ip1=ONOS4Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='7', |
| ip1=ONOS5Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='8', |
| ip1=ONOS5Ip, port1=defaultSwPort) |
| if clusterCount == 7: |
| for i in range(1, 9): |
| if i < 8: |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOSIpList[i - 1], port1=defaultSwPort) |
| elif i >= 8: |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOSIpList[6], port1=defaultSwPort) |
| |
| time.sleep(20) |
| |
| deviceIdList = [] |
| batchInstallLat = [] |
| batchWithdrawLat = [] |
| |
| main.log.report('Batch intent installation test of ' + |
| str(batchIntentSize) + ' intent(s)') |
| main.log.info('Getting list of available devices') |
| |
| jsonStr = main.ONOS1cli.devices() |
| jsonObj = json.loads(jsonStr) |
| for device in jsonObj: |
| deviceIdList.append(device['id']) |
| |
| if not jsonObj: |
| main.log.warn( "Devices not found, check topology" ) |
| |
| sleepTime = 10 |
| baseDir = '/tmp/' |
| for batch in range(0, 5): |
| maxInstallLat = [] |
| maxWithdrawLat = [] |
| maxSingleInstallLat = [] |
| maxSingleWithdrawLat = [] |
| for i in range(0, int(numIter)): |
| main.log.info('Pushing ' + str( |
| int(batchIntentSize) * int(nThread)) + |
| ' intents. Iteration ' + str(i)) |
| saveDir = baseDir + 'batch_intent_1.txt' |
| main.ONOSbench.pushTestIntentsShell(deviceIdList[0] + |
| '/2', deviceIdList[7] + '/2', batchIntentSize, |
| saveDir, ONOSIpList[0], numMult=nThread) |
| time.sleep(sleepTime) |
| intent = '' |
| counter = 300 |
| while len(intent) > 0 and counter > 0: |
| main.ONOS1cli.handle.sendline('intents | wc -l') |
| main.ONOS1cli.handle.expect('intents | wc -l') |
| main.ONOS1cli.handle.expect('onos>') |
| intentTemp = main.ONOS1cli.handle.before() |
| intent = main.ONOS1cli.intents() |
| intent = json.loads(intent) |
| counter = counter - 1 |
| time.sleep(1) |
| |
| time.sleep(5) |
| saveDir = baseDir + 'batch_intent_1.txt' |
| with open(saveDir) as fOnos: |
| lineCount = 0 |
| for line in fOnos: |
| line_temp = '' |
| main.log.info('Line read: ' + str(line)) |
| line_temp = line[1:] |
| line_temp = line_temp.split(': ') |
| if ' ' in str(line_temp): |
| result = line_temp[1].split(' ')[0] |
| else: |
| main.log.warn('Empty line read') |
| result = 0 |
| if lineCount == 0: |
| if 'Failure' in str(line): |
| main.log.warn('Intent installation failed') |
| result = 'NA' |
| else: |
| main.log.info('Install result: ' + result) |
| batchInstallLat.append(int(result)) |
| installResult = result |
| elif lineCount == 1: |
| if 'Failure' in str(line): |
| main.log.warn('Intent withdraw failed') |
| result = 'NA' |
| else: |
| main.log.info('Withdraw result: ' + result) |
| batchWithdrawLat.append(int(result)) |
| withdrawResult = result |
| else: |
| main.log.warn('Invalid results') |
| installResult = 'NA' |
| withdrawResult = 'NA' |
| lineCount += 1 |
| |
| main.log.info('Batch install latency with' + |
| str(batchIntentSize) + 'intents: ' + |
| str(installResult) + ' ms') |
| main.log.info('Batch withdraw latency with' + |
| str(batchIntentSize) + 'intents: ' + |
| str(withdrawResult) + ' ms') |
| main.log.info('Single intent install latency with' + |
| str(batchIntentSize) + 'intents: ' + |
| str(float(installResult) / int(batchIntentSize))+' ms') |
| main.log.info('Single intent withdraw latency with' + |
| str(batchIntentSize) + 'intents: ' + |
| str(float(withdrawResult)/ int(batchIntentSize))+' ms') |
| if len(batchInstallLat) > 0 and int(i) > numIgnore: |
| maxInstallLat.append(max(batchInstallLat)) |
| maxSingleInstallLat.append( |
| max(batchInstallLat) / int(batchIntentSize)) |
| elif len(batchInstallLat) == 0: |
| sleepTime += 30 |
| if len(batchWithdrawLat) > 0 and int(i) > numIgnore: |
| maxWithdrawLat.append(max(batchWithdrawLat)) |
| maxSingleWithdrawLat.append( |
| max(batchWithdrawLat) / int(batchIntentSize)) |
| batchInstallLat = [] |
| batchWithdrawLat = [] |
| time.sleep(5) |
| |
| if maxInstallLat: |
| avgInstallLat = str(round( |
| numpy.average(maxInstallLat), 2)) |
| stdInstallLat = str(round( |
| numpy.std(maxInstallLat), 2)) |
| avgSingleInstallLat = str(round( |
| numpy.average(maxSingleInstallLat), 3)) |
| stdSingleInstallLat = str(round( |
| numpy.std(maxSingleInstallLat), 3)) |
| else: |
| avgInstallLat = 'NA' |
| stdInstallLat = 'NA' |
| main.log.report('Batch installation failed') |
| assertion = main.FALSE |
| if maxWithdrawLat: |
| avgWithdrawLat = str(round( |
| numpy.average(maxWithdrawLat), 2)) |
| stdWithdrawLat = str(round( |
| numpy.std(maxWithdrawLat), 2)) |
| avgSingleWithdrawLat = str(round( |
| numpy.average(maxSingleWithdrawLat), 3)) |
| stdSingleWithdrawLat = str(round( |
| numpy.std(maxSingleWithdrawLat), 3)) |
| else: |
| avgWithdrawLat = 'NA' |
| stdWithdrawLat = 'NA' |
| main.log.report('Batch withdraw failed') |
| assertion = main.FALSE |
| |
| main.log.report('Avg of batch installation latency ' + |
| 'of size ' + str(batchIntentSize) + ': ' + |
| str(avgInstallLat) + ' ms') |
| main.log.report('Std Deviation of batch installation latency ' + |
| ': ' + str(round(numpy.std(maxInstallLat), 2)) + ' ms') |
| main.log.report('Avg of batch withdraw latency ' + |
| 'of size ' + str(batchIntentSize) + ': ' + |
| str(avgWithdrawLat) + ' ms') |
| main.log.report('Std Deviation of batch withdraw latency ' + |
| ': ' + str(round(numpy.std(maxWithdrawLat), 2)) + ' ms') |
| |
| main.log.report('Avg of batch withdraw latency ' + 'of size ' + |
| str(batchIntentSize) + ': ' + str(avgWithdrawLat) + ' ms') |
| main.log.report('Std Deviation of batch withdraw latency ' + |
| ': ' + str(stdWithdrawLat) + ' ms') |
| main.log.report('Avg of single withdraw latency ' + 'of size ' + |
| str(batchIntentSize) + ': ' + |
| str(avgSingleWithdrawLat) + ' ms') |
| main.log.report('Std Deviation of single withdraw latency ' + |
| ': ' + str(stdSingleWithdrawLat) + ' ms') |
| |
| dbCmd = "INSERT INTO intents_latency_tests VALUES('" +\ |
| timeToPost + "','intents_latency_results'," +\ |
| runNum + ',' + str(clusterCount) + ',' +\ |
| str(batchIntentSize) + ',' + str(avgInstallLat) +\ |
| ',' + str(stdInstallLat) + ',' + str(avgWithdrawLat) +\ |
| ',' + str(stdWithdrawLat) + ');' |
| |
| fResult = open(intentFilePath, 'a') |
| if dbCmd: |
| fResult.write(dbCmd + '\n') |
| fResult.close() |
| if batch == 0: |
| batchIntentSize = 10 |
| elif batch == 1: |
| batchIntentSize = 100 |
| elif batch == 2: |
| batchIntentSize = 1000 |
| elif batch == 3: |
| batchIntentSize = 1500 |
| if batch < 4: |
| main.log.report('Increasing batch intent size to ' + |
| str(batchIntentSize)) |
| |
| utilities.assert_equals(expect=main.TRUE, actual=assertion, |
| onpass='Batch intent install/withdraw test successful', |
| onfail='Batch intent install/withdraw test failed') |
| |
| def CASE3(self, main): |
| """ |
| Batch intent reroute latency |
| """ |
| import time |
| import json |
| import requests |
| import os |
| import numpy |
| |
| ONOS1Ip = main.params['CTRL']['ip1'] |
| ONOS2Ip = main.params['CTRL']['ip2'] |
| ONOS3Ip = main.params['CTRL']['ip3'] |
| ONOS4Ip = main.params['CTRL']['ip4'] |
| ONOS5Ip = main.params['CTRL']['ip5'] |
| ONOS6Ip = main.params['CTRL']['ip6'] |
| ONOS7Ip = main.params['CTRL']['ip7'] |
| |
| ONOSIpList = [] |
| for i in range(1, 8): |
| ONOSIpList.append(main.params['CTRL']['ip' + str(i)]) |
| |
| ONOSUser = main.params['CTRL']['user'] |
| defaultSwPort = main.params['CTRL']['port1'] |
| batchIntentSize = main.params['TEST']['batchIntentSize'] |
| thresholdMin = int(main.params['TEST']['batchThresholdMin']) |
| thresholdMax = int(main.params['TEST']['batchThresholdMax']) |
| |
| intfs = main.params['TEST']['intfs'] |
| installTime = main.params['JSON']['installedTime'] |
| numIter = main.params['TEST']['numIter'] |
| numIgnore = int(main.params['TEST']['numIgnore']) |
| numSwitch = int(main.params['TEST']['numSwitch']) |
| nThread = main.params['TEST']['numMult'] |
| |
| tsharkPortStatus = main.params[ 'TSHARK' ][ 'ofpPortStatus' ] |
| tsharkPortDown = '/tmp/tshark_port_down_reroute.txt' |
| |
| if clusterCount == 1: |
| for i in range(1, numSwitch + 1): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| if clusterCount == 3: |
| for i in range(1, 3): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| for i in range(3, 6): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS2Ip, port1=defaultSwPort) |
| for i in range(6, 9): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS3Ip, port1=defaultSwPort) |
| if clusterCount == 5: |
| main.Mininet1.assignSwController(sw='1', |
| ip1=ONOS1Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='2', |
| ip1=ONOS2Ip, port1=defaultSwPort) |
| for i in range(3, 6): |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOS3Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='6', |
| ip1=ONOS4Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='7', |
| ip1=ONOS5Ip, port1=defaultSwPort) |
| main.Mininet1.assignSwController(sw='8', |
| ip1=ONOS5Ip, port1=defaultSwPort) |
| if clusterCount == 7: |
| for i in range(1, 9): |
| if i < 8: |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOSIpList[i - 1], port1=defaultSwPort) |
| elif i >= 8: |
| main.Mininet1.assignSwController(sw=str(i), |
| ip1=ONOSIpList[6], port1=defaultSwPort) |
| |
| main.log.report('Batch intent reroute test ') |
| |
| batchIntentRerouteAvgSystem = numpy.zeros(( |
| clusterCount, int(numIter))) |
| batchIntentRerouteStdSystem = numpy.zeros(( |
| clusterCount, int(numIter))) |
| batchIntentRerouteAvgPort = numpy.zeros(( |
| clusterCount, int(numIter))) |
| batchIntentRerouteStdSystem = numpy.zeros(( |
| clusterCount, int(numIter))) |
| |
| time.sleep(10) |
| |
| main.log.info('Getting list of available devices') |
| |
| deviceIdList = [] |
| jsonStr = main.ONOS1cli.devices() |
| jsonObj = json.loads(jsonStr) |
| for device in jsonObj: |
| deviceIdList.append(device['id']) |
| if not jsonObj: |
| main.log.warn('No devices have been discovered') |
| assertion = main.FALSE |
| |
| sleepTime = 10 |
| |
| baseDir = '/tmp/' |
| for batch in range(0, 5): |
| maxRerouteLatSystem = [] |
| maxRerouteLatPort = [] |
| for i in range(0, int(numIter)): |
| rerouteLatSystem = [] |
| rerouteLatPort = [] |
| main.log.info('Pushing ' + str( |
| int(batchIntentSize) * int(nThread)) + |
| ' intents. Iteration ' + str(i)) |
| main.ONOSbench.pushTestIntentsShell( |
| deviceIdList[0] + '/2', deviceIdList[7] + |
| '/2', batchIntentSize, '/tmp/batch_install.txt', |
| ONOSIpList[0], numMult='1', report=False, |
| options='-i') |
| |
| time.sleep(10) |
| |
| main.ONOS1.tsharkGrep(tsharkPortStatus, tsharkPortDown) |
| main.log.info('Disabling interface ' + intfs) |
| main.Mininet1.handle.sendline( |
| 'sh ifconfig ' + intfs + ' down') |
| t0System = time.time() * 1000 |
| |
| time.sleep(3) |
| |
| main.ONOS1.tsharkStop() |
| |
| time.sleep(2) |
| |
| os.system('scp ' + ONOSUser + '@' + ONOSIpList[0] + |
| ':' + tsharkPortDown + ' /tmp/') |
| time.sleep(5) |
| |
| fPortDown = open(tsharkPortDown, 'r') |
| fLine = fPortDown.readline() |
| objDown = fLine.split(' ') |
| if len(fLine) > 0: |
| timestampBeginPtDown = int(float(objDown[1]) * 1000) |
| if timestampBeginPtDown < 1400000000000: |
| timestampBeginPtDown = int(float(objDown[2]) * 1000) |
| main.log.info('Port down begin timestamp: ' + |
| str(timestampBeginPtDown)) |
| else: |
| main.log.info('Tshark output file returned unexpected' + |
| ' results: ' + str(fLine)) |
| fPortDown.close() |
| |
| intentsJsonStr1 = main.ONOS1cli.intentsEventsMetrics() |
| intentsJsonObj1 = json.loads(intentsJsonStr1) |
| intentInstall1 = intentsJsonObj1[installTime]['value'] |
| intentRerouteLat1 = int(intentInstall1) - int(t0System) |
| intentRerouteLatPort1 =\ |
| int(intentInstall1) - int(timestampBeginPtDown) |
| |
| if intentRerouteLat1 > thresholdMin and \ |
| intentRerouteLat1 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat1) |
| main.log.info('ONOS1 Intent Reroute Lat ' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + |
| str(intentRerouteLat1) + ' ms') |
| if intentRerouteLatPort1 > thresholdMin and\ |
| intentRerouteLatPort1 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort1) |
| |
| main.log.info('ONOS1 Intent Reroute Lat ' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + |
| str(intentRerouteLatPort1) + ' ms') |
| |
| if clusterCount == 3: |
| intentsJsonStr2 = main.ONOS2cli.intentsEventsMetrics() |
| intentsJsonStr3 = main.ONOS3cli.intentsEventsMetrics() |
| intentsJsonObj2 = json.loads(intentsJsonStr2) |
| intentsJsonObj3 = json.loads(intentsJsonStr3) |
| intentInstall2 = intentsJsonObj2[installTime]['value'] |
| intentInstall3 = intentsJsonObj3[installTime]['value'] |
| intentRerouteLat2 = int(intentInstall2) - int(t0System) |
| intentRerouteLat3 = int(intentInstall3) - int(t0System) |
| intentRerouteLatPort2 = int(intentInstall2) - int(timestampBeginPtDown) |
| intentRerouteLatPort3 = int(intentInstall3) - int(timestampBeginPtDown) |
| |
| if intentRerouteLat2 > thresholdMin and\ |
| intentRerouteLat2 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat2) |
| main.log.info('ONOS2 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + str(intentRerouteLat2) + ' ms') |
| if intentRerouteLat3 > thresholdMin and\ |
| intentRerouteLat3 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat3) |
| main.log.info('ONOS3 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + str(intentRerouteLat3) + |
| ' ms') |
| if intentRerouteLatPort2 > thresholdMin and\ |
| intentRerouteLatPort2 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort2) |
| main.log.info('ONOS2 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort2) + ' ms') |
| if intentRerouteLatPort3 > thresholdMin and\ |
| intentRerouteLatPort3 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort3) |
| main.log.info('ONOS3 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort2) + ' ms') |
| |
| if clusterCount == 5: |
| intentsJsonStr4 = main.ONOS4cli.intentsEventsMetrics() |
| intentsJsonStr5 = main.ONOS5cli.intentsEventsMetrics() |
| intentsJsonObj4 = json.loads(intentsJsonStr4) |
| intentsJsonObj5 = json.loads(intentsJsonStr5) |
| intentInstall4 = intentsJsonObj4[installTime]['value'] |
| intentInstall5 = intentsJsonObj5[installTime]['value'] |
| intentRerouteLat4 = int(intentInstall4) - int(t0System) |
| intentRerouteLat5 = int(intentInstall5) - int(t0System) |
| intentRerouteLatPort4 =\ |
| int(intentInstall4) - int(timestampBeginPtDown) |
| intentRerouteLatPort5 =\ |
| int(intentInstall5) - int(timestampBeginPtDown) |
| if intentRerouteLat4 > thresholdMin and\ |
| intentRerouteLat4 < thresholdMax and \ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat4) |
| main.log.info('ONOS4 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + str(intentRerouteLat4) + |
| ' ms') |
| if intentRerouteLat5 > thresholdMin and\ |
| intentRerouteLat5 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat5) |
| main.log.info('ONOS5 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + |
| str(intentRerouteLat5) + ' ms') |
| if intentRerouteLatPort4 > thresholdMin and\ |
| intentRerouteLatPort4 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort4) |
| main.log.info('ONOS4 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort4) + ' ms') |
| if intentRerouteLatPort5 > thresholdMin and\ |
| intentRerouteLatPort5 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort5) |
| main.log.info('ONOS5 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort5) + ' ms') |
| |
| if clusterCount == 7: |
| intentsJsonStr6 = main.ONOS6cli.intentsEventsMetrics() |
| intentsJsonStr7 = main.ONOS7cli.intentsEventsMetrics() |
| intentsJsonObj6 = json.loads(intentsJsonStr6) |
| intentsJsonObj7 = json.loads(intentsJsonStr7) |
| intentInstall6 = intentsJsonObj6[installTime]['value'] |
| intentInstall7 = intentsJsonObj7[installTime]['value'] |
| intentRerouteLat6 = int(intentInstall6) - int(t0System) |
| intentRerouteLat7 = int(intentInstall7) - int(t0System) |
| intentRerouteLatPort4 =\ |
| int(intentInstall4) - int(timestampBeginPtDown) |
| intentRerouteLatPort5 =\ |
| int(intentInstall5) - int(timestampBeginPtDown) |
| if intentRerouteLat6 > thresholdMin and\ |
| intentRerouteLat6 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat6) |
| main.log.info('ONOS6 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + |
| str(intentRerouteLat6) + ' ms') |
| if intentRerouteLat7 > thresholdMin and\ |
| intentRerouteLat7 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatSystem.append(intentRerouteLat7) |
| main.log.info('ONOS7 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' system-to-install: ' + |
| str(intentRerouteLat7) + ' ms') |
| if intentRerouteLatPort6 > thresholdMin and\ |
| intentRerouteLatPort6 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort6) |
| main.log.info('ONOS6 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort6) + ' ms') |
| if intentRerouteLatPort7 > thresholdMin and\ |
| intentRerouteLatPort7 < thresholdMax and\ |
| i > numIgnore: |
| rerouteLatPort.append(intentRerouteLatPort7) |
| main.log.info('ONOS7 Intent Reroute Lat' + |
| ' size: ' + str(batchIntentSize) + |
| ' port-to-install: ' + |
| str(intentRerouteLatPort7) + ' ms') |
| |
| time.sleep(5) |
| |
| main.log.info('System: ' + str(rerouteLatSystem)) |
| main.log.info('Port: ' + str(rerouteLatPort)) |
| if rerouteLatSystem: |
| maxRerouteLatSystem = max(rerouteLatSystem) |
| main.log.info('Max system: ' + str(maxRerouteLatSystem)) |
| if rerouteLatPort: |
| maxRerouteLatPort = max(rerouteLatPort) |
| main.log.info('Max port: ' + str(maxRerouteLatPort)) |
| |
| # Bring port back up for next iteration |
| main.Mininet1.handle.sendline('sh ifconfig ' + intfs + ' up') |
| time.sleep(5) |
| |
| # Use 'withdraw' option to withdraw batch intents |
| main.ONOSbench.pushTestIntentsShell( |
| deviceIdList[0] + '/2', deviceIdList[7] + '/2', |
| batchIntentSize, '/tmp/batch_install.txt', |
| ONOSIpList[0], numMult='1', report=False, options='-w') |
| main.log.info('Intents removed and port back up') |
| |
| # NOTE: End iteration loop |
| if batch == 1: |
| batchIntentSize = 10 |
| elif batch == 2: |
| batchIntentSize = 100 |
| elif batch == 3: |
| batchIntentSize = 500 |
| elif batch == 4: |
| batchIntentSize = 1000 |
| main.log.info('Batch intent size increased to ' + str(batchIntentSize)) |
| |
| def CASE4(self, main): |
| """ |
| Increase number of nodes and initiate CLI |
| """ |
| global clusterCount |
| import time |
| import json |
| |
| clusterCount += 2 |
| |
| cellName = main.params[ 'ENV' ][ 'cellName' ] |
| features = main.params[ 'TEST' ][ 'cellStr' ] |
| benchIp = main.params[ 'BENCH' ][ 'ip' ] |
| mininetIp = main.params[ 'MN' ][ 'ip1' ] |
| |
| main.log.report('Increasing cluster size to ' + str(clusterCount)) |
| |
| ONOSIp = [] |
| for i in range( 1, 8 ): |
| ONOSIp.append( main.params[ 'CTRL' ][ 'ip'+str(i) ] ) |
| |
| main.step( "Cleaning environment" ) |
| for i in range( 0, 7 ): |
| main.ONOSbench.onosDie( ONOSIp[i] ) |
| main.log.info( "Uninstalling ONOS "+str(i+1) ) |
| main.ONOSbench.onosUninstall( ONOSIp[i] ) |
| |
| main.step( "Creating new cell file" ) |
| cellIp = [] |
| for node in range( 1, clusterCount + 1 ): |
| cellIp.append( ONOSIp[node] ) |
| main.ONOSbench.createCellFile( benchIp, cellName, |
| mininetIp, str(features), *cellIp ) |
| |
| main.step( "Setting cell definition" ) |
| main.ONOSbench.setCell( cellName ) |
| |
| main.step( "Packaging cell definition" ) |
| main.ONOSbench.onosPackage() |
| |
| for node in range( 1, clusterCount + 1 ): |
| main.ONOSbench.onosInstall( node = ONOSIp[node] ) |
| |
| time.sleep( 20 ) |
| |
| for node in range( 1, clusterCount + 1 ): |
| for i in range( 2 ): |
| isup = main.ONOSbench.isup( ONOSIp[node] ) |
| if isup: |
| main.log.info( "ONOS "+str(node) + " is up\n") |
| assertion = main.TRUE |
| break |
| if not isup: |
| main.log.info( "ONOS" + str(node) + " did not start") |
| |
| for node in range( 1, clusterCount + 1 ): |
| exec "a = main.ONOS%scli.startOnosCli" %str(node) |
| a( ONOSIp[node] ) |
| |
| time.sleep(30) |
| |
| utilities.assert_equals(expect=main.TRUE, actual=assertion, |
| onpass='Scale out to ' + str(clusterCount) + ' nodes successful', |
| onfail='Scale out to ' + str(clusterCount) + ' nodes failed') |
| |