Merge branch 'master' of https://github.com/OPENNETWORKINGLAB/ONLabTest into scale_out
Conflicts:
TestON/drivers/common/cli/onosclidriver.py
TestON/drivers/common/cli/onosdriver.py
TestON/tests/LinkEventTP/LinkEventTP.params
TestON/tests/LinkEventTP/LinkEventTP.py
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 7146211..713388f 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -43,7 +43,7 @@
try:
for key in connectargs:
vars( self )[ key ] = connectargs[ key ]
- self.home = "~/ONOS"
+ self.home = "~/onos"
for key in self.options:
if key == "home":
self.home = self.options[ 'home' ]
@@ -147,12 +147,12 @@
# Expect the cellname in the ONOSCELL variable.
# Note that this variable name is subject to change
# and that this driver will have to change accordingly
- self.handle.expect( "ONOS_CELL" )
+ self.handle.expect(str(cellname))
handleBefore = self.handle.before
handleAfter = self.handle.after
# Get the rest of the handle
- self.handle.sendline( "" )
- self.handle.expect( "\$" )
+ self.handle.sendline("")
+ self.handle.expect("\$")
handleMore = self.handle.before
main.log.info( "Cell call returned: " + handleBefore +
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 30229ef..b030231 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -42,7 +42,7 @@
try:
for key in connectargs:
vars( self )[ key ] = connectargs[ key ]
- self.home = "~/ONOS"
+ self.home = "~/onos"
for key in self.options:
if key == "home":
self.home = self.options[ 'home' ]
@@ -587,12 +587,12 @@
# Expect the cellname in the ONOSCELL variable.
# Note that this variable name is subject to change
# and that this driver will have to change accordingly
- self.handle.expect( "ONOS_CELL" )
+ self.handle.expect(str(cellname))
handleBefore = self.handle.before
handleAfter = self.handle.after
# Get the rest of the handle
- self.handle.sendline( "" )
- self.handle.expect( "\$" )
+ self.handle.sendline("")
+ self.handle.expect("\$")
handleMore = self.handle.before
main.log.info( "Cell call returned: " + handleBefore +
@@ -1003,18 +1003,18 @@
main.cleanup()
main.exit()
- def isup( self, node="" ):
+ def isup(self, node = "", timeout = 120):
"""
Run's onos-wait-for-start which only returns once ONOS is at run
- level 100( ready for use )
+ level 100(ready for use)
Returns: main.TRUE if ONOS is running and main.FALSE on timeout
"""
try:
- self.handle.sendline( "onos-wait-for-start " + node )
- self.handle.expect( "onos-wait-for-start" )
+ self.handle.sendline("onos-wait-for-start " + node )
+ self.handle.expect("onos-wait-for-start")
# NOTE: this timeout is arbitrary"
- i = self.handle.expect( [ "\$", pexpect.TIMEOUT ], timeout=120 )
+ i = self.handle.expect(["\$", pexpect.TIMEOUT], timeout)
if i == 0:
main.log.info( self.name + ": " + node + " is up" )
return main.TRUE
@@ -1464,8 +1464,6 @@
return main.TRUE
elif i == 1:
main.log.info( "ONOS is stopped" )
- return main.FALSE
- else:
main.log.error( "ONOS service failed to check the status" )
main.cleanup()
main.exit()
@@ -1631,3 +1629,173 @@
main.cleanup()
main.exit()
+ def createLinkGraphFile( self, benchIp, ONOSIpList, deviceCount):
+ '''
+ Create/formats the LinkGraph.cfg file based on arguments
+ -only creates a linear topology and connects islands
+ -evenly distributes devices
+ -must be called by ONOSbench
+
+ ONOSIpList - list of all of the node IPs to be used
+
+ deviceCount - number of switches to be assigned
+ '''
+ main.log.step("Creating link graph configuration file." )
+ linkGraphPath = self.home + "/tools/package/etc/linkGraph.cfg"
+ tempFile = "/tmp/linkGraph.cfg"
+
+ linkGraph = open(tempFile, 'w+')
+ linkGraph.write("# NullLinkProvider topology description (config file).\n")
+ linkGraph.write("# The NodeId is only added if the destination is another node's device.\n")
+ linkGraph.write("# Bugs: Comments cannot be appended to a line to be read.\n")
+
+ clusterCount = len(ONOSIpList)
+
+ if type(deviceCount) is int or type(deviceCount) is str:
+ deviceCount = int(deviceCount)
+ switchList = [0]*(clusterCount+1)
+ baselineSwitchCount = deviceCount/clusterCount
+
+ for node in range(1, clusterCount + 1):
+ switchList[node] = baselineSwitchCount
+
+ for node in range(1, (deviceCount%clusterCount)+1):
+ switchList[node] += 1
+
+ if type(deviceCount) is list:
+ main.log.info("Using provided device distribution")
+ switchList = [0]
+ for i in deviceCount:
+ switchList.append(int(i))
+
+ tempList = ['0']
+ tempList.extend(ONOSIpList)
+ ONOSIpList = tempList
+
+ myPort = 6
+ lastSwitch = 0
+ for node in range(1, clusterCount+1):
+ if switchList[node] == 0:
+ continue
+
+ linkGraph.write("graph " + ONOSIpList[node] + " {\n")
+
+ if node > 1:
+ #connect to last device on previous node
+ line = ("\t0:5 -> " + str(lastSwitch) + ":6:" + lastIp + "\n") #ONOSIpList[node-1]
+ linkGraph.write(line)
+
+ lastSwitch = 0
+ for switch in range (0, switchList[node]-1):
+ line = ""
+ line = ("\t" + str(switch) + ":" + str(myPort))
+ line += " -- "
+ line += (str(switch+1) + ":" + str(myPort-1) + "\n")
+ linkGraph.write(line)
+ lastSwitch = switch+1
+ lastIp = ONOSIpList[node]
+
+ #lastSwitch += 1
+ if node < (clusterCount):
+ #connect to first device on the next node
+ line = ("\t" + str(lastSwitch) + ":6 -> 0:5:" + ONOSIpList[node+1] + "\n")
+ linkGraph.write(line)
+
+ linkGraph.write("}\n")
+ linkGraph.close()
+
+ #SCP
+ os.system( "scp " + tempFile + " admin@" + benchIp + ":" + linkGraphPath)
+ main.log.info("linkGraph.cfg creation complete")
+
+ def createNullDevProviderFile( self, benchIp, ONOSIpList, deviceCount, numPorts=10):
+
+ '''
+ benchIp = Ip address of the test bench
+ ONOSIpList = list of Ip addresses of nodes switches will be devided amongst
+ deviceCount = number of switches to distribute
+ numPorts = number of ports per device, when not specified in file it defaults to 10, optional arg
+ '''
+
+ main.log.step("Creating null device provider configuration file." )
+ nullDevicePath = self.home + "/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
+ tempFile = "/tmp/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
+ configFile = open(tempFile, 'w+')
+ clusterCount = len(ONOSIpList)
+
+ if type(deviceCount) is int or type(deviceCount) is str:
+ main.log.info("Creating device distribution")
+ deviceCount = int(deviceCount)
+ switchList = [0]*(clusterCount+1)
+ baselineSwitchCount = deviceCount/clusterCount
+
+ for node in range(1, clusterCount + 1):
+ switchList[node] = baselineSwitchCount
+
+ for node in range(1, (deviceCount%clusterCount)+1):
+ switchList[node] += 1
+
+ if type(deviceCount) is list:
+ main.log.info("Using provided device distribution")
+ switchList = ['0']
+ switchList.extend(deviceCount)
+
+ ONOSIp = [0]
+ ONOSIp.extend(ONOSIpList)
+
+ devicesString = "devConfigs = "
+ for node in range(1, len(ONOSIp)):
+ devicesString += (ONOSIp[node] + ":" + str(switchList[node] ))
+ if node < clusterCount:
+ devicesString += (",")
+
+ configFile.write(devicesString + "\n")
+ if numPorts == 10:
+ configFile.write("#numPorts = 10")
+ else:
+ configFile.write("numPorts = " + str(numPorts))
+
+ configFile.close()
+ os.system( "scp " + tempFile + " admin@" + benchIp + ":" + nullDevicePath)
+
+ def createNullLinkProviderFile( self, benchIp, neighborIpList=0, eventRate=0, onNode=False):
+ '''
+ neighbor list is an optional list of neighbors to be written directly to the file
+ onNode - bool, if true, alternate file path will be used to scp, inteneded
+ for use on cell
+ '''
+
+ main.log.step("Creating Null Link Provider config file")
+ nullLinkPath = self.home + "/tools/package/etc/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
+ if onNode == True:
+ nullLinkPath = "/opt/onos/apache-karaf-3.0.2/etc/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
+ tempFile = "/tmp/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
+ configFile = open(tempFile, 'w+')
+
+ eventRate = int(eventRate)
+
+ if eventRate == 0:
+ configFile.write("#eventRate = \n")
+ else:
+ configFile.write("eventRate = " + str(eventRate) + "\n")
+
+ configFile.write("#cfgFile = /tmp/foo.cfg #If enabled, points to the full path to the topology file.\n")
+
+ if neighborIpList != 0:
+ configFile.write("neighbors = ")
+ for n in range (0, len(neighborIpList)):
+ configFile.write(neighborIpList[n])
+ if n < (len(neighborIpList) - 1):
+ configFile.write(",")
+ else:
+ configFile.write("#neighbors = ")
+
+ configFile.close()
+ if onNode == False:
+ os.system( "scp " + tempFile + " admin@" + benchIp + ":" + nullLinkPath)
+ if onNode == True:
+ os.system( "scp " + tempFile + " sdn@" + benchIp + ":" + nullLinkPath)
+
+
+
+
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.params b/TestON/tests/IntentEventTP/IntentEventTP.params
new file mode 100644
index 0000000..d5dd65c
--- /dev/null
+++ b/TestON/tests/IntentEventTP/IntentEventTP.params
@@ -0,0 +1,66 @@
+<PARAMS>
+
+ <testcases>1,3,2,3,2,3,2,3</testcases>
+
+ <debugMode></debugMode> #nothing means false
+
+ <ENV>
+ <cellName>intentTP</cellName>
+ <cellFeatures>"webconsole,onos-core,onos-api,onos-cli,onos-null,onos-gui,onos-rest,onos-app-metrics,onos-app-metrics-intent,onos-app-metrics-topology"</cellFeatures>
+ </ENV>
+
+ <SCALE>2</SCALE>
+ <availableNodes>7</availableNodes>
+
+ <GIT>
+ <autopull>off</autopull>
+ <checkout>master</checkout>
+ </GIT>
+
+ <CTRL>
+ <USER>admin</USER>
+
+ <ip1>10.128.5.51</ip1>
+ <port1>6633</port1>
+
+ <ip2>10.128.5.52</ip2>
+ <port2>6633</port2>
+
+ <ip3>10.128.5.53</ip3>
+ <port3>6633</port3>
+
+ <ip4>10.128.5.54</ip4>
+ <port4>6633</port4>
+
+ <ip5>10.128.5.65</ip5>
+ <port5>6633</port5>
+
+ <ip6>10.128.5.66</ip6>
+ <port6>6633</port6>
+
+ <ip7>10.128.5.67</ip7>
+ <port7>6633</port7>
+ </CTRL>
+
+ <MN><ip1>10.128.5.55</ip1></MN>
+
+ <BENCH>
+ <user>admin</user>
+ <ip1>10.128.5.55</ip1>
+ </BENCH>
+
+ <TEST>
+ <loadFrom>1,0,0,0,0,0,0</loadFrom> #generate load on server, 1 = generator on
+ <numSwitches>35</numSwitches>
+ <skipCleanInstall>yes</skipCleanInstall>
+ <duration>60</duration>
+ <log_interval>5</log_interval>
+ </TEST>
+
+ <METRICS>
+ <intents_rate>intents-events-metrics|grep "Intent Installed Events"|cut -d ' ' -f7</intents_rate>
+ <intents_withdrawn>intents-events-metrics|grep "Intent Withdrawn Events"|cut -d ' ' -f7</intents_withdrawn>
+ <intents_failed>intents-events-metrics|grep "Intent Failed Events"|cut -d ' ' -f7</intents_failed>
+ </METRICS>
+
+</PARAMS>
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.py b/TestON/tests/IntentEventTP/IntentEventTP.py
new file mode 100644
index 0000000..b1f0e91
--- /dev/null
+++ b/TestON/tests/IntentEventTP/IntentEventTP.py
@@ -0,0 +1,397 @@
+# ScaleOutTemplate --> IntentEventTP
+#
+# CASE1 starts number of nodes specified in param file
+#
+# cameron@onlab.us
+
+import sys
+import os
+import time
+
+
+class IntentEventTP:
+
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ): #This is the initialization case
+ import os.path #this case will clean up all nodes
+ import time #but only node 1 is started in this case
+
+ global clusterCount #number of nodes running
+ global ONOSIp #list of ONOS IP addresses
+ clusterCount = 1
+ ONOSIp = [ 0 ]
+
+ #Load values from params file
+ checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
+ gitPull = main.params[ 'GIT' ][ 'autopull' ]
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+ maxNodes = int(main.params[ 'availableNodes' ])
+ MNip = main.params[ 'MN' ][ 'ip1' ]
+ skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+ numSwitches = main.params[ 'TEST' ][ 'numSwitches' ]
+
+ homeDir = os.path.expanduser('~')
+
+ main.ONOSbench.handle.sendline("export TERM=vt100")
+ dump = main.ONOSbench.handle.expect(":~")
+
+ #Populate ONOSIp with ips from params
+ for i in range(1, maxNodes + 1):
+ ipString = 'ip' + str(i)
+ ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ main.log.step("before initiating enviornment setup")
+ for node in range(1, maxNodes + 1):
+ main.log.info("killing node " + str(node))
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+ #construct the cell file
+ main.log.info("Creating cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MNip,str(Features), *cellIp)
+
+ main.step( "Set Cell" )
+ main.ONOSbench.setCell(cellName)
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, maxNodes + 1):
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ #git
+ main.step( "Git checkout and pull " + checkoutBranch )
+ if gitPull == 'on':
+ checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
+ pullResult = main.ONOSbench.gitPull()
+ else:
+ checkoutResult = main.TRUE
+ pullResult = main.TRUE
+ main.log.info( "Skipped git checkout and pull" )
+
+ #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
+ if skipMvn != "yes":
+ mvnResult = main.ONOSbench.cleanInstall()
+
+ #configure null device provider
+ switchList = [0,int(numSwitches),0,0,0,0,0,0]
+ devicesString = ""
+ for node in range(1, maxNodes + 1):
+ devicesString += (ONOSIp[node] + ":" + str(switchList[node] ))
+ if node < maxNodes:
+ devicesString += (",")
+
+ main.log.info("Configuring device provider: ONOS 1 with " + (numSwitches) + " switches")
+ localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
+ filePath = homeDir + localPath
+ main.log.info(filePath)
+
+ configFile = open(filePath, 'w+')
+ configFile.write("devConfigs = " + devicesString + "\n")
+ configFile.write("#numPorts = 8")
+ configFile.close()
+ main.log.info("DevConfig = " + devicesString)
+ main.log.info("Device provider file written and closed")
+
+ ## configuring null link provider
+ main.log.info(" Configuring null provider to disable flicker" )
+ homeDir = os.path.expanduser('~')
+ main.log.info(homeDir)
+ localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
+ filePath = homeDir + localPath
+ main.log.info(filePath)
+
+ neighborsString = ""
+ for node in range(1, maxNodes + 1):
+ neighborsString += ONOSIp[node]
+ if node < maxNodes:
+ neighborsString += ","
+
+ configFile = open(filePath, 'w+')
+ configFile.write("#eventRate =\n")
+ configFile.write("#cfgFile = /tmp/foo.cfg #If enabled, points to the full path to the topology file.\n")
+ configFile.write("#neighbors = ")
+ configFile.close()
+ main.log.info("Configuration completed")
+
+ main.log.info("Writing link graph configuration file..." )
+ homeDir = os.path.expanduser('~')
+ localPath = "/onos/tools/package/etc/linkGraph.cfg"
+ filePath = homeDir + localPath
+ linkGraph = open(filePath, 'w+')
+ linkGraph.write("# NullLinkProvider topology description (config file).\n")
+ linkGraph.write("# The NodeId is only added if the destination is another node's device.\n")
+ linkGraph.write("# Bugs: Comments cannot be appended to a line to be read.\n")
+
+ myPort = 6
+ for node in range(1, clusterCount+1):
+ linkGraph.write("graph " + ONOSIp[node] + " {\n")
+ for switch in range (0, switchList[node]-1):
+ line = ""
+ line = ("\t" + str(switch) + ":" + str(myPort))
+ line += " -- "
+ line += (str(switch+1) + ":" + str(myPort-1) + "\n")
+ linkGraph.write(line)
+ linkGraph.write("}")
+ linkGraph.close()
+
+ main.step( "Creating ONOS package" )
+ packageResult = main.ONOSbench.onosPackage()
+
+ main.step( "Installing ONOS package" )
+ install1Result = main.ONOSbench.onosInstall( node=ONOSIp[1] )
+
+ main.step( "verify cells" )
+ verifyCellResult = main.ONOSbench.verifyCell()
+
+ main.step( "Checking if ONOS is up yet" )
+ for i in range( 2 ):
+ isup = main.ONOSbench.isup( ONOSIp[1] )
+ if isup:
+ break
+ if not isup:
+ main.log.report( "ONOS1 didn't start!" )
+
+ lastOutput = "--"
+ origin = time.time()
+ clockStarted = False
+ while True:
+ main.ONOSbench.handle.sendline("onos $OC1 summary")
+ main.ONOSbench.handle.expect(":~")
+ clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
+ print("\nBefore: " + str(clusterCheck))
+ if "SCC(s)=1," in clusterCheck and ("devices=" + str(numSwitches)) in clusterCheck: #check for links and devices too
+ break
+ if clusterCheck != lastOutput:
+ sameOutput = False
+ elif clusterCheck == lastOutput:
+ if clockStarted == False:
+ start = time.time()
+ clockStarted = True
+ if time.time() > (start + 30):
+ main.log.error("TIMEOUT EXCEEDED: Clusters have not converged, continuing anyway...")
+ break
+ lastOutput = clusterCheck
+ time.sleep(5)
+
+
+
+ def CASE2( self, main ):
+ # This case increases the cluster size by whatever scale is
+ # Note: 'scale' is the size of the step
+ # if scaling is not a part of your test, simply run this case
+ # once after CASE1 to set up your enviornment for your desired
+ # cluster size. If scaling is a part of you test call this case each time
+ # you want to increase cluster size
+
+ ''
+ 'Increase number of nodes and initiate CLI'
+ ''
+ import time
+ import os.path
+ global clusterCount
+
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ MNip = main.params[ 'MN' ][ 'ip1' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ numSwitches = int(main.params[ 'TEST' ][ 'numSwitches' ])
+ scale = int( main.params[ 'SCALE' ] )
+ maxNodes = int(main.params[ 'availableNodes' ])
+ clusterCount += scale
+ homeDir = os.path.expanduser('~')
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ main.log.step("before initiating enviornment setup")
+ for node in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, maxNodes + 1):
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ #construct the cell file
+ main.log.info("Creating cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MNip,str(Features), *cellIp)
+
+ main.step( "Set Cell" )
+ main.ONOSbench.setCell(cellName)
+
+ baselineSwitchCount = numSwitches/clusterCount
+ switchList = [0,0,0,0,0,0,0,0]
+
+ for node in range(1, clusterCount + 1):
+ switchList[node] = baselineSwitchCount
+
+ for node in range(1, (numSwitches%clusterCount)+1):
+ switchList[node] += 1
+
+ devicesString = ""
+ for node in range(1, maxNodes + 1):
+ devicesString += (ONOSIp[node] + ":" + str(switchList[node] ))
+ if node < maxNodes:
+ devicesString += (",")
+
+ main.log.info("Configuring device provider")
+ localPath = "/onos/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
+ filePath = homeDir + localPath
+ main.log.info(filePath)
+
+ configFile = open(filePath, 'w+')
+ configFile.write("devConfigs = " + devicesString +"\n")
+ configFile.write("# numPorts = 8")
+ configFile.close()
+ main.log.info("DevConfig = " + devicesString)
+ main.log.info("Device provider file written and closed")
+
+ main.log.info("Writing link graph configuration file..." )
+ homeDir = os.path.expanduser('~')
+ localPath = "/onos/tools/package/etc/linkGraph.cfg"
+ filePath = homeDir + localPath
+ linkGraph = open(filePath, 'w+')
+ linkGraph.write("# NullLinkProvider topology description (config file).\n")
+ linkGraph.write("# The NodeId is only added if the destination is another node's device.\n")
+ linkGraph.write("# Bugs: Comments cannot be appended to a line to be read.\n")
+
+ myPort = 6
+ for node in range(1, clusterCount+1):
+ linkGraph.write("graph " + ONOSIp[node] + " {\n")
+ for switch in range (0, switchList[node]-1):
+ line = ""
+ line = ("\t" + str(switch) + ":" + str(myPort))
+ line += " -- "
+ line += (str(switch+1) + ":" + str(myPort-1) + "\n")
+ linkGraph.write(line)
+ linkGraph.write("}\n")
+ linkGraph.close()
+
+ main.step( "Creating ONOS package, preparing to reinstall" )
+ packageResult = main.ONOSbench.onosPackage()
+
+ main.log.report( "Reinstalling on all nodes and increasing cluster size to " + str( clusterCount ) )
+ for node in range(1, clusterCount + 1):
+ main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
+ main.ONOSbench.onosInstall( ONOSIp[node])
+
+ for i in range( 2 ):
+ isup = main.ONOSbench.isup( ONOSIp[node] )
+ if isup:
+ main.log.info("ONOS " + str(node) + " is up\n")
+ break
+ if not isup:
+ main.log.report( "ONOS " + str(node) + " didn't start!" )
+
+ lastOutput = "--"
+ origin = time.time()
+ clockStarted = False
+ while True:
+ main.ONOSbench.handle.sendline("onos $OC1 summary")
+ main.ONOSbench.handle.expect(":~")
+ clusterCheck = ((main.ONOSbench.handle.before).splitlines())[3]
+ print("\nBefore: " + str(clusterCheck))
+ if "SCC(s)=1," in clusterCheck and ("nodes=" + str(clusterCount)) in clusterCheck and ("devices=" + str(numSwitches)) in clusterCheck:
+ break
+ if clusterCheck != lastOutput:
+ sameOutput = False
+ elif clusterCheck == lastOutput:
+ if clockStarted == False:
+ start = time.time()
+ clockStarted = True
+ if time.time() > (start + 60):
+ main.log.error("TIMEOUT EXCEEDED: Clusters have not converged, continuing anyway...")
+ break
+ lastOutput = clusterCheck
+ time.sleep(5)
+
+
+ def CASE3( self, main ):
+ import time
+ import json
+ import string
+ import csv
+
+ main.log.info("Cluster Count = " + str(clusterCount))
+
+ intentsRate = main.params['METRICS']['intents_rate']
+ intentsWithdrawn = main.params[ 'METRICS' ][ 'intents_withdrawn' ]
+ intentsFailed = main.params[ 'METRICS' ][ 'intents_failed' ]
+ testDuration = main.params[ 'TEST' ][ 'duration' ]
+ logInterval = main.params[ 'TEST' ][ 'log_interval' ]
+ debug = main.params[ 'debugMode' ]
+
+ metricList = [intentsRate, intentsWithdrawn, intentsFailed]
+
+ tempsleep =40
+ main.log.info("sleeping " + str(tempsleep))
+ time.sleep(tempsleep)
+
+ loadFrom = ['0']
+ loadFrom.extend((main.params[ 'TEST' ][ 'loadFrom' ]).split(","))
+
+ for node in range(1, clusterCount+1):
+ if loadFrom[node] == "1":
+ cmd = "onos $OC" + str(node) + " feature:install onos-app-intent-perf"
+ main.ONOSbench.handle.sendline(cmd)
+ main.ONOSbench.handle.expect(":~")
+ main.log.info("Load initiated on node " + str(node))
+
+ main.log.info( "Starting test loop for " + str(testDuration) + " seconds...\n" )
+ stop = time.time() + float( testDuration )
+
+ while time.time() < stop:
+ time.sleep( float( logInterval ) )
+ for node in range (1, clusterCount + 1):
+ myResults = ['0','0','0']
+ for metric in metricList:
+
+ onosEnv = "onos $OC" + str(node)
+ cmd = onosEnv + " " + metric
+ main.log.info("COMMAND: " + cmd)
+ main.ONOSbench.handle.sendline( cmd )
+ time.sleep(10)
+ main.ONOSbench.handle.expect(":~")
+ rawResult = main.ONOSbench.handle.before
+ rawResult = (rawResult.splitlines())
+
+ tempResult = "--"
+ for word in rawResult:
+ if debug: print("word: " + word)
+ if "m1" in str(word):
+ tempResult = word
+ break
+
+ if tempResult == "--":
+ main.log.error("WRONG pexepct.before data\n" + str(rawResult))
+ main.log.info("retrying command... ")
+ main.ONOSbench.handle.sendline(cmd)
+ main.ONOSbench.handle.expect(":~")
+ test = main.ONOSbench.handle.before
+ print ("\n\n" + str(test))
+
+ tempResult = round(float(tempResult.replace("m1=","")),1)
+ tempResult = str(tempResult) # easy way to clean up number/prep to log
+ resultIndex = metricList.index(metric)
+ myResults[resultIndex] = tempResult
+
+ main.log.info("\tNode " + str(node))
+ main.log.info("Installed\tWithdrawn\tFailed")
+ main.log.info(myResults[0] + "\t\t " + myResults[1] + "\t\t" + myResults[2] + "\n")
+
+
diff --git a/TestON/tests/IntentEventTP/IntentEventTP.topo b/TestON/tests/IntentEventTP/IntentEventTP.topo
new file mode 100644
index 0000000..30a1467
--- /dev/null
+++ b/TestON/tests/IntentEventTP/IntentEventTP.topo
@@ -0,0 +1,146 @@
+<TOPOLOGY>
+
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS><home>~/onos</home></COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS2cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2cli>
+
+ <ONOS3cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3cli>
+
+ <ONOS4cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4cli>
+
+ <ONOS5cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5cli>
+
+ <ONOS6cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6cli>
+
+ <ONOS7cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7cli>
+
+ <ONOS1>
+ <host>10.128.5.51</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.5.52</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>10</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.128.5.53</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>11</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+ <ONOS4>
+ <host>10.128.5.54</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>12</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4>
+
+
+ <ONOS5>
+ <host>10.128.5.65</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>13</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5>
+
+ <ONOS6>
+ <host>10.128.5.66</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>14</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6>
+
+ <ONOS7>
+ <host>10.128.5.67</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>15</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7>
+
+ </COMPONENT>
+
+</TOPOLOGY>
+
+
+
diff --git a/TestON/tests/IntentsLoad/__init__.py b/TestON/tests/IntentEventTP/__init__.py
similarity index 100%
rename from TestON/tests/IntentsLoad/__init__.py
rename to TestON/tests/IntentEventTP/__init__.py
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.params b/TestON/tests/IntentsLoad/IntentsLoad.params
deleted file mode 100644
index b60621c..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.params
+++ /dev/null
@@ -1,49 +0,0 @@
-<PARAMS>
-
- <testcases>1,2,4</testcases>
-
- <ENV>
- <cellName>cam_cells</cellName>
- </ENV>
-
- <SCALE>1</SCALE>
-
- <GIT>
- <autopull>off</autopull>
- <checkout>master</checkout>
- </GIT>
-
- <CTRL>
- <USER>admin</USER>
- <ip1>10.128.5.51</ip1>
- <port1>6633</port1>
- <ip2>10.128.5.52</ip2>
- <port2>6633</port2>
- <ip3>10.128.5.53</ip3>
- <port3>6633</port3>
- </CTRL>
-
- <MN>
- <ip1>10.128.5.59</ip1>
- <ip2>10.128.5.59</ip2>
- </MN>
-
- <BENCH>
- <user>admin</user>
- <ip1>10.128.5.55</ip1>
- </BENCH>
-
- <TEST>
- <loadstart>curl --fail http://localhost:8181/onos/demo/intents/setup -H "Content-Type:application/json" -d '{"type" : "random"}'</loadstart>
- <loadstop>curl --fail http://localhost:8181/onos/demo/intents/teardown</loadstop>
- <arping>py [h.cmd("arping -c 1 -w 1 10.0.0.225") for h in net.hosts]</arping>
- <metric1>intents-events-metrics|grep "Intent Installed Events"</metric1>
- <duration>90</duration>
- <log_interval>5</log_interval>
- </TEST>
-
- <JSON>
- <intents_rate>intentInstalledRate</intents_rate>
- </JSON>
-
-</PARAMS>
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.py b/TestON/tests/IntentsLoad/IntentsLoad.py
deleted file mode 100644
index f13e60d..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.py
+++ /dev/null
@@ -1,263 +0,0 @@
-# ScaleOutTemplate --> IntentsLoad
-#
-# CASE1 starts number of nodes specified in param file
-#
-# cameron@onlab.us
-
-import sys
-import os
-
-
-class IntentsLoad:
- def __init__(self):
- self.default = ''
-
- def CASE1(self, main):
-
- global cluster_count
- cluster_count = 1
-
- checkout_branch = main.params['GIT']['checkout']
- git_pull = main.params['GIT']['autopull']
- cell_name = main.params['ENV']['cellName']
- BENCH_ip = main.params['BENCH']['ip1']
- BENCH_user = main.params['BENCH']['user']
- ONOS1_ip = main.params['CTRL']['ip1']
- ONOS2_ip = main.params['CTRL']['ip2']
- ONOS3_ip = main.params['CTRL']['ip3']
- MN1_ip = main.params['MN']['ip1']
-
- main.log.step("Cleaning Enviornment...")
- main.ONOSbench.onos_uninstall(ONOS1_ip)
- main.ONOSbench.onos_uninstall(ONOS2_ip)
- main.ONOSbench.onos_uninstall(ONOS3_ip)
-
- main.step("Git checkout and pull "+checkout_branch)
- if git_pull == 'on':
- checkout_result = main.ONOSbench.git_checkout(checkout_branch)
- pull_result = main.ONOSbench.git_pull()
-
- else:
- checkout_result = main.TRUE
- pull_result = main.TRUE
- main.log.info("Skipped git checkout and pull")
-
- #mvn_result = main.ONOSbench.clean_install()
-
- main.step("Set cell for ONOS cli env")
- main.ONOS1cli.set_cell(cell_name)
- main.ONOS2cli.set_cell(cell_name)
- main.ONOS3cli.set_cell(cell_name)
-
- main.step("Creating ONOS package")
- package_result = main.ONOSbench.onos_package() #no file or directory
-
- main.step("Installing ONOS package")
- install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
-
- cell_name = main.params['ENV']['cellName']
- main.step("Applying cell file to environment")
- cell_apply_result = main.ONOSbench.set_cell(cell_name)
- main.step("verify cells")
- verify_cell_result = main.ONOSbench.verify_cell()
-
- main.step("Set cell for ONOS cli env")
- main.ONOS1cli.set_cell(cell_name)
-
- cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip)
-
- def CASE2(self, main):
-
- '''
- Increase number of nodes and initiate CLI
- '''
- import time
-
- global cluster_count
-
- ONOS1_ip = main.params['CTRL']['ip1']
- ONOS2_ip = main.params['CTRL']['ip2']
- ONOS3_ip = main.params['CTRL']['ip3']
- #ONOS4_ip = main.params['CTRL']['ip4']
- #ONOS5_ip = main.params['CTRL']['ip5']
- #ONOS6_ip = main.params['CTRL']['ip6']
- #ONOS7_ip = main.params['CTRL']['ip7']
- cell_name = main.params['ENV']['cellName']
- scale = int(main.params['SCALE'])
-
-
- #Cluster size increased everytime the case is defined
- cluster_count += scale
-
- main.log.report("Increasing cluster size to "+
- str(cluster_count))
- install_result = main.FALSE
-
- if scale == 2:
- if cluster_count == 3:
- main.log.info("Installing nodes 2 and 3")
- install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
- install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
- cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip)
- cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip)
- '''
- elif cluster_count == 5:
-
- main.log.info("Installing nodes 4 and 5")
- node4_result = main.ONOSbench.onos_install(node=ONOS4_ip)
- node5_result = main.ONOSbench.onos_install(node=ONOS5_ip)
- install_result = node4_result and node5_result
- time.sleep(5)
-
- main.ONOS4cli.start_onos_cli(ONOS4_ip)
- main.ONOS5cli.start_onos_cli(ONOS5_ip)
-
- elif cluster_count == 7:
-
- main.log.info("Installing nodes 4 and 5")
- node6_result = main.ONOSbench.onos_install(node=ONOS6_ip)
- node7_result = main.ONOSbench.onos_install(node=ONOS7_ip)
- install_result = node6_result and node7_result
- time.sleep(5)
-
- main.ONOS6cli.start_onos_cli(ONOS6_ip)
- main.ONOS7cli.start_onos_cli(ONOS7_ip)
- '''
- if scale == 1:
- if cluster_count == 2:
- main.log.info("Installing node 2")
- install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
- cli2 = main.ONOS2cli.start_onos_cli(ONOS2_ip)
-
- if cluster_count == 3:
- main.log.info("Installing node 3")
- install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
- cli3 = main.ONOS3cli.start_onos_cli(ONOS3_ip)
-
-
-
- def CASE3(self,main):
- import time
- import json
- import string
-
- intents_rate = main.params['JSON']['intents_rate']
-
- default_sw_port = main.params[ 'CTRL' ][ 'port1' ]
-
- main.Mininet1.assign_sw_controller(sw="1", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="2", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="3", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="4", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="5", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="6", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="7", ip1=ONOS1_ip, port1=default_sw_port )
-
- mn_arp = main.params['TEST']['arping']
- main.Mininet1.handle.sendline(mn_arp)
-
- generate_load = main.params['TEST']['loadstart']
-
- main.ONOS1.handle.sendline(generate_load)
- main.ONOS1.handle.expect("sdn")
- print("before: ", main.ONOS1.handle.before)
- print("after: ",main.ONOS1.handle.after)
-
- load_confirm = main.ONOS1.handle.after
- if load_confirm == "{}":
- main.log.info("Load started")
-
- else:
- main.log.error("Load start failure")
- main.log.error("expected '{}', got: " + str(load_confirm))
-
- devices_json_str = main.ONOS1cli.devices()
- devices_json_obj = json.loads(devices_json_str)
-
- get_metric = main.params['TEST']['metric1']
- test_duration = main.params['TEST']['duration']
- stop = time.time() + float(test_duration)
-
-
- main.log.info("Starting test loop...")
- log_interval = main.params['TEST']['log_interval']
-
- while time.time() < stop:
- time.sleep(float(log_interval))
-
- intents_json_str_1 = main.ONOS1cli.intents_events_metrics()
- intents_json_obj_1 = json.loads(intents_json_str_1)
- main.log.info("Node 1 rate: " + str(intents_json_obj_1[intents_rate]['m1_rate']))
- last_rate_1 = intents_json_obj_1[intents_rate]['m1_rate']
-
- stop_load = main.params['TEST']['loadstop']
- main.ONOS1.handle.sendline(stop_load)
-
-
- msg = ("Final rate on node 1: " + str(last_rate_1))
- main.log.report(msg)
-
- def CASE4(self, main): #2 node scale
- import time
- import json
- import string
-
- intents_rate = main.params['JSON']['intents_rate']
-
- default_sw_port = main.params[ 'CTRL' ][ 'port1' ]
-
- main.Mininet1.assign_sw_controller(sw="1", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="2", ip1=ONOS2_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="3", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="4", ip1=ONOS2_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="5", ip1=ONOS1_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="6", ip1=ONOS2_ip, port1=default_sw_port )
- main.Mininet1.assign_sw_controller(sw="7", ip1=ONOS1_ip, port1=default_sw_port )
-
- mn_arp = main.params['TEST']['arping']
- main.Mininet1.handle.sendline(mn_arp)
-
- generate_load = main.params['TEST']['loadstart']
-
- main.ONOS1.handle.sendline(generate_load)
- main.ONOS2.handle.sendline(generate_load)
-
- devices_json_str_1 = main.ONOS1cli.devices()
- devices_json_obj_1 = json.loads(devices_json_str_1)
- devices_json_str_2 = main.ONOS2cli.devices()
- devices_json_obj_2 = json.loads(devices_json_str_2)
-
- get_metric = main.params['TEST']['metric1']
- test_duration = main.params['TEST']['duration']
- stop = time.time() + float(test_duration)
-
-
- main.log.info("Starting test loop...")
- log_interval = main.params['TEST']['log_interval']
-
- while time.time() < stop:
- time.sleep(float(log_interval))
-
- intents_json_str_1 = main.ONOS1cli.intents_events_metrics()
- intents_json_obj_1 = json.loads(intents_json_str_1)
- main.log.info("Node 1 rate: " + str(intents_json_obj_1[intents_rate]['m1_rate']))
- last_rate_1 = intents_json_obj_1[intents_rate]['m1_rate']
-
- intents_json_str_2 = main.ONOS2cli.intents_events_metrics()
- intents_json_obj_2 = json.loads(intents_json_str_2)
- main.log.info("Node 2 rate: " + str(intents_json_obj_2[intents_rate]['m1_rate']))
- last_rate_2 = intents_json_obj_2[intents_rate]['m1_rate']
-
- stop_load = main.params['TEST']['loadstop']
- main.ONOS1.handle.sendline(stop_load)
- main.ONOS2.handle.sendline(stop_load)
-
-
- msg = ("Final rate on node 1: " + str(last_rate_1))
- main.log.report(msg)
-
- msg = ("Final rate on node 2: " + str(last_rate_2))
- main.log.report(msg)
-
-
-
diff --git a/TestON/tests/IntentsLoad/IntentsLoad.topo b/TestON/tests/IntentsLoad/IntentsLoad.topo
deleted file mode 100644
index 985baf9..0000000
--- a/TestON/tests/IntentsLoad/IntentsLoad.topo
+++ /dev/null
@@ -1,94 +0,0 @@
-<TOPOLOGY>
-
- <COMPONENT>
-
- <ONOSbench>
- <host>10.128.5.55</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOSbench>
-
- <ONOS1cli>
- <host>10.128.5.55</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>2</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1cli>
-
- <ONOS2cli>
- <host>10.128.5.55</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2cli>
-
- <ONOS3cli>
- <host>10.128.5.55</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3cli>
-
- <ONOS1>
- <host>10.128.5.51</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>5</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS1>
-
- <ONOS2>
- <host>10.128.5.52</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>6</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS2>
-
- <ONOS3>
- <host>10.128.5.53</host>
- <user>sdn</user>
- <password>rocks</password>
- <type>OnosDriver</type>
- <connect_order>7</connect_order>
- <COMPONENTS> </COMPONENTS>
- </ONOS3>
-
- <Mininet1>
- <host>10.128.5.59</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>MininetCliDriver</type>
- <connect_order>8</connect_order>
- <COMPONENTS>
- <arg1> --custom ~/topo-intentTPtest.py </arg1>
- <arg2> --mac --topo mytopo </arg2>
- <arg3> </arg3>
- <controller> remote </controller>
- </COMPONENTS>
- </Mininet1>
-
- <Mininet2>
- <host>10.128.5.59</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>RemoteMininetDriver</type>
- <connect_order>9</connect_order>
- <COMPONENTS> </COMPONENTS>
- </Mininet2>
-
- </COMPONENT>
-
-</TOPOLOGY>
-
diff --git a/TestON/tests/LinkEventTP/LinkEventTP.params b/TestON/tests/LinkEventTP/LinkEventTP.params
index 2beb9aa..b4d50e5 100644
--- a/TestON/tests/LinkEventTP/LinkEventTP.params
+++ b/TestON/tests/LinkEventTP/LinkEventTP.params
@@ -1,12 +1,9 @@
<PARAMS>
-
<testcases>1,3,2,3,2,3,2,3</testcases>
-
<ENV>
<cellName>network_tp_test</cellName>
<cellFeatures>"webconsole,onos-core,onos-api,onos-cli,onos-null,onos-rest,onos-app-metrics,onos-app-metrics-intent,onos-app-metrics-topology"</cellFeatures>
</ENV>
-
<SCALE>2</SCALE>
<availableNodes>7</availableNodes>
@@ -38,20 +35,20 @@
<ip1>localhost</ip1>
</BENCH>
- <TEST> # duration = time the test loop runs
- # log_interval = how often the data is reported
- # wait = time between tests, used to let the averages run down
-
- <metric1>topologyLinkEventRate</metric1>
- <metric2>topologyGraphEventRate</metric2>
- <flickerRate>2</flickerRate>
- <duration>180</duration>
- <log_interval>20</log_interval>
- <wait>30</wait>
- <configFile>/onos/tools/package/etc/org.onosproject.net.topology.impl.DefaultTopologyProvider.cfg</configFile>
+ <TEST> # duration = time the test loop runs
+ # log_interval = how often the data is reported
+ # wait = time between tests, used to let the averages run down
+
+ <flickerRates>1000,0,0,0,0,0,0</flickerRates>
+ <devicesPerNode>20,0,0,0,0,0,0</devicesPerNode>
+ <flickerRate>1000</flickerRate>
+ <linkgraphdif>.03</linkgraphdif> # 0-1 indicated link/graph rate dif tolerance
+ <duration>120</duration>
+ <log_interval>15</log_interval>
+ <wait>60</wait>
<skipCleanInstall>yes</skipCleanInstall>
<MN>localhost</MN>
- <logFile>link_event_tp_results_LOG</logFile>
+ <logFile>link_event_tp_results_LOG</logFile>
</TEST>
<JSON>
diff --git a/TestON/tests/LinkEventTP/LinkEventTP.py b/TestON/tests/LinkEventTP/LinkEventTP.py
index 1f5861e..e7d2133 100644
--- a/TestON/tests/LinkEventTP/LinkEventTP.py
+++ b/TestON/tests/LinkEventTP/LinkEventTP.py
@@ -34,14 +34,18 @@
Features = main.params[ 'ENV' ][ 'cellFeatures' ]
skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
flickerRate = main.params[ 'TEST' ][ 'flickerRate']
+ deviceDistribution = (main.params[ 'TEST' ][ 'devicesPerNode']).split(",")
MNip = main.params[ 'TEST' ][ 'MN' ]
-
- #Populate ONOSIp with ips from params
+
+ main.ONOSbench.handle.sendline("export TERM=vt100")
+ main.ONOSbench.handle.expect(":~")
+
+ #Populate ONOSIp with ips from params
for i in range(1, maxNodes + 1):
ipString = 'ip' + str(i)
ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
- #kill off all onos processes
+ #kill off all onos processes
main.log.step("Safety check, killing all ONOS processes")
main.log.step("before initiating enviornment setup")
for node in range(1, maxNodes + 1):
@@ -49,11 +53,10 @@
#construct the cell file
main.log.step("Creating cell file")
- exec "a = main.ONOSbench.createCellFile"
cellIp = []
- for node in range (1, maxNodes + 1):
- cellIp.append(ONOSIp[node])
- a(BENCHIp,cellName,MNip,str(Features), *cellIp) #'0' as third arg because we are not using mininet
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ main.ONOSbench.createCellFile(BENCHIp,cellName,MNip,str(Features), *cellIp)
main.step( "Set Cell" )
main.ONOSbench.setCell(cellName)
@@ -64,6 +67,14 @@
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
+ myDistribution = []
+ for node in range (1, clusterCount + 1):
+ myDistribution.append(deviceDistribution[node-1])
+
+ main.ONOSbench.createLinkGraphFile( BENCHIp,cellIp,myDistribution)
+ main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
+ main.ONOSbench.createNullLinkProviderFile(BENCHIp)
+
#git step - skipable
main.step( "Git checkout and pull " + checkoutBranch )
if gitPull == 'on':
@@ -153,8 +164,8 @@
main.step( "Enviornment setup and verification complete." )
main.ONOS1cli.startOnosCli( ONOSIp[1] )
main.step( "ONOS 1 is up and running." )
-
-
+ main.ONOSbench.handle.expect(":~") #there is a dangling sendline somewhere...
+
def CASE2( self, main ):
# This case increases the cluster size by whatever scale is
# Note: 'scale' is the size of the step
@@ -168,18 +179,55 @@
''
import time
global clusterCount
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ MNip = main.params[ 'TEST' ][ 'MN' ]
+ deviceDistribution = (main.params[ 'TEST' ][ 'devicesPerNode']).split(",")
scale = int( main.params[ 'SCALE' ] )
clusterCount += scale
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[i])
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ myDistribution = []
+ for node in range (1, clusterCount + 1):
+ myDistribution.append(deviceDistribution[node-1])
+
+ main.log.step("Creating cell file")
+ cellIp = []
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ main.ONOSbench.createCellFile(BENCHIp,cellName,MNip,str(Features), *cellIp)
+
+ main.ONOSbench.createLinkGraphFile( BENCHIp,cellIp,myDistribution)
+ main.ONOSbench.createNullDevProviderFile( BENCHIp, cellIp, myDistribution)
+ main.ONOSbench.createNullLinkProviderFile(BENCHIp)
+
+ main.step( "Set Cell" )
+ main.ONOSbench.setCell(cellName)
+
main.log.report( "Increasing cluster size to " + str( clusterCount ) )
- for node in range((clusterCount - scale) + 1, clusterCount + 1):
- main.ONOSbench.onosDie(ONOSIp[node])
+ for node in range(1, clusterCount + 1):
time.sleep(10)
main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
main.ONOSbench.onosInstall( ONOSIp[node] )
exec "a = main.ONOS%scli.startOnosCli" %str(node)
a(ONOSIp[node])
+
+ 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")
+ break
+ if not isup:
+ main.log.report( "ONOS " + str(node) + " didn't start!" )
def CASE3( self, main ):
import time
@@ -187,16 +235,23 @@
import string
import csv
import os.path
+ import requests
+ import numpy
+ sustainability = float(main.params[ 'TEST' ][ 'linkgraphdif' ])
+ flickerRates = (main.params[ 'TEST' ][ 'flickerRates']).split(",")
+ homeDir = os.path.expanduser('~')
linkResult = main.FALSE
scale = int( main.params[ 'SCALE' ] )
testDelay = main.params[ 'TEST' ][ 'wait']
time.sleep( float( testDelay ) )
+
+ for node in range(1, clusterCount + 1):
+ main.log.info("Writing flicker file to node " + str(node))
+ main.ONOSbench.createNullLinkProviderFile( ONOSIp[node], eventRate=flickerRates[node-1], onNode=True )
- metric1 = main.params[ 'TEST' ][ 'metric1' ]
- metric2 = main.params[ 'TEST' ][ 'metric2' ]
testDuration = main.params[ 'TEST' ][ 'duration' ]
stop = time.time() + float( testDuration )
@@ -211,33 +266,62 @@
while time.time() < stop:
time.sleep( float( logInterval ) )
- for node in range(1, clusterCount+1):
- exec "a = main.ONOS%scli.topologyEventsMetrics" %str(node)
- JsonStr[node] = a()
- JsonObj[node] = json.loads( JsonStr[node] )
- msg = ( "Node " + str(node) + " Link Event TP: " + str( JsonObj[node][ metric1 ][ 'm1_rate' ] ) )
+ for node in range(1, clusterCount+1):
+ main.ONOSbench.handle.sendline("""onos $OC1 topology-events-metrics|grep "Topology Link Events"|cut -d ' ' -f7 """)
+ main.ONOSbench.handle.expect(":~")
+ raw = (main.ONOSbench.handle.before).splitlines()
+ myresult = "--"
+ for word in raw:
+ if "m1" in word:
+ myresult = word
+ myresult = myresult.replace("m1=","")
+ break
+ if myresult == "--":
+ main.log.error("Parse error or no data error")
+ msg = ( "Node " + str(node) + " Link Event TP: " + str(myresult) )
main.log.info( msg )
- msg = ( "Node " + str(node) + " Graph Event TP: " + str( JsonObj[node][ metric2 ][ 'm1_rate' ] ) )
+ linkResults[node] = round(float(myresult),2)
+ myLinkRate = round(float(myresult),2)
+
+ main.ONOSbench.handle.sendline("""onos $OC1 topology-events-metrics|grep "Topology Graph Events"|cut -d ' ' -f7 """)
+ main.ONOSbench.handle.expect(":~")
+ raw = (main.ONOSbench.handle.before).splitlines()
+ myresult = "--"
+ for word in raw:
+ if "m1" in word:
+ myresult = word
+ myresult = myresult.replace("m1=","")
+ break
+ if myresult == "--":
+ main.log.error("Parse error or no data error")
+ msg = ( "Node " + str(node) + " Graph Event TP: " + str(myresult) )
main.log.info( msg )
-
- linkResults[node] = round(JsonObj[node][ metric2 ][ 'm1_rate' ],2)
- graphResults[node] = round(JsonObj[node][ metric1 ][ 'm1_rate' ],2)
+ graphResults[node] = round(float(myresult),2)
+ myGraphRate = round(float(myresult),2)
+
+ difLinkGraph = float(myLinkRate - myGraphRate)
+ difLinkGraph = numpy.absolute(difLinkGraph)
+ main.log.info("Node " + str(node) + " abs(Link event - Graph event) = " + str(difLinkGraph))
+ tempx = numpy.divide(difLinkGraph,float(myLinkRate))
+ if tempx > sustainability:
+ main.log.error("Difference in link event rate and graph event rate above " + str(sustainability) + " tolerance")
+ print("")
print("")
print("")
- main.log.info("Final Link Event TP Results on " + str(clusterCount) + " node cluster")
- main.log.info("_______________________________________________")
+ main.log.report("Final Link Event TP Results on " + str(clusterCount) + " node cluster")
+ main.log.report("_______________________________________________")
for node in range(1, clusterCount+1):
- main.log.info("Node " + str(node) + ": " + str(linkResults[node]))
+ main.log.report("Node " + str(node) + ": " + str(linkResults[node]))
print("")
print("")
- main.log.info("Final Graph Event TP Results on " + str(clusterCount) + " node cluster")
- main.log.info("_______________________________________________")
+ main.log.report("Final Graph Event TP Results on " + str(clusterCount) + " node cluster")
+ main.log.report("_______________________________________________")
for node in range(1, clusterCount+1):
- main.log.info("Node " + str(node) + ": " + str(graphResults[node]))
+ main.log.report("Node " + str(node) + ": " + str(graphResults[node]))
#################################################################################
# Data Logging
@@ -248,7 +332,7 @@
flickerRate = main.params[ 'TEST' ][ 'flickerRate']
for node in range (1, clusterCount + 1):
- logFile.write( str(clusterCount) + "," )
+ # replare -> logFile.write( str(clusterCount) + "," + flickerNodes + "," )
logFile.write("'" + "baremetal" + str(node) + "'," )
logFile.write( testDuration + "," )
logFile.write( flickerRate + "," )
diff --git a/TestON/tests/LinkEventTP/LinkEventTP.topo b/TestON/tests/LinkEventTP/LinkEventTP.topo
index 1c48a85..cf5fc94 100644
--- a/TestON/tests/LinkEventTP/LinkEventTP.topo
+++ b/TestON/tests/LinkEventTP/LinkEventTP.topo
@@ -3,7 +3,7 @@
<COMPONENT>
<ONOSbench>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosDriver</type>
@@ -15,7 +15,7 @@
</ONOSbench>
<ONOS1cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -24,7 +24,7 @@
</ONOS1cli>
<ONOS2cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -33,7 +33,7 @@
</ONOS2cli>
<ONOS3cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -42,7 +42,7 @@
</ONOS3cli>
<ONOS4cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -51,7 +51,7 @@
</ONOS4cli>
<ONOS5cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -60,7 +60,7 @@
</ONOS5cli>
<ONOS6cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -69,7 +69,7 @@
</ONOS6cli>
<ONOS7cli>
- <host>localhost</host>
+ <host>10.128.5.55</host>
<user>admin</user>
<password>onos_test</password>
<type>OnosCliDriver</type>
@@ -78,7 +78,7 @@
</ONOS7cli>
<ONOS1>
- <host>10.254.1.201</host>
+ <host>10.128.5.51</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -87,7 +87,7 @@
</ONOS1>
<ONOS2>
- <host>10.254.1.202</host>
+ <host>10.128.5.52</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -96,7 +96,7 @@
</ONOS2>
<ONOS3>
- <host>10.254.1.203</host>
+ <host>10.128.5.53</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -105,7 +105,7 @@
</ONOS3>
<ONOS4>
- <host>10.254.1.204</host>
+ <host>10.128.5.54</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -115,7 +115,7 @@
<ONOS5>
- <host>10.254.1.205</host>
+ <host>10.128.5.65</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -124,7 +124,7 @@
</ONOS5>
<ONOS6>
- <host>10.254.1.206</host>
+ <host>10.128.5.66</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
@@ -133,7 +133,7 @@
</ONOS6>
<ONOS7>
- <host>10.254.1.207</host>
+ <host>10.128.5.67</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
diff --git a/TestON/tests/LinkEventTP/LinkEventTP.topo~181237eeae25f1037910e9d18e4c2c1dc778ce92 b/TestON/tests/LinkEventTP/LinkEventTP.topo~181237eeae25f1037910e9d18e4c2c1dc778ce92
new file mode 100644
index 0000000..1c48a85
--- /dev/null
+++ b/TestON/tests/LinkEventTP/LinkEventTP.topo~181237eeae25f1037910e9d18e4c2c1dc778ce92
@@ -0,0 +1,146 @@
+<TOPOLOGY>
+
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS>
+ <home>~/onos</home>
+ </COMPONENTS>
+
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS2cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2cli>
+
+ <ONOS3cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3cli>
+
+ <ONOS4cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4cli>
+
+ <ONOS5cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5cli>
+
+ <ONOS6cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6cli>
+
+ <ONOS7cli>
+ <host>localhost</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7cli>
+
+ <ONOS1>
+ <host>10.254.1.201</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.254.1.202</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>10</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.254.1.203</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>11</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+ <ONOS4>
+ <host>10.254.1.204</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>12</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4>
+
+
+ <ONOS5>
+ <host>10.254.1.205</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>13</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5>
+
+ <ONOS6>
+ <host>10.254.1.206</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>14</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6>
+
+ <ONOS7>
+ <host>10.254.1.207</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>15</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7>
+
+ </COMPONENT>
+
+</TOPOLOGY>
diff --git a/TestON/tests/ScaleOutTemplate/.ScaleOutTemplate.py.swo b/TestON/tests/ScaleOutTemplate/.ScaleOutTemplate.py.swo
new file mode 100644
index 0000000..a1a28ae
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/.ScaleOutTemplate.py.swo
Binary files differ
diff --git a/TestON/tests/ScaleOutTemplate/README b/TestON/tests/ScaleOutTemplate/README
new file mode 100644
index 0000000..2d5ae1c
--- /dev/null
+++ b/TestON/tests/ScaleOutTemplate/README
@@ -0,0 +1,22 @@
+-------------------
+----Setup Guide----
+-------------------
+
+CASE 1: init case; cleans and sets up enviornment, starts up node 1
+
+CASE 2: Increments scale case; starts up additional nodes, determined by 'SCALE' in params
+ Ex: cluster size = 1 and scale = 2 ==> call CASE2 ==> cluster size = 3
+
+Params file:
+ SCALE = cluster scale step size
+ availableNodes = number of nodes you have provided data for in .topo file
+
+ ENV:
+ cellName = desired name of cell file to be created at runtime
+ cellFeatures = list of features desired
+ NOTE: webconsole, onos-api, onos-cli and onos-openflow are loaded automatically.
+ adjust your test and feature list accordingly
+ TEST:
+ skipCleanInstall = set yes if you want to skip for the sake of test debugging, otherwise set no
+
+
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
index 4dacc99..641d16a 100644
--- a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.params
@@ -2,11 +2,17 @@
<testcases>1,2</testcases>
+ <SCALE>2</SCALE>
+ <availableNodes>7</availableNodes>
+
<ENV>
- <cellName>cam_cells</cellName>
+ <cellName>defaultCell</cellName>
+ <cellFeatures></cellFeatures>
</ENV>
- <SCALE>2</SCALE>
+ <TEST>
+ <skipCleanInstall>yes</skipCleanInstall>
+ </TEST>
<GIT>
<autopull>on</autopull>
@@ -15,12 +21,28 @@
<CTRL>
<USER>admin</USER>
+
<ip1>10.128.5.51</ip1>
<port1>6633</port1>
+
<ip2>10.128.5.52</ip2>
<port2>6633</port2>
+
<ip3>10.128.5.53</ip3>
<port3>6633</port3>
+
+ <ip4>10.128.5.54</ip4>
+ <port4>6633</port4>
+
+ <ip5>10.128.5.65</ip5>
+ <port5>6633</port5>
+
+ <ip6>10.128.5.66</ip6>
+ <port6>6633</port6>
+
+ <ip7>10.128.5.67</ip7>
+ <port7>6633</port7>
+
</CTRL>
<MN>
@@ -32,9 +54,6 @@
<ip1>10.128.5.55</ip1>
</BENCH>
- <TEST>
- </TEST>
-
<JSON>
</JSON>
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
index a75d694..fdcd680 100644
--- a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.py
@@ -4,133 +4,131 @@
#
# cameron@onlab.us
-import sys
-import os
+import sys
+import os.path
class ScaleOutTemplate:
- def __init__(self):
+
+ def __init__( self ):
self.default = ''
-
- def CASE1(self, main):
+
+ def CASE1( self, main ): #This is the initialization case
+ #this case will clean up all nodes
+ import time #but only node 1 is started in this case
- global cluster_count
- cluster_count = 1
+ global clusterCount #number of nodes running
+ global ONOSIp #list of ONOS IP addresses
+ clusterCount = 1
+ ONOSIp = [ 0 ]
- checkout_branch = main.params['GIT']['checkout']
- git_pull = main.params['GIT']['autopull']
- cell_name = main.params['ENV']['cellName']
- BENCH_ip = main.params['BENCH']['ip1']
- BENCH_user = main.params['BENCH']['user']
- ONOS1_ip = main.params['CTRL']['ip1']
- ONOS2_ip = main.params['CTRL']['ip2']
- ONOS3_ip = main.params['CTRL']['ip3']
- MN1_ip = main.params['MN']['ip1']
- main.log.step("Cleaning Enviornment...")
- main.ONOSbench.onos_uninstall(ONOS1_ip)
- main.ONOSbench.onos_uninstall(ONOS2_ip)
- main.ONOSbench.onos_uninstall(ONOS3_ip)
+ #Load values from params file
+ checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
+ gitPull = main.params[ 'GIT' ][ 'autopull' ]
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+ MN1Ip = main.params[ 'MN' ][ 'ip1' ]
+ maxNodes = int(main.params[ 'availableNodes' ])
+ Features = main.params[ 'ENV' ][ 'cellFeatures' ]
+ skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+
+ #Populate ONOSIp with ips from params
+ for i in range(1, maxNodes + 1):
+ ipString = 'ip' + str(i)
+ ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
+
+ #############################
+ tempIp = [ ONOSIp[1],ONOSIp[2],ONOSIp[3],ONOSIp[4],ONOSIp[5]]
+ main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, str(7))
+
+ main.log.info("marker")
+ #############################
+
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ main.log.step("before initiating enviornment setup")
+ for node in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+
+ #construct the cell file
+ main.log.info("Creating cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, maxNodes + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, maxNodes + 1):
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
- main.step("Git checkout and pull "+checkout_branch)
- if git_pull == 'on':
- checkout_result = main.ONOSbench.git_checkout(checkout_branch)
- pull_result = main.ONOSbench.git_pull()
-
- else:
- checkout_result = main.TRUE
- pull_result = main.TRUE
- main.log.info("Skipped git checkout and pull")
+ #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
+ if skipMvn != "yes":
+ mvnResult = main.ONOSbench.cleanInstall()
+
+ #git
+ main.step( "Git checkout and pull " + checkoutBranch )
+ if gitPull == 'on':
+ checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
+ pullResult = main.ONOSbench.gitPull()
- mvn_result = main.ONOSbench.clean_install()
-
- main.step("Set cell for ONOS cli env")
- main.ONOS1cli.set_cell(cell_name)
- main.ONOS2cli.set_cell(cell_name)
- main.ONOS3cli.set_cell(cell_name)
+ else:
+ checkoutResult = main.TRUE
+ pullResult = main.TRUE
+ main.log.info( "Skipped git checkout and pull" )
- main.step("Creating ONOS package")
- package_result = main.ONOSbench.onos_package() #no file or directory
- main.step("Installing ONOS package")
- install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
-
- cell_name = main.params['ENV']['cellName']
- main.step("Applying cell file to environment")
- cell_apply_result = main.ONOSbench.set_cell(cell_name)
- main.step("verify cells")
- verify_cell_result = main.ONOSbench.verify_cell()
-
- main.step("Set cell for ONOS cli env")
- main.ONOS1cli.set_cell(cell_name)
- cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip)
-
-
- def CASE2(self, main):
-
- '''
- Increase number of nodes and initiate CLI
- '''
- import time
+ #main.step( "Set cell for ONOS cli env" )
+ #main.ONOS1cli.setCell( cellName )
- global cluster_count
+ main.step( "Creating ONOS package" )
+ packageResult = main.ONOSbench.onosPackage()
+
+ main.step( "Installing ONOS package" )
+ install1Result = main.ONOSbench.onosInstall( node=ONOSIp[1] )
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ main.step( "Applying cell file to environment" )
+ cellApplyResult = main.ONOSbench.setCell( cellName )
+ main.step( "verify cells" )
+ verifyCellResult = main.ONOSbench.verifyCell()
+
+ main.step( "Set cell for ONOS cli env" )
+ cli1 = main.ONOS1cli.startOnosCli( ONOSIp[1] )
+
- ONOS1_ip = main.params['CTRL']['ip1']
- ONOS2_ip = main.params['CTRL']['ip2']
- ONOS3_ip = main.params['CTRL']['ip3']
- #ONOS4_ip = main.params['CTRL']['ip4']
- #ONOS5_ip = main.params['CTRL']['ip5']
- #ONOS6_ip = main.params['CTRL']['ip6']
- #ONOS7_ip = main.params['CTRL']['ip7']
- cell_name = main.params['ENV']['cellName']
- scale = int(main.params['SCALE'])
-
- #Cluster size increased everytime the case is defined
- cluster_count += scale
-
- main.log.report("Increasing cluster size to "+
- str(cluster_count))
- install_result = main.FALSE
+ def CASE2( self, main ):
+ # This case increases the cluster size by whatever scale is
+ # Note: 'scale' is the size of the step
+ # if scaling is not a part of your test, simply run this case
+ # once after CASE1 to set up your enviornment for your desired
+ # cluster size. If scaling is a part of you test call this case each time
+ # you want to increase cluster size
+
+ ''
+ 'Increase number of nodes and initiate CLI'
+ ''
+ import time
+ global clusterCount
- if scale == 2:
- if cluster_count == 3:
- main.log.info("Installing nodes 2 and 3")
- install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
- install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
- cli2 = main.ONOS1cli.start_onos_cli(ONOS2_ip)
- cli3 = main.ONOS1cli.start_onos_cli(ONOS3_ip)
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ scale = int( main.params[ 'SCALE' ] )
+ clusterCount += scale
- '''
- elif cluster_count == 5:
-
- main.log.info("Installing nodes 4 and 5")
- node4_result = main.ONOSbench.onos_install(node=ONOS4_ip)
- node5_result = main.ONOSbench.onos_install(node=ONOS5_ip)
- install_result = node4_result and node5_result
- time.sleep(5)
-
- main.ONOS4cli.start_onos_cli(ONOS4_ip)
- main.ONOS5cli.start_onos_cli(ONOS5_ip)
-
- elif cluster_count == 7:
-
- main.log.info("Installing nodes 4 and 5")
- node6_result = main.ONOSbench.onos_install(node=ONOS6_ip)
- node7_result = main.ONOSbench.onos_install(node=ONOS7_ip)
- install_result = node6_result and node7_result
- time.sleep(5)
-
- main.ONOS6cli.start_onos_cli(ONOS6_ip)
- main.ONOS7cli.start_onos_cli(ONOS7_ip)
- '''
- if scale == 1:
- if cluster_count == 2:
- main.log.info("Installing node 2")
- install2_result = main.ONOSbench.onos_install(node=ONOS2_ip)
- cli2 = main.ONOS1cli.start_onos_cli(ONOS2_ip)
-
- if cluster_count == 3:
- main.log.info("Installing node 3")
- install3_result = main.ONOSbench.onos_install(node=ONOS3_ip)
- cli3 = main.ONOS1cli.start_onos_cli(ONOS3_ip)
+ main.log.report( "Increasing cluster size to " + str( clusterCount ) )
+ for node in range((clusterCount - scale) + 1, clusterCount + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+ time.sleep(10)
+ main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
+ main.ONOSbench.onosInstall( node=ONOSIp[node])
+ exec "a = main.ONOS%scli.startOnosCli" %str(node)
+ a(ONOSIp[node])
+
diff --git a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo
index 88c4d35..8bd5a9f 100644
--- a/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo
+++ b/TestON/tests/ScaleOutTemplate/ScaleOutTemplate.topo
@@ -37,13 +37,13 @@
<connect_order>4</connect_order>
<COMPONENTS> </COMPONENTS>
</ONOS3cli>
-
+
<ONOS1>
<host>10.128.5.51</host>
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>9</connect_order>
<COMPONENTS> </COMPONENTS>
</ONOS1>
@@ -52,7 +52,7 @@
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
- <connect_order>6</connect_order>
+ <connect_order>10</connect_order>
<COMPONENTS> </COMPONENTS>
</ONOS2>
@@ -61,7 +61,7 @@
<user>sdn</user>
<password>rocks</password>
<type>OnosDriver</type>
- <connect_order>7</connect_order>
+ <connect_order>11</connect_order>
<COMPONENTS> </COMPONENTS>
</ONOS3>
@@ -70,7 +70,7 @@
<user>admin</user>
<password>onos_test</password>
<type>MininetCliDriver</type>
- <connect_order>8</connect_order>
+ <connect_order>16</connect_order>
<COMPONENTS>
<arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
<arg2> --arp --mac --topo mytopo</arg2>
diff --git a/TestON/tests/flowTP1g/.flowTP.py.swo b/TestON/tests/flowTP1g/.flowTP.py.swo
new file mode 100644
index 0000000..85c761b
--- /dev/null
+++ b/TestON/tests/flowTP1g/.flowTP.py.swo
Binary files differ
diff --git a/TestON/tests/IntentsLoad/__init__.py b/TestON/tests/flowTP1g/__init__.py
similarity index 100%
copy from TestON/tests/IntentsLoad/__init__.py
copy to TestON/tests/flowTP1g/__init__.py
diff --git a/TestON/tests/flowTP1g/flowTP1g.params b/TestON/tests/flowTP1g/flowTP1g.params
new file mode 100644
index 0000000..93b3923
--- /dev/null
+++ b/TestON/tests/flowTP1g/flowTP1g.params
@@ -0,0 +1,73 @@
+<PARAMS>
+
+ <testcases>1,3</testcases>
+
+ <isOnBaremetal>true</isOnBaremetal>
+ <SCALE>1</SCALE>
+ <availableNodes>7</availableNodes>
+
+
+
+ <ENV>
+ <cellName>flowTP</cellName>
+ <cellFeatures>webconsole,onos-core,onos-api,onos-cli,onos-null,onos-app-demo,onos-rest,onos-app-metrics,onos-app-metrics-intent,onos-app-metrics-topology</cellFeatures>
+ </ENV>
+
+ <TEST>
+ <skipCleanInstall>yes</skipCleanInstall>
+ <warmUp>4</warmUp> #number of runs to warm up the system
+ <sampleSize>20</sampleSize> #number of runs to take data from
+ <neighbors>6</neighbors> #list of number of neighbors
+ <servers>7</servers> #list of servers
+ <flows>122500</flows>
+ <switches>35</switches>
+
+ <testCMD0>flow-tester.py -f</testCMD0> #base command
+ <testCMD1> -n </testCMD1> #neighbors
+
+ </TEST>
+
+ <GIT>
+ <autopull>on</autopull>
+ <checkout>master</checkout>
+ </GIT>
+
+ <CTRL>
+ <USER>admin</USER>
+
+ <ip1>10.254.1.201</ip1>
+ <port1>6633</port1>
+
+ <ip2>10.254.1.202</ip2>
+ <port2>6633</port2>
+
+ <ip3>10.254.1.203</ip3>
+ <port3>6633</port3>
+
+ <ip4>10.254.1.204</ip4>
+ <port4>6633</port4>
+
+ <ip5>10.254.1.205</ip5>
+ <port5>6633</port5>
+
+ <ip6>10.254.1.206</ip6>
+ <port6>6633</port6>
+
+ <ip7>10.254.1.207</ip7>
+ <port7>6633</port7>
+
+ </CTRL>
+
+ <MN>
+ <ip1>10.254.1.200</ip1>
+ </MN>
+
+ <BENCH>
+ <user>admin</user>
+ <ip1>10.254.1.200</ip1>
+ </BENCH>
+
+ <JSON>
+ </JSON>
+
+</PARAMS>
diff --git a/TestON/tests/flowTP1g/flowTP1g.py b/TestON/tests/flowTP1g/flowTP1g.py
new file mode 100644
index 0000000..b8450fd
--- /dev/null
+++ b/TestON/tests/flowTP1g/flowTP1g.py
@@ -0,0 +1,412 @@
+# ScaleOutTemplate -> flowTP
+#
+# CASE1 starts number of nodes specified in param file
+#
+# cameron@onlab.us
+
+import sys
+import os.path
+
+
+class flowTP1g:
+
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ): #This is the initialization case
+ #this case will clean up all nodes
+ #but only node 1 is started in this case
+
+ global clusterCount #number of nodes running
+ global ONOSIp #list of ONOS IP addresses
+ clusterCount = 1
+ ONOSIp = [ 0 ]
+
+
+ #Load values from params file
+ checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
+ gitPull = main.params[ 'GIT' ][ 'autopull' ]
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+ MN1Ip = main.params[ 'MN' ][ 'ip1' ]
+ maxNodes = int(main.params[ 'availableNodes' ])
+ Features = main.params[ 'ENV' ][ 'cellFeatures' ]
+ skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+
+ main.ONOSbench.handle.sendline("export TERM=vt100")
+
+ #Populate ONOSIp with ips from params
+ for i in range(1, maxNodes + 1):
+ ipString = 'ip' + str(i)
+ ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ main.log.step("before initiating enviornment setup")
+ for node in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+
+ #construct the cell file
+ main.log.info("Creating initial cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range(1, 2):
+ #for node in range (1, maxNodes + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
+
+ main.log.info(cellIp)
+
+ #Uninstall everywhere
+ #main.log.step( "Cleaning Enviornment..." )
+ #for i in range(1, maxNodes + 1):
+ # main.log.info(" Uninstalling ONOS " + str(i) )
+ # main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
+ if skipMvn != "yes":
+ mvnResult = main.ONOSbench.cleanInstall()
+
+ #git
+ main.step( "Git checkout and pull " + checkoutBranch )
+ if gitPull == 'on':
+ checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
+ pullResult = main.ONOSbench.gitPull()
+
+ else:
+ checkoutResult = main.TRUE
+ pullResult = main.TRUE
+ main.log.info( "Skipped git checkout and pull" )
+
+
+ #main.step( "Set cell for ONOS cli env" )
+ #main.ONOS1cli.setCell( cellName )
+
+ main.step( "Creating ONOS package" )
+ packageResult = main.ONOSbench.onosPackage()
+
+ #main.step( "Installing ONOS package" )
+ #install1Result = main.ONOSbench.onosInstall( node=ONOSIp[1] )
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ main.step( "Applying cell file to environment" )
+ cellApplyResult = main.ONOSbench.setCell( cellName )
+ main.step( "verify cells" )
+ verifyCellResult = main.ONOSbench.verifyCell()
+
+ #main.step( "Set cell for ONOS cli env" )
+ #cli1 = main.ONOS1cli.startOnosCli( node=ONOSIp[1] )
+
+ def CASE2( self, main ):
+ # This case increases the cluster size by whatever scale is
+ # Note: 'scale' is the size of the step
+ # if scaling is not a part of your test, simply run this case
+ # once after CASE1 to set up your enviornment for your desired
+ # cluster size. If scaling is a part of you test call this case each time
+ # you want to increase cluster size
+
+ ''
+ 'Increase number of nodes and initiate CLI'
+ ''
+ import time
+ global clusterCount
+
+ scale = int( main.params[ 'SCALE' ] )
+ clusterCount += scale
+
+ main.log.report( "Increasing cluster size to " + str( clusterCount ) )
+ for node in range((clusterCount - scale) + 1, clusterCount + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+ time.sleep(10)
+ main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
+ main.ONOSbench.onosInstall( node=ONOSIp[node])
+ exec "a = main.ONOS%scli.startOnosCli" %str(node)
+ a(ONOSIp[node])
+
+
+ def CASE3( self, main ):
+ #
+ # This is the flow TP test
+ #
+ import os.path
+ import numpy
+ import math
+ import time
+ import datetime
+ import traceback
+
+ testCMD = [ 0,0,0,0 ]
+ warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
+ sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
+ switches = int(main.params[ 'TEST' ][ 'switches' ])
+ neighborList = main.params[ 'TEST' ][ 'neighbors' ]
+ serverList = main.params[ 'TEST' ][ 'servers' ]
+ #flows = int(main.params[ 'TEST' ][ 'flows' ])
+ testCMD[0] = main.params[ 'TEST' ][ 'testCMD0' ]
+ testCMD[1] = main.params[ 'TEST' ][ 'testCMD1' ]
+ maxNodes = main.params[ 'availableNodes' ]
+ onBaremetal = main.params['isOnBaremetal']
+
+
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+ MN1Ip = main.params[ 'MN' ][ 'ip1' ]
+ maxNodes = int(main.params[ 'availableNodes' ])
+ Features = main.params[ 'ENV' ][ 'cellFeatures' ]
+ homeDir = os.path.expanduser('~')
+
+ serverList = serverList.split(",")
+ main.log.info("serverlist: " + str(serverList))
+ neighborList = neighborList.split(",")
+ main.log.info("neightborlist: " + str(neighborList))
+
+ ts = time.time()
+ st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
+ logFileName = "../logs/flowTPResultsLog" + str(st)
+
+ #initialize log file, remove any previous data
+ resultsLog = open("flowTPResultsLog","w+")
+ resultsLog.close()
+
+ #write file to change mem limit to 32 gigs (BAREMETAL ONLY!)
+ if onBaremetal == "true":
+ filename = "/onos/tools/package/bin/onos-service"
+ serviceConfig = open(homeDir + filename, 'w+')
+ serviceConfig.write("#!/bin/bash\n ")
+ serviceConfig.write("#------------------------------------- \n ")
+ serviceConfig.write("# Starts ONOS Apache Karaf container\n ")
+ serviceConfig.write("#------------------------------------- \n ")
+ serviceConfig.write("#export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-7-openjdk-amd64/}\n ")
+ serviceConfig.write("""export JAVA_OPTS="${JAVA_OPTS:--Xms256m -Xmx8G}" \n """)
+ serviceConfig.write("")
+ serviceConfig.write("ONOS_HOME=/opt/onos \n ")
+ serviceConfig.write("")
+ serviceConfig.write("[ -d $ONOS_HOME ] && cd $ONOS_HOME || ONOS_HOME=$(dirname $0)/..\n")
+ serviceConfig.write("""${ONOS_HOME}/apache-karaf-$KARAF_VERSION/bin/karaf "$@" \n """)
+ serviceConfig.close()
+
+ for n in neighborList:
+ for servers in serverList:
+ main.log.step("\tSTARTING TEST")
+ main.log.step("\tSERVERS: \t" + servers )
+ main.log.step("\tNEIGHBORS:\t" + n )
+ main.log.info("=============================================================")
+ main.log.info("=============================================================")
+ #write file to configure nil link
+ ipCSV = ""
+ for i in range (1, int(maxNodes) + 1):
+ tempstr = "ip" + str(i)
+ ipCSV += main.params[ 'CTRL' ][ tempstr ]
+ if i < int(maxNodes):
+ ipCSV +=","
+
+ filename = "/onos/tools/package/etc/org.onosproject.provider.nil.link.impl.NullLinkProvider.cfg"
+ linkConfig = open(homeDir + filename,'w+')
+ linkConfig.write("# eventRate = 2000\n")
+ linkConfig.write("neighbors = " + ipCSV)
+ main.log.info(" NullLinkProvider.cfg: " + ipCSV)
+ linkConfig.close()
+
+
+ #write file for null device
+ filename = "/onos/tools/package/etc/org.onosproject.provider.nil.device.impl.NullDeviceProvider.cfg"
+ deviceConfig = open(homeDir + filename,'w+')
+
+ serversToRun = max(int(servers), (int(n) + 1))
+
+ switchDistribution = [(switches/int(serversToRun))]*int(serversToRun)
+ main.log.info("Switch distribution init: " + str(switchDistribution))
+ remainder = switches % int(serversToRun)
+ for r in range(0, remainder):
+ switchDistribution[r] += 1
+ main.log.info("Switch distribution: " + str(switchDistribution))
+
+ deviceSettings = ""
+ for i in range(0, serversToRun):
+ deviceSettings += (ONOSIp[i+1] + ":" + str(switchDistribution[i]))
+ if i < int(serversToRun)-1:
+ deviceSettings +=","
+
+ deviceConfig.write("devConfigs = " + deviceSettings)
+ main.log.info(" NullDeviceProvider.cfg: " + deviceSettings)
+ deviceConfig.close()
+
+ main.log.info("Creating cell file for this step")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, serversToRun + 1):
+ cellIp.append(ONOSIp[node])
+ main.log.info("Cells are: " + str(cellIp) )
+ a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
+ main.step( "Applying cell file to environment for this step" )
+ cellApplyResult = main.ONOSbench.setCell( cellName )
+ main.step( "verify cells for this step" )
+ verifyCellResult = main.ONOSbench.verifyCell()
+
+ #devide flows
+ flows = int(main.params[ 'TEST' ][ 'flows' ])
+ main.log.info("Flow Target = " + str(flows))
+
+ flows = (flows *max(int(n)+1,int(servers)))/((int(n) + 1)*int(servers)*(switches))
+
+ main.log.info("Flows per switch = " + str(flows))
+ #main.log.info("Total flows = " + str(switches * flows))
+
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ for node in range(1, int(maxNodes) + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, int(maxNodes) + 1):
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ #package
+ main.log.step( "Repackaging onos to reflect config file changes" )
+ main.ONOSbench.onosPackage()
+
+ # install on relevant nodes
+ startNodes = max(int(n), serversToRun)
+ main.log.step( "Reinstalling ONOS on relevant nodes (1-" + str(startNodes) + ")" )
+ for s in range(1, startNodes + 1):
+ main.ONOSbench.onosInstall( node=ONOSIp[s])
+ exec "a = main.ONOS%scli.startOnosCli" %str(s)
+ a(ONOSIp[s])
+
+ main.log.info("sleeping 30 second waiting for null provider bundle...")
+ time.sleep(30)
+
+ #build list of servers in "$OC1, $OC2...." format
+ serverEnvVars = ""
+ for i in range (1,int(servers)+1):
+ serverEnvVars += ("-s " + ONOSIp[i] + " ")
+
+ data = [[""]*int(servers)]*int(sampleSize)
+ maxes = [""]*int(sampleSize)
+
+ for test in range(0, (warmUp + sampleSize)):
+ flowCMD = "python3 " + homeDir + "/onos/tools/test/bin/"
+ flowCMD += testCMD[0] + " " + str(flows) + " " + testCMD[1]
+ flowCMD += " " + str(n) + " " + str(serverEnvVars)
+ print("\n")
+ main.log.info("COMMAND: " + flowCMD)
+ main.log.info("Executing command")
+ main.ONOSbench.handle.sendline(flowCMD)
+ result = []
+ for s in range(0, int(servers)):
+ result.append("q")
+
+ for s in range(0, int(servers)):
+ main.ONOSbench.handle.expect("ms")
+ rawResult = ((main.ONOSbench.handle.before).splitlines())
+
+ rawResult = ((rawResult.pop()).split(" "))
+ main.log.info("Debug: rawResult: " + str(rawResult))
+
+ myresult = int(rawResult[2])
+ main.log.info("Result: " + str(myresult))
+
+ myIp = rawResult[0]
+ main.log.info("myIp: " + myIp)
+
+ serverIndex = int(ONOSIp.index(myIp))
+ main.log.info("server index = " + str(serverIndex))
+
+ result[serverIndex - 1] = myresult
+
+ if test >= warmUp:
+ maxes[test-warmUp] = max(result)
+ main.log.info("Data collection iteration: " + str(test-warmUp) + " of " + str(sampleSize))
+ main.log.info("Throughput time: " + str(maxes[test-warmUp]) + "(ms)")
+
+ if test >= warmUp:
+ data[test-warmUp] = result
+
+ # wait for flows = 0
+ removedFlows = False
+ repeat = 0
+ time.sleep(3)
+ while removedFlows == False & repeat <= 10:
+ main.ONOSbench.handle.sendline("onos $OC1 summary| cut -d ' ' -f6")
+ main.ONOSbench.handle.expect("~")
+ before = main.ONOSbench.handle.before
+ parseTest = before.splitlines()
+ flowsummary = ""
+ for line in parseTest:
+ if "flow" in str(line):
+ flowsummary = line
+ break
+ currentflow = ""
+ for word in flowsummary.split(" "):
+ if "flow" in str(word):
+ currentflow = str(word)
+ currentflow = currentflow.replace(",","")
+ currentflow = currentflow.replace("\n","")
+ main.log.info(currentflow)
+
+ zeroFlow = "flows=0"
+ if zeroFlow in before:
+ removedFlows = True
+ main.log.info("\t Wait 5 sec of cool down...")
+ time.sleep(5)
+
+ time.sleep(5)
+ repeat +=1
+
+ main.log.info("raw data: " + str(data))
+ main.log.info("maxes:" + str(maxes))
+
+
+ # report data
+ print("")
+ main.log.info("\t Results (measurments are in milliseconds)")
+ print("")
+
+ nodeString = ""
+ for i in range(1, int(servers) + 1):
+ nodeString += ("\tNode " + str(i))
+
+ for test in range(0, sampleSize ):
+ main.log.info("\t Test iteration " + str(test + 1) )
+ main.log.info("\t------------------")
+ main.log.info(nodeString)
+ resultString = ""
+
+ for i in range(0, int(servers) ):
+ resultString += ("\t" + str(data[test][i]) )
+ main.log.info(resultString)
+
+ print("\n")
+
+ avgOfMaxes = numpy.mean(maxes)
+ main.log.info("Average of max value from each test iteration: " + str(avgOfMaxes))
+
+ stdOfMaxes = numpy.std(maxes)
+ main.log.info("Standard Deviation of max values: " + str(stdOfMaxes))
+ print("\n\n")
+
+ avgTP = int(main.params[ 'TEST' ][ 'flows' ]) / avgOfMaxes #result in kflows/second
+
+ tp = []
+ for i in maxes:
+ tp.append((int(main.params[ 'TEST' ][ 'flows' ]) / i ))
+
+ stdTP = numpy.std(tp)
+
+ main.log.info("Average thoughput: " + str(avgTP) + " Kflows/second" )
+ main.log.info("Standard deviation of throughput: " + str(stdTP) + " Kflows/second")
+
+ resultsLog = open(logFileName,"a")
+ resultsLog.write(str(main.params[ 'TEST' ][ 'flows' ]) + "," + n + "," + str(servers) + str(switches) + "," + str(warmUp))
+ resultsLog.write("," +str(sampleSize) + "," + str(avgTP) + "," + str(stdTP) + "\n")
+ resultsLog.close()
+
+
diff --git a/TestON/tests/flowTP1g/flowTP1g.topo b/TestON/tests/flowTP1g/flowTP1g.topo
new file mode 100644
index 0000000..0e45e0f
--- /dev/null
+++ b/TestON/tests/flowTP1g/flowTP1g.topo
@@ -0,0 +1,146 @@
+<TOPOLOGY>
+
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS><home>~/onos</home></COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS2cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2cli>
+
+ <ONOS3cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3cli>
+
+ <ONOS4cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4cli>
+
+ <ONOS5cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5cli>
+
+ <ONOS6cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6cli>
+
+ <ONOS7cli>
+ <host>10.254.1.200</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7cli>
+
+ <ONOS1>
+ <host>10.254.1.201</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.254.1.202</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>10</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.254.1.203</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>11</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+ <ONOS4>
+ <host>10.254.1.204</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>12</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4>
+
+
+ <ONOS5>
+ <host>10.254.1.205</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>13</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5>
+
+ <ONOS6>
+ <host>10.254.1.206</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>14</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6>
+
+ <ONOS7>
+ <host>10.254.1.207</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>15</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7>
+
+ </COMPONENT>
+
+</TOPOLOGY>
+
+
+
diff --git a/TestON/tests/IntentsLoad/__init__.py b/TestON/tests/pushTestIntents/__init__.py
similarity index 100%
copy from TestON/tests/IntentsLoad/__init__.py
copy to TestON/tests/pushTestIntents/__init__.py
diff --git a/TestON/tests/pushTestIntents/pushTestIntents.params b/TestON/tests/pushTestIntents/pushTestIntents.params
new file mode 100644
index 0000000..c6b79d5
--- /dev/null
+++ b/TestON/tests/pushTestIntents/pushTestIntents.params
@@ -0,0 +1,66 @@
+<PARAMS>
+
+ <testcases>1,2,3,2,3,2,3</testcases>
+
+ <SCALE>2</SCALE>
+ <availableNodes>7</availableNodes>
+
+ <ENV>
+ <cellName>defaultCell</cellName>
+ <cellFeatures>webconsole,onos-core,onos-api,onos-cli,onos-null,onos-gui,onos-rest,onos-app-metrics,onos-app-metrics-intent,onos-app-metrics-topology </cellFeatures>
+ </ENV>
+
+ <TEST>
+ <skipCleanInstall>yes</skipCleanInstall>
+ <switchCount>7</switchCount>
+ <warmUp>4</warmUp>
+ <sampleSize>10</sampleSize>
+ <wait></wait>
+ <intents>1,1000</intents> #list format, will be split on ','
+ <debug></debug> #empty for false/no
+ </TEST>
+
+ <GIT>
+ <autopull>on</autopull>
+ <checkout>master</checkout>
+ </GIT>
+
+ <CTRL>
+ <USER>admin</USER>
+
+ <ip1>10.128.5.51</ip1>
+ <port1>6633</port1>
+
+ <ip2>10.128.5.52</ip2>
+ <port2>6633</port2>
+
+ <ip3>10.128.5.53</ip3>
+ <port3>6633</port3>
+
+ <ip4>10.128.5.54</ip4>
+ <port4>6633</port4>
+
+ <ip5>10.128.5.65</ip5>
+ <port5>6633</port5>
+
+ <ip6>10.128.5.66</ip6>
+ <port6>6633</port6>
+
+ <ip7>10.128.5.67</ip7>
+ <port7>6633</port7>
+
+ </CTRL>
+
+ <MN>
+ <ip1>10.128.5.59</ip1>
+ </MN>
+
+ <BENCH>
+ <user>admin</user>
+ <ip1>10.128.5.55</ip1>
+ </BENCH>
+
+ <JSON>
+ </JSON>
+
+</PARAMS>
diff --git a/TestON/tests/pushTestIntents/pushTestIntents.py b/TestON/tests/pushTestIntents/pushTestIntents.py
new file mode 100644
index 0000000..d5623cf
--- /dev/null
+++ b/TestON/tests/pushTestIntents/pushTestIntents.py
@@ -0,0 +1,260 @@
+# ScaleOutTemplate
+#
+# CASE1 starts number of nodes specified in param file
+#
+# cameron@onlab.us
+
+import sys
+import os.path
+
+
+class pushTestIntents:
+
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ): #This is the initialization case
+ #this case will clean up all nodes
+ import time #but only node 1 is started in this case
+
+ global clusterCount #number of nodes running
+ global ONOSIp #list of ONOS IP addresses
+ clusterCount = 1
+ ONOSIp = [ 0 ]
+
+
+ #Load values from params file
+ checkoutBranch = main.params[ 'GIT' ][ 'checkout' ]
+ gitPull = main.params[ 'GIT' ][ 'autopull' ]
+ cellName = main.params[ 'ENV' ][ 'cellName' ]
+ Features= main.params[ 'ENV' ][ 'cellFeatures' ]
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ BENCHUser = main.params[ 'BENCH' ][ 'user' ]
+ MN1Ip = main.params[ 'MN' ][ 'ip1' ]
+ maxNodes = int(main.params[ 'availableNodes' ])
+ Features = main.params[ 'ENV' ][ 'cellFeatures' ]
+ skipMvn = main.params[ 'TEST' ][ 'skipCleanInstall' ]
+ switchCount = main.params[ 'TEST' ][ 'switchCount' ]
+
+ #Populate ONOSIp with ips from params
+ for i in range(1, maxNodes + 1):
+ ipString = 'ip' + str(i)
+ ONOSIp.append(main.params[ 'CTRL' ][ ipString ])
+
+ tempIp = []
+ for node in range( 1, clusterCount + 1):
+ tempIp.append(ONOSIp[node])
+
+ #kill off all onos processes
+ main.log.step("Safety check, killing all ONOS processes")
+ main.log.step("before initiating enviornment setup")
+ for node in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+
+ #construct the cell file
+ main.log.info("Creating cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
+
+ main.step( "Applying cell file to environment" )
+ cellApplyResult = main.ONOSbench.setCell( cellName )
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for i in range(1, maxNodes + 1):
+ main.log.info(" Uninstalling ONOS " + str(i) )
+ main.ONOSbench.onosUninstall( ONOSIp[i] )
+
+ #mvn clean install, for debugging set param 'skipCleanInstall' to yes to speed up test
+ if skipMvn != "yes":
+ mvnResult = main.ONOSbench.cleanInstall()
+
+ #git
+ main.step( "Git checkout and pull " + checkoutBranch )
+ if gitPull == 'on':
+ checkoutResult = main.ONOSbench.gitCheckout( checkoutBranch )
+ pullResult = main.ONOSbench.gitPull()
+
+ else:
+ checkoutResult = main.TRUE
+ pullResult = main.TRUE
+ main.log.info( "Skipped git checkout and pull" )
+
+ main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, switchCount)
+ main.ONOSbench.createNullDevProviderFile(BENCHIp, tempIp, switchCount)
+ main.ONOSbench.createNullLinkProviderFile(BENCHIp)
+
+ main.step( "Creating ONOS package" )
+ packageResult = main.ONOSbench.onosPackage()
+
+ main.step( "Installing ONOS package" )
+ install1Result = main.ONOSbench.onosInstall( node=ONOSIp[1] )
+
+ main.step( "verify cells" )
+ verifyCellResult = main.ONOSbench.verifyCell()
+
+ main.step( "Set cell for ONOS cli env" )
+ cli1 = main.ONOS1cli.startOnosCli( ONOSIp[1] )
+
+
+ def CASE2( self, main ):
+ # This case increases the cluster size by whatever scale is
+ # Note: 'scale' is the size of the step
+ # if scaling is not a part of your test, simply run this case
+ # once after CASE1 to set up your enviornment for your desired
+ # cluster size. If scaling is a part of you test call this case each time
+ # you want to increase cluster size
+
+ ''
+ 'Increase number of nodes and initiate CLI'
+ ''
+ import time
+ global clusterCount
+
+ BENCHIp = main.params[ 'BENCH' ][ 'ip1' ]
+ scale = int( main.params[ 'SCALE' ] )
+ clusterCount += scale
+ switchCount = main.params[ 'TEST' ][ 'switchCount' ]
+
+ main.log.info("Creating cell file")
+ exec "a = main.ONOSbench.createCellFile"
+ cellIp = []
+ for node in range (1, clusterCount + 1):
+ cellIp.append(ONOSIp[node])
+ a(BENCHIp,cellName,MN1Ip,str(Features), *cellIp)
+
+ main.step( "Applying cell file to environment" )
+ cellApplyResult = main.ONOSbench.setCell( cellName )
+
+ #Uninstall everywhere
+ main.log.step( "Cleaning Enviornment..." )
+ for node in range(1, maxNodes + 1):
+ main.ONOSbench.onosDie(ONOSIp[node])
+ main.log.info(" Uninstalling ONOS " + str(node) )
+ main.ONOSbench.onosUninstall( ONOSIp[node] )
+
+ tempIp = []
+ for node in range( 1, clusterCount + 1):
+ tempIp.append(ONOSIp[node])
+
+ main.ONOSbench.createLinkGraphFile(BENCHIp, tempIp, switchCount)
+ main.ONOSbench.createNullDevProviderFile(BENCHIp, tempIp, switchCount)
+ main.ONOSbench.createNullLinkProviderFile(BENCHIp)
+
+ main.ONOSbench.onosPackage()
+
+ main.log.report( "Increasing cluster size to " + str( clusterCount ) )
+ for node in range(1, clusterCount + 1):
+ main.log.info("Starting ONOS " + str(node) + " at IP: " + ONOSIp[node])
+ main.ONOSbench.onosInstall( node=ONOSIp[node])
+ if node == 1:
+ main.ONOS1cli.startOnosCli( ONOSIp[1] )
+
+ 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")
+ break
+ if not isup:
+ main.log.report( "ONOS " + str(node) + " didn't start!" )
+
+ def CASE3( self, main ):
+
+ import time
+ import numpy
+
+
+ sampleSize = int(main.params[ 'TEST' ][ 'sampleSize' ])
+ warmUp = int(main.params[ 'TEST' ][ 'warmUp' ])
+ intentsList = (main.params[ 'TEST' ][ 'intents' ]).split(",")
+ switchCount = int(main.params[ 'TEST' ][ 'switchCount' ])
+ debug = main.params[ 'TEST' ][ 'switchCount' ]
+ for i in range(0,len(intentsList)):
+ intentsList[i] = int(intentsList[i])
+
+
+ linkCount = 0
+ while True:
+ main.ONOSbench.handle.sendline("onos $OC1 links|wc -l")
+ main.ONOSbench.handle.expect(":~")
+ linkCount = main.ONOSbench.handle.before
+ if debug: main.log.info("Link Count check: " + linkCount)
+ if str((switchCount*2)-2) in linkCount:
+ break
+
+ links = "--"
+ while "=null:" not in links:
+ if debug: main.log.info("top of loop")
+ main.ONOSbench.handle.sendline("onos $OC1 links")
+ main.ONOSbench.handle.expect(":~")
+ links = main.ONOSbench.handle.before
+ if debug: main.log.info(str(links))
+ time.sleep(1)
+ links = links.splitlines()
+ templinks = links
+
+ tempDevices = []
+ for line in links:
+ temp = line.split(" ")
+ temp[0].replace("src=","")
+ temp[0] = (temp[0].split("/"))[0]
+ tempDevices.append(temp[0])
+
+ tempDevices.sort()
+ devices = []
+ for i in tempDevices:
+ if "src=null" in i:
+ devices.append(i.replace("src=", ""))
+ if debug: main.log.info(str(devices))
+
+ ingress = devices[0]
+ egress = devices.pop()
+ if debug: main.log.info(ingress)
+ if debug: main.log.info(egress)
+
+ for intentSize in intentsList:
+ cmd = "onos $OC1 push-test-intents "
+ cmd += ingress + "/6 "
+ cmd += egress + "/5 "
+ cmd += str(intentSize) + " 1"
+ installed = []
+ withdrawn = []
+
+ for run in range(0, (warmUp + sampleSize)):
+
+ myRawResult = "--"
+ while "ms" not in myRawResult:
+ main.ONOSbench.handle.sendline(cmd)
+ main.ONOSbench.handle.expect(":~")
+ myRawResult = main.ONOSbench.handle.before
+ if debug: main.log.info(myRawResult)
+
+ main.log.info(myRawResult)
+
+ if run >= warmUp:
+ myRawResult = myRawResult.splitlines()
+ for line in myRawResult:
+ if "install" in line:
+ installed.append(line.split(" ")[5])
+ if "withdrawn" in line:
+ withdrawn.append(line.split(" ")[5])
+ print(installed)
+ print(withdrawn)
+
+ main.log.info("Scale: " + str(clusterCount) + "\tIntent batch size: " + str(intentSize))
+
+
+ time.sleep(5)
+
+
+
+
+
+
+
+
+
diff --git a/TestON/tests/pushTestIntents/pushTestIntents.topo b/TestON/tests/pushTestIntents/pushTestIntents.topo
new file mode 100644
index 0000000..30a1467
--- /dev/null
+++ b/TestON/tests/pushTestIntents/pushTestIntents.topo
@@ -0,0 +1,146 @@
+<TOPOLOGY>
+
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS><home>~/onos</home></COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS2cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2cli>
+
+ <ONOS3cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3cli>
+
+ <ONOS4cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4cli>
+
+ <ONOS5cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5cli>
+
+ <ONOS6cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6cli>
+
+ <ONOS7cli>
+ <host>10.128.5.55</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7cli>
+
+ <ONOS1>
+ <host>10.128.5.51</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.5.52</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>10</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.128.5.53</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>11</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+ <ONOS4>
+ <host>10.128.5.54</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>12</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4>
+
+
+ <ONOS5>
+ <host>10.128.5.65</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>13</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5>
+
+ <ONOS6>
+ <host>10.128.5.66</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>14</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6>
+
+ <ONOS7>
+ <host>10.128.5.67</host>
+ <user>sdn</user>
+ <password>rocks</password>
+ <type>OnosDriver</type>
+ <connect_order>15</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7>
+
+ </COMPONENT>
+
+</TOPOLOGY>
+
+
+