1
2
3
4
5
6
7 import sys
8 import os.path
9 import time
10
11
13
16
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
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
50 if init == False:
51 init = True
52 global clusterCount
53 global ONOSIp
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
66 ONOSIp.extend(main.ONOSbench.getOnosIps())
67
68
69 if skipMvn != "yes":
70 mvnResult = main.ONOSbench.cleanInstall()
71
72
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
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
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
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
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":
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
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"
335 resultsDB.write(resultString)
336
337 resultsDB.close()
338
339 main.ONOSbench.logReport(ONOSIp[1], ["ERROR", "WARNING", "EXCEPT"])
340