Package TestON :: Package tests :: Package SCPFintentEventTp :: Module SCPFintentEventTp
[hide private]
[frames] | no frames]

Source Code for Module TestON.tests.SCPFintentEventTp.SCPFintentEventTp

  1  # ScaleOutTemplate 
  2  # 
  3  # CASE1 starts number of nodes specified in param file 
  4  # 
  5  # cameron@onlab.us 
  6   
  7  import sys 
  8  import os.path 
  9  import time 
 10   
 11   
12 -class SCPFintentEventTp:
13
14 - def __init__( self ):
15 self.default = ''
16
17 - def CASE1( self, main ):
18 import sys 19 import os.path 20 import time 21 22 global init 23 try: 24 if type(init) is not bool: 25 init = Fals 26 except NameError: 27 init = False 28 29 #Load values from params file 30 checkoutBranch = main.params[ 'GIT' ][ 'checkout' ] 31 gitPull = main.params[ 'GIT' ][ 'autopull' ] 32 cellName = main.params[ 'ENV' ][ 'cellName' ] 33 Apps = main.params[ 'ENV' ][ 'cellApps' ] 34 BENCHIp = main.params[ 'BENCH' ][ 'ip1' ] 35 BENCHUser = main.params[ 'BENCH' ][ 'user' ] 36 MN1Ip = main.params[ 'MN' ][ 'ip1' ] 37 maxNodes = int(main.params[ 'max' ]) 38 main.maxNodes = maxNodes 39 skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ] 40 cellName = main.params[ 'ENV' ][ 'cellName' ] 41 numSwitches = (main.params[ 'TEST' ][ 'numSwitches' ]).split(",") 42 flowRuleBU = main.params[ 'TEST' ][ 'flowRuleBUEnabled' ] 43 homeDir = os.path.expanduser('~') 44 45 main.exceptions = [0]*11 46 main.warnings = [0]*11 47 main.errors = [0]*11 48 49 # -- INIT SECTION, ONLY RUNS ONCE -- # 50 if init == False: 51 init = True 52 global clusterCount #number of nodes running 53 global ONOSIp #list of ONOS IP addresses 54 global scale 55 global commit 56 57 clusterCount = 0 58 ONOSIp = main.ONOSbench.getOnosIps() 59 print ONOSIp 60 print main.ONOSbench.onosIps.values() 61 62 scale = (main.params[ 'SCALE' ]).split(",") 63 clusterCount = int(scale[0]) 64 65 #Populate ONOSIp with ips from params 66 ONOSIp.extend(main.ONOSbench.getOnosIps()) 67 68 #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test 69 if skipMvn != "yes": 70 mvnResult = main.ONOSbench.cleanInstall() 71 72 #git 73 main.step( "Git checkout and pull " + checkoutBranch ) 74 if gitPull == 'on': 75 checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch ) 76 pullResult = main.ONOSbench.gitPull() 77 78 else: 79 checkoutResult = main.TRUE 80 pullResult = main.TRUE 81 main.log.info( "Skipped git checkout and pull" ) 82 83 main.log.step("Grabbing commit number") 84 commit = main.ONOSbench.getVersion() 85 commit = (commit.split(" "))[1] 86 87 main.log.step("Creating results file") 88 resultsDB = open("/tmp/IntentEventTPDB", "w+") 89 resultsDB.close() 90 91 # -- END OF INIT SECTION --# 92 93 main.log.step("Adjusting scale") 94 print str(scale) 95 print str(ONOSIp) 96 clusterCount = int(scale[0]) 97 scale.remove(scale[0]) 98 99 MN1Ip = ONOSIp[len(ONOSIp) -1] 100 BENCHIp = ONOSIp[len(ONOSIp) -2] 101 102 #kill off all onos processes 103 main.log.step("Safety check, killing all ONOS processes") 104 main.log.step("before initiating enviornment setup") 105 for node in range(maxNodes): 106 main.ONOSbench.onosDie(ONOSIp[node]) 107 108 MN1Ip = ONOSIp[len(ONOSIp) -1] 109 BENCHIp = ONOSIp[len(ONOSIp) -2] 110 111 #Uninstall everywhere 112 main.log.step( "Cleaning Enviornment..." ) 113 for i in range(maxNodes): 114 main.log.info(" Uninstalling ONOS " + str(i) ) 115 main.ONOSbench.onosUninstall( ONOSIp[i] ) 116 main.log.info("Sleep 10 second for uninstall to settle...") 117 time.sleep(10) 118 main.ONOSbench.handle.sendline(" ") 119 main.ONOSbench.handle.expect(":~") 120 121 #construct the cell file 122 main.log.info("Creating cell file") 123 cellIp = [] 124 for node in range (clusterCount): 125 cellIp.append(ONOSIp[node]) 126 127 main.ONOSbench.createCellFile("localhost",cellName,MN1Ip,str(Apps), cellIp) 128 129 main.step( "Set Cell" ) 130 main.ONOSbench.setCell(cellName) 131 132 myDistribution = [] 133 for node in range (clusterCount): 134 myDistribution.append(numSwitches[node]) 135 136 main.step( "Creating ONOS package" ) 137 packageResult = main.ONOSbench.onosPackage() 138 139 main.step( "verify cells" ) 140 verifyCellResult = main.ONOSbench.verifyCell() 141 142 main.log.report( "Initializeing " + str( clusterCount ) + " node cluster." ) 143 for node in range(clusterCount): 144 main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node]) 145 main.ONOSbench.onosInstall( ONOSIp[node]) 146 147 for node in range(clusterCount): 148 for i in range( 2 ): 149 isup = main.ONOSbench.isup( ONOSIp[node] ) 150 if isup: 151 main.log.info("ONOS " + str(node) + " is up\n") 152 break 153 if not isup: 154 main.log.report( "ONOS " + str(node) + " didn't start!" ) 155 main.log.info("Startup sequence complete") 156 157 time.sleep(20) 158 159 main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.store.flow.impl.NewDistributedFlowRuleStore", "backupEnabled false") 160 161 devices = int(clusterCount)*10 162 163 main.log.step("Setting up null provider") 164 for i in range(3): 165 main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(devices)) 166 main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear") 167 main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "enabled true") 168 time.sleep(5) 169 170 main.ONOSbench.handle.sendline("onos $OC1 summary") 171 main.ONOSbench.handle.expect(":~") 172 173 before = main.ONOSbench.handle.before 174 if ("devices=" + str(devices)) in before: 175 break 176 177 main.ONOSbench.handle.sendline("""onos $OC1 "balance-masters" """) 178 main.ONOSbench.handle.expect(":~") 179 print main.ONOSbench.handle.before 180 181 lastOutput = "--" 182 origin = time.time() 183 clockStarted = False 184 while True: 185 186 main.ONOSbench.handle.sendline("") 187 main.ONOSbench.handle.expect(":~") 188 189 main.ONOSbench.handle.sendline("onos $OC1 summary") 190 main.ONOSbench.handle.expect(":~") 191 192 main.log.info("before" + main.ONOSbench.handle.before) 193 clusterCheck = main.ONOSbench.handle.before 194 print("\nBefore: " + str(clusterCheck)) 195 if ("SCC(s)=1,") in clusterCheck: 196 break 197 if clusterCheck != lastOutput: 198 sameOutput = False 199 elif clusterCheck == lastOutput: 200 if clockStarted == False: 201 start = time.time() 202 clockStarted = True 203 if time.time() > (start + 30): 204 main.log.error("TIMEOUT EXCEEDED: Clusters have not converged, continuing anyway...") 205 break 206 lastOutput = clusterCheck 207 time.sleep(5) 208 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
209 - def CASE2( self, main ):
210 import time 211 import json 212 import string 213 import csv 214 import numpy 215 import os.path 216 217 global currentNeighbors 218 neighbors = [] 219 220 try: 221 currentNeighbors 222 except: 223 currentNeighbors = "0" 224 neighbors = ['0'] 225 else: 226 if currentNeighbors == "r": #reset 227 currentNeighbors = "a" 228 neighbors = ['0'] 229 else: 230 currentNeighbors = "r" 231 neighbors = ['a'] 232 233 if clusterCount == 1: 234 currentNeighbors = "r" 235 236 main.log.info("Cluster Count = " + str(clusterCount)) 237 238 intentsRate = main.params['METRICS']['intents_rate'] 239 intentsWithdrawn = main.params[ 'METRICS' ][ 'intents_withdrawn' ] 240 intentsFailed = main.params[ 'METRICS' ][ 'intents_failed' ] 241 testDuration = main.params[ 'TEST' ][ 'duration' ] 242 logInterval = main.params[ 'TEST' ][ 'log_interval' ] 243 debug = main.params[ 'debugMode' ] 244 numKeys = main.params[ 'TEST' ][ 'numKeys' ] 245 cyclePeriod = main.params[ 'TEST' ][ 'cyclePeriod' ] 246 #neighbors = (main.params[ 'TEST' ][ 'neighbors' ]).split(",") 247 metricList = [intentsRate, intentsWithdrawn, intentsFailed] 248 249 for n in range(0, len(neighbors)): 250 if neighbors[n] == 'a': 251 neighbors[n] = str(clusterCount -1) 252 if int(clusterCount) == 1: 253 neighbors = neighbors.pop() 254 255 for n in neighbors: 256 main.log.info("Run with " + n + " neighbors") 257 time.sleep(5) 258 main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numKeys " + numKeys ) 259 main.ONOSbench.handle.expect(":~") 260 main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller numNeighbors " + n ) 261 main.ONOSbench.handle.expect(":~") 262 main.ONOSbench.handle.sendline("onos $OC1 cfg set org.onosproject.intentperf.IntentPerfInstaller cyclePeriod " + cyclePeriod ) 263 main.ONOSbench.handle.expect(":~") 264 265 cmd = "onos $OC1 intent-perf-start" 266 main.ONOSbench.handle.sendline(cmd) 267 main.ONOSbench.handle.expect(":~") 268 main.log.info("Starting ONOS (all nodes) intent-perf from $OC1" ) 269 270 main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" ) 271 stop = time.time() + float( testDuration ) 272 273 while time.time() < stop: 274 time.sleep( float( logInterval ) ) 275 groupResult = [] 276 for node in range (1, clusterCount + 1): 277 groupResult.append(0) 278 279 cmd = " onos-ssh $OC" + str(node) + """ cat /opt/onos/log/karaf.log | grep "SNAPSHOT | Throughput" | tail -1 """ 280 main.log.info("COMMAND: " + str(cmd)) 281 282 x = 0 283 while True: 284 main.ONOSbench.handle.sendline(cmd) 285 time.sleep(6) 286 main.ONOSbench.handle.expect(":~") 287 raw = main.ONOSbench.handle.before 288 if "OVERALL=" in raw: 289 break 290 x += 1 291 if x > 10: 292 main.log.error("Expected output not being recieved... continuing") 293 break 294 time.sleep(2) 295 296 raw = raw.splitlines() 297 splitResults = [] 298 for line in raw: 299 splitResults.extend(line.split(" ")) 300 301 myResult = "--" 302 for field in splitResults: 303 if "OVERALL" in field: 304 myResult = field 305 306 if myResult == "--": 307 main.log.error("Parsing/Pexpect error\n" + str(splitResults)) 308 309 myResult = myResult.replace(";", "") 310 myResult = myResult.replace("OVERALL=","") 311 myResult = float(myResult) 312 groupResult[len(groupResult) -1] = myResult 313 314 main.log.info("Node " + str(node) + " overall rate: " + str(myResult)) 315 316 clusterTotal = str(numpy.sum(groupResult)) 317 main.log.report("Results from this round of polling: " + str(groupResult)) 318 main.log.report("Cluster Total: " + clusterTotal + "\n") 319 320 cmd = "onos $OC1 intent-perf-stop" 321 main.ONOSbench.handle.sendline(cmd) 322 main.ONOSbench.handle.expect(":~") 323 main.log.info("Stopping intentperf" ) 324 325 resultsDB = open("/tmp/IntentEventTPDB", "a") 326 for node in groupResult: 327 328 resultString = "'" + commit + "'," 329 resultString += "'1gig'," 330 resultString += str(clusterCount) + "," 331 resultString += "'baremetal" + str(int(groupResult.index(node)) + 1) + "'," 332 resultString += n + "," 333 resultString += str(node) + "," 334 resultString += str(0) + "\n" #no stddev 335 resultsDB.write(resultString) 336 337 resultsDB.close() 338 339 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
340