Merge "ONOS-2392 SCPFscaleTopo move to production"
diff --git a/TestON/core/teston.py b/TestON/core/teston.py
index e4dbf9d..3b89282 100644
--- a/TestON/core/teston.py
+++ b/TestON/core/teston.py
@@ -35,6 +35,7 @@
import threading
module = new.module("test")
import openspeak
+import subprocess
global path, drivers_path, core_path, tests_path,logs_path
path = re.sub("(core|bin)$", "", os.getcwd())
drivers_path = path+"drivers/"
@@ -167,6 +168,9 @@
driverClass = getattr(driverModule, driverName)
driverObject = driverClass()
+ if ( "OCN" in self.componentDictionary[component]['host'] and main.onoscell ):
+ self.componentDictionary[component]['host'] = main.mnIP
+
connect_result = driverObject.connect(user_name = self.componentDictionary[component]['user'] if ('user' in self.componentDictionary[component].keys()) else getpass.getuser(),
ip_address= self.componentDictionary[component]['host'] if ('host' in self.componentDictionary[component].keys()) else 'localhost',
pwd = self.componentDictionary[component]['password'] if ('password' in self.componentDictionary[component].keys()) else 'changeme',
@@ -683,9 +687,22 @@
sys.exit()
def verifyOnosCell(options):
- # Verifying onoscell option. This could be extended to do even more from here.
+ # Verifying onoscell option
if options.onoscell:
main.onoscell = options.onoscell
+ main.onosIPs = []
+ main.mnIP = ""
+ cellCMD = ". ~/.profile; cell "+main.onoscell
+ output=subprocess.check_output( ["bash", '-c', cellCMD] )
+ splitOutput = output.splitlines()
+ for i in range( len(splitOutput) ):
+ if( re.match( "OCN", splitOutput[i] ) ):
+ mnNode=splitOutput[i].split("=")
+ main.mnIP = mnNode[1]
+ # cell already sorts OC variables in bash, so no need to sort in TestON
+ if( re.match( "OC[1-9]", splitOutput[i] ) ):
+ onosNodes = splitOutput[i].split("=")
+ main.onosIPs.append( onosNodes[1] )
else :
main.onoscell = main.FALSE
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 5e82465..3337ea4 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -938,43 +938,141 @@
main.exit()
return response
- def iperf( self, host1, host2 ):
- main.log.info(
- self.name +
- ": Simple iperf TCP test between two hosts" )
- try:
- cmd1 = 'iperf ' + host1 + " " + host2
- self.handle.sendline( cmd1 )
- self.handle.expect( "mininet>" )
- response = self.handle.before
- if re.search( 'Results:', response ):
- main.log.info( self.name + ": iperf test successful" )
+ def iperftcpAll(self, hosts, timeout=6):
+ '''
+ Runs the iperftcp function with a given set of hosts and specified timeout.
+
+ @parm:
+ timeout: The defualt timeout is 6 sec to allow enough time for a successful test to complete,
+ and short enough to stop an unsuccessful test from quiting and cleaning up mininet.
+ '''
+ for host1 in hosts:
+ for host2 in hosts:
+ if host1 != host2:
+ if self.iperftcp(host1, host2, timeout) == main.FALSE:
+ main.log.error(self.name + ": iperftcp test failed for " + host1 + " and " + host2)
+
+ def iperftcp(self, host1="h1", host2="h2", timeout=6):
+ '''
+ Creates an iperf TCP test between two hosts. Returns main.TRUE if test results
+ are valid.
+
+ @parm:
+ timeout: The defualt timeout is 6 sec to allow enough time for a successful test to complete,
+ and short enough to stop an unsuccessful test from quiting and cleaning up mininet.
+ '''
+ main.log.info( self.name + ": Simple iperf TCP test between two hosts" )
+ try:
+ # Setup the mininet command
+ cmd1 = 'iperf ' + host1 + " " + host2
+ self.handle.sendline( cmd1 )
+ outcome = self.handle.expect( "mininet>", timeout )
+ response = self.handle.before
+
+ # checks if there are results in the mininet response
+ if "Results:" in response:
+ main.log.report(self.name + ": iperf test completed")
+ # parse the mn results
+ response = response.split("\r\n")
+ response = response[len(response)-2]
+ response = response.split(": ")
+ response = response[len(response)-1]
+ response = response.replace("[", "")
+ response = response.replace("]", "")
+ response = response.replace("\'", "")
+
+ # this is the bandwith two and from the two hosts
+ bandwidth = response.split(", ")
+
+ # there should be two elements in the bandwidth list
+ # ['host1 to host2', 'host2 to host1"]
+ if len(bandwidth) == 2:
+ main.log.report(self.name + ": iperf test successful")
return main.TRUE
else:
- main.log.error( self.name + ": iperf test failed" )
+ main.log.error(self.name + ": invalid iperf results")
return main.FALSE
- except pexpect.EOF:
- main.log.error( self.name + ": EOF exception found" )
- main.log.error( self.name + ": " + self.handle.before )
- main.cleanup()
- main.exit()
+ else:
+ main.log.error( self.name + ": iperf test failed" )
+ return main.FALSE
- def iperfudp( self ):
- main.log.info(
- self.name +
- ": Simple iperf TCP test between two " +
- "(optionally specified) hosts" )
- try:
- response = self.execute(
- cmd='iperfudp',
- prompt='mininet>',
- timeout=10 )
+ except pexpect.TIMEOUT:
+ main.log.error( self.name + ": TIMEOUT exception found")
+ main.log.error( self.name + ": Exception: Cannot connect to iperf on port 5001" )
+ return main.FALSE
+
except pexpect.EOF:
main.log.error( self.name + ": EOF exception found" )
main.log.error( self.name + ": " + self.handle.before )
main.cleanup()
- main.exit()
- return response
+ main.exit()
+
+ def iperfudpAll(self, hosts, bandwidth="10M"):
+ '''
+ Runs the iperfudp function with a given set of hosts and specified
+ bandwidth
+
+ @param:
+ bandwidth: the targeted bandwidth, in megabits ('M')
+ '''
+ for host1 in hosts:
+ for host2 in hosts:
+ if host1 != host2:
+ if self.iperfudp(host1, host2, bandwidth) == main.FALSE:
+ main.log.error(self.name + ": iperfudp test failed for " + host1 + " and " + host2)
+
+ def iperfudp( self, bandwidth="10M", host1="h1", host2="h2"):
+
+ '''
+ Creates an iperf UDP test with a specific bandwidth.
+ Returns true if results are valid.
+
+ @param:
+ bandwidth: the targeted bandwidth, in megabits ('M'), to run the test
+ '''
+ main.log.info(self.name + ": Simple iperf UDP test between two hosts")
+ try:
+ # setup the mininet command
+ cmd = 'iperfudp ' + bandwidth + " " + host1 + " " + host2
+ self.handle.sendline(cmd)
+ self.handle.expect("mininet>")
+ response = self.handle.before
+
+ # check if there are in results in the mininet response
+ if "Results:" in response:
+ main.log.report(self.name + ": iperfudp test completed")
+ # parse the results
+ response = response.split("\r\n")
+ response = response[len(response)-2]
+ response = response.split(": ")
+ response = response[len(response)-1]
+ response = response.replace("[", "")
+ response = response.replace("]", "")
+ response = response.replace("\'", "")
+
+ mnBandwidth = response.split(", ")
+
+ # check to see if there are at least three entries
+ # ['bandwidth', 'host1 to host2', 'host2 to host1']
+ if len(mnBandwidth) == 3:
+ # if one entry is blank then something is wrong
+ for item in mnBandwidth:
+ if item == "":
+ main.log.error(self.name + ": Could not parse iperf output")
+ main.log.error(self.name + ": invalid iperfudp results")
+ return main.FALSE
+ # otherwise results are vaild
+ main.log.report(self.name + ": iperfudp test successful")
+ return main.TRUE
+ else:
+ main.log.error(self.name + ": invalid iperfudp results")
+ return main.FALSE
+
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ main.cleanup()
+ main.exit()
def nodes( self ):
main.log.info( self.name + ": List all nodes." )
@@ -1795,7 +1893,10 @@
"""
# Regex patterns to parse dump output
# Example host: <Host h1: h1-eth0:10.0.0.1 pid=5227>
- # or <Host h1: pid=12725>
+ # <Host h1: pid=12725>
+ # <VLANHost h12: h12-eth0.100.100.100:100.1.0.3 pid=30186>
+ # <dualStackHost h19: h19-eth0:10.1.0.9 pid=30200>
+ # <IPv6Host h18: h18-eth0:10.0.0.18 pid=30198>
# NOTE: Does not correctly match hosts with multi-links
# <Host h2: h2-eth0:10.0.0.2,h2-eth1:10.0.1.2 pid=14386>
# FIXME: Fix that
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 37d55fe..e602a71 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -18,6 +18,7 @@
"""
import sys
import time
+import types
import pexpect
import os
import os.path
@@ -58,26 +59,36 @@
self.name = self.options[ 'name' ]
+ # The 'nodes' tag is optional and it is not required in .topo file
for key in self.options:
if key == "nodes":
- # Maximum number of ONOS nodes to run
+ # Maximum number of ONOS nodes to run, if there is any
self.maxNodes = int( self.options[ 'nodes' ] )
break
self.maxNodes = None
+ if self.maxNodes == None or self.maxNodes == "":
+ self.maxNodes = 100
- # Grabs all OC environment variables
+
+ # Grabs all OC environment variables based on max number of nodes
self.onosIps = {} # Dictionary of all possible ONOS ip
try:
if self.maxNodes:
- main.log.info( self.name + ": Creating cluster data with " +
- str( self.maxNodes ) + " maximum number" +
- " of nodes" )
-
for i in range( self.maxNodes ):
envString = "OC" + str( i + 1 )
- self.onosIps[ envString ] = os.getenv( envString )
+ # If there is no more OC# then break the loop
+ if os.getenv( envString ):
+ self.onosIps[ envString ] = os.getenv( envString )
+ else:
+ self.maxNodes = len( self.onosIps )
+ main.log.info( self.name +
+ ": Created cluster data with " +
+ str( self.maxNodes ) +
+ " maximum number" +
+ " of nodes" )
+ break
if not self.onosIps:
main.log.info( "Could not read any environment variable"
@@ -87,7 +98,6 @@
main.log.info( self.name + ": Found " +
str( self.onosIps.values() ) +
" ONOS IPs" )
-
except KeyError:
main.log.info( "Invalid environment variable" )
except Exception as inst:
@@ -100,7 +110,6 @@
main.log.info( self.name +
": Trying to connect to " +
self.ip_address )
-
except KeyError:
main.log.info( "Invalid host name," +
" connecting to local host instead" )
@@ -660,12 +669,14 @@
~/<self.home>/tools/test/cells/
"""
# Variable initialization
- cellDirectory = os.environ["ONOS_ROOT"] + "/tools/test/cells/"
+ cellDirectory = self.home + "/tools/test/cells/"
# We want to create the cell file in the dependencies directory
# of TestON first, then copy over to ONOS bench
tempDirectory = "/tmp/"
# Create the cell file in the directory for writing ( w+ )
cellFile = open( tempDirectory + fileName, 'w+' )
+ if isinstance( onosIpAddrs, types.StringType ):
+ onosIpAddrs = [ onosIpAddrs ]
# App string is hardcoded environment variables
# That you may wish to use by default on startup.
@@ -711,8 +722,8 @@
# Note that even if TestON is located on the same cluster
# as ONOS bench, you must setup passwordless ssh
# between TestON and ONOS bench in order to automate the test.
- os.system( "scp " + tempDirectory + fileName +
- " admin@" + benchIp + ":" + cellDirectory )
+ os.system( "scp " + tempDirectory + fileName + " " +
+ self.user_name + "@" + self.ip_address + ":" + cellDirectory )
return main.TRUE
@@ -1917,7 +1928,7 @@
linkGraph.close()
#SCP
- os.system( "scp " + tempFile + " admin@" + benchIp + ":" + linkGraphPath)
+ os.system( "scp " + tempFile + " " + self.user_name + "@" + benchIp + ":" + linkGraphPath)
main.log.info("linkGraph.cfg creation complete")
def configNullDev( self, ONOSIpList, deviceCount, numPorts=10):
@@ -2105,51 +2116,7 @@
main.log.info(outputString)
main.log.info("================================================================\n")
- return totalHits
-
- def getOnosIPfromCell(self):
- '''
- Returns the ONOS node names and their IP addresses as defined in the cell and applied to shell environment
- Example output return: ['10.128.40.41','10.128.40.42','10.128.40.43']. This will work even if the Mininet is
- not part of the cell definition and also if there are multiple mininets, just by using static hostname
- in TOPO file.
- '''
- import re
- try:
- # Clean handle by sending empty and expecting $
- self.handle.sendline( "" )
- self.handle.expect( "\$" )
- self.handle.sendline( "cell" )
- self.handle.expect( "\$" )
- handleBefore = self.handle.before
- handleAfter = self.handle.after
- # Get the rest of the handle
- self.handle.sendline( "" )
- self.handle.expect( "\$" )
- handleMore = self.handle.before
- ipList = []
- cellOutput = handleBefore + handleAfter + handleMore
- cellOutput = cellOutput.replace("\r\r","")
- cellOutput = cellOutput.splitlines()
- for i in range( len(cellOutput) ):
- if( re.match( "OC", cellOutput[i] ) ):
- if( re.match( "OCI", cellOutput[i] ) or re.match( "OCN", cellOutput[i] ) ):
- continue
- else:
- onosIP = cellOutput[i].split("=")
- ipList.append(onosIP[1])
- return ipList
- except pexpect.ExceptionPexpect as e:
- main.log.error( self.name + ": Pexpect exception found of type " +
- str( type( e ) ) )
- main.log.error ( e.get_trace() )
- main.log.error( self.name + ": " + self.handle.before )
- main.cleanup()
- main.exit()
- except Exception:
- main.log.exception( self.name + ": Uncaught exception!" )
- main.cleanup()
- main.exit()
+ return totalHits
def copyMininetFile( self, fileName, localPath, userName, ip,
mnPath='~/mininet/custom/', timeout = 60 ):
diff --git a/TestON/drivers/common/clidriver.py b/TestON/drivers/common/clidriver.py
index f75df5f..b4d0251 100644
--- a/TestON/drivers/common/clidriver.py
+++ b/TestON/drivers/common/clidriver.py
@@ -87,24 +87,31 @@
refused,
'teston>',
'>|#|\$' ],
- 120 )
+ 120 )
if i == 0: # Accept key, then expect either a password prompt or access
main.log.info( "ssh key confirmation received, send yes" )
self.handle.sendline( 'yes' )
i = 5 # Run the loop again
- continue
- if i == 1:
+ continue
+ if i == 1: # Password required
if self.pwd:
main.log.info(
- "ssh connection asked for password, gave password" )
- self.handle.sendline( self.pwd )
- self.handle.expect( '>|#|\$' )
+ "ssh connection asked for password, gave password" )
else:
- # FIXME: TestON does not support a username having no
- # password
- main.log.error( "Server asked for password, but none was "
- "given in the .topo file" )
- main.exit()
+ main.log.info( "Server asked for password, but none was "
+ "given in the .topo file. Trying "
+ "no password.")
+ self.pwd = ""
+ self.handle.sendline( self.pwd )
+ j = self.handle.expect( [
+ '>|#|\$',
+ 'password:|Password:',
+ pexpect.EOF,
+ pexpect.TIMEOUT ],
+ 120 )
+ if j != 0:
+ main.log.error( "Incorrect Password" )
+ return main.FALSE
elif i == 2:
main.log.error( "Connection timeout" )
return main.FALSE
@@ -146,11 +153,11 @@
result = super( CLI, self ).execute( self )
defaultPrompt = '.*[$>\#]'
args = utilities.parse_args( [
- "CMD",
+ "CMD",
"TIMEOUT",
"PROMPT",
"MORE" ],
- **execparams )
+ **execparams )
expectPrompt = args[ "PROMPT" ] if args[ "PROMPT" ] else defaultPrompt
self.LASTRSP = ""
@@ -165,12 +172,12 @@
self.handle.sendline( cmd )
self.lastCommand = cmd
index = self.handle.expect( [
- expectPrompt,
+ expectPrompt,
"--More--",
'Command not found.',
pexpect.TIMEOUT,
"^:$" ],
- timeout=timeoutVar )
+ timeout=timeoutVar )
if index == 0:
self.LASTRSP = self.LASTRSP + \
self.handle.before + self.handle.after
@@ -264,19 +271,19 @@
ssh_newkey = 'Are you sure you want to continue connecting'
refused = "ssh: connect to host " + \
ip_address + " port 22: Connection refused"
-
- cmd = 'scp ' + str( user_name ) + '@' + str( ip_address ) + ':' + \
- str( filepath ) + ' ' + str(dst_path )
+
+ cmd = 'scp ' + str( user_name ) + '@' + str( ip_address ) + ':' + \
+ str( filepath ) + ' ' + str(dst_path )
main.log.info( "Sending: " + cmd )
self.handle = pexpect.spawn( cmd )
i = self.handle.expect( [
- ssh_newkey,
- 'password:',
- pexpect.EOF,
- pexpect.TIMEOUT,
- refused ],
- 120 )
+ ssh_newkey,
+ 'password:',
+ pexpect.EOF,
+ pexpect.TIMEOUT,
+ refused ],
+ 120 )
if i == 0:
main.log.info( "ssh key confirmation received, send yes" )
@@ -309,4 +316,3 @@
print self.handle.before
return self.handle
-
diff --git a/TestON/tests/CHOtest/CHOtest.py b/TestON/tests/CHOtest/CHOtest.py
index 20daf09..994a710 100644
--- a/TestON/tests/CHOtest/CHOtest.py
+++ b/TestON/tests/CHOtest/CHOtest.py
@@ -34,7 +34,6 @@
karafTimeout = main.params['CTRL']['karafCliTimeout']
main.newTopo = ""
main.CLIs = []
- main.onosIPs = []
for i in range( 1, int(main.numCtrls) + 1 ):
main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
@@ -47,8 +46,6 @@
if ( main.onoscell ):
cellName = main.onoscell
cell_result = main.ONOSbench.setCell( cellName )
- onosNodes = main.ONOSbench.getOnosIPfromCell()
- main.onosIPs = onosNodes
utilities.assert_equals( expect=main.TRUE, actual=cell_result,
onpass="Test step PASS",
onfail="Test step FAIL" )
diff --git a/TestON/tests/CHOtest/CHOtest.topo b/TestON/tests/CHOtest/CHOtest.topo
index 8b596e7..8053e31 100644
--- a/TestON/tests/CHOtest/CHOtest.topo
+++ b/TestON/tests/CHOtest/CHOtest.topo
@@ -5,11 +5,9 @@
<host>localhost</host>
<user>admin</user>
<password></password>
- <type>OnosDriver</type>
- <connect_order>1</connect_order>
- <COMPONENTS>
- <home>~/ONOS</home>
- </COMPONENTS>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
</ONOSbench>
<ONOScli1>
diff --git a/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py b/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
index 304ed29..13877b2 100644
--- a/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
+++ b/TestON/tests/FUNCintent/Dependency/FuncIntentFunction.py
@@ -48,6 +48,9 @@
host1 - Name of first host
host2 - Name of second host
Optional:
+ onosNode - ONOS node to install the intents in main.CLIs[ ]
+ 0 by default so that it will always use the first
+ ONOS node
host1Id - ONOS id of the first host eg. 00:00:00:00:00:01/-1
host2Id - ONOS id of the second host
mac1 - Mac address of first host
@@ -258,6 +261,9 @@
host1 - Name of first host
host2 - Name of second host
Optional:
+ onosNode - ONOS node to install the intents in main.CLIs[ ]
+ 0 by default so that it will always use the first
+ ONOS node
deviceId1 - ONOS device id of the first switch, the same as the
location of the first host eg. of:0000000000000001/1,
located at device 1 port 1
@@ -473,6 +479,9 @@
name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
hostNames - List of host names
Optional:
+ onosNode - ONOS node to install the intents in main.CLIs[ ]
+ 0 by default so that it will always use the first
+ ONOS node
devices - List of device ids in the same order as the hosts
in hostNames
ports - List of port numbers in the same order as the device in
@@ -722,6 +731,9 @@
name - Type of point intent to add eg. IPV4 | VLAN | Dualstack
hostNames - List of host names
Optional:
+ onosNode - ONOS node to install the intents in main.CLIs[ ]
+ 0 by default so that it will always use the first
+ ONOS node
devices - List of device ids in the same order as the hosts
in hostNames
ports - List of port numbers in the same order as the device in
diff --git a/TestON/tests/FUNCintent/FUNCintent.params b/TestON/tests/FUNCintent/FUNCintent.params
index e1021d3..1daba68 100644
--- a/TestON/tests/FUNCintent/FUNCintent.params
+++ b/TestON/tests/FUNCintent/FUNCintent.params
@@ -1,6 +1,6 @@
<PARAMS>
- <testcases>1,2,11,12,13,1001,1002,1003,1004</testcases>
+ <testcases>1,2,11,12,13,1000,2000,3000,4000</testcases>
<SCALE>
<size>1,3</size>
@@ -32,4 +32,12 @@
<links>20</links>
</MININET>
+ # Intent tests params
+ <SDNIP>
+ <tcpProto>6</tcpProto>
+ <icmpProto>1</icmpProto>
+ <srcPort>5001</srcPort>
+ <dstPort>5001</dstPort>
+ </SDNIP>
+
</PARAMS>
diff --git a/TestON/tests/FUNCintent/FUNCintent.py b/TestON/tests/FUNCintent/FUNCintent.py
index 0a8092f..1e10db3 100644
--- a/TestON/tests/FUNCintent/FUNCintent.py
+++ b/TestON/tests/FUNCintent/FUNCintent.py
@@ -316,7 +316,7 @@
main.cleanup()
main.exit()
- def CASE1001( self, main ):
+ def CASE1000( self, main ):
"""
Add host intents between 2 host:
- Discover hosts
@@ -349,8 +349,8 @@
main.case( "Add host intents between 2 host" )
- stepResult = main.TRUE
main.step( "IPV4: Add host intents between h1 and h9" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
onosNode='0',
name='IPV4',
@@ -367,8 +367,8 @@
onpass="IPV4: Add host intent successful",
onfail="IPV4: Add host intent failed" )
- stepResult = main.TRUE
main.step( "DUALSTACK1: Add host intents between h3 and h11" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='DUALSTACK',
host1='h3',
@@ -385,8 +385,8 @@
" successful",
onfail="DUALSTACK1: Add host intent failed" )
- stepResult = main.TRUE
main.step( "DUALSTACK2: Add host intents between h1 and h11" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='DUALSTACK2',
host1='h1',
@@ -401,8 +401,8 @@
" successful",
onfail="DUALSTACK2: Add host intent failed" )
- stepResult = main.TRUE
main.step( "1HOP: Add host intents between h1 and h3" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='1HOP',
host1='h1',
@@ -414,8 +414,8 @@
" successful",
onfail="1HOP: Add host intent failed" )
- stepResult = main.TRUE
main.step( "VLAN1: Add vlan host intents between h4 and h12" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='VLAN1',
host1='h4',
@@ -432,8 +432,8 @@
" intent successful",
onfail="VLAN1: Add vlan host intent failed" )
- stepResult = main.TRUE
main.step( "VLAN2: Add inter vlan host intents between h13 and h20" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='VLAN2',
host1='h13',
@@ -446,7 +446,7 @@
onfail="VLAN2: Add inter vlan host" +
" intent failed" )
- def CASE1002( self, main ):
+ def CASE2000( self, main ):
"""
Add point intents between 2 hosts:
- Get device ids | ports
@@ -479,9 +479,9 @@
main.case( "Add point intents between 2 devices" )
- stepResult = main.TRUE
# No option point intents
main.step( "NOOPTION: Add point intents between h1 and h9" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.pointIntent(
main,
name="NOOPTION",
@@ -493,13 +493,13 @@
sw2="s2",
expectedLink=18 )
- stepResult = main.TRUE
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="NOOPTION: Add point intent successful",
onfail="NOOPTION: Add point intent failed" )
stepResult = main.TRUE
+ main.step( "IPV4: Add point intents between h1 and h9" )
stepResult = main.intentFunction.pointIntent(
main,
name="IPV4",
@@ -528,6 +528,7 @@
onpass="IPV4: Add point intent successful",
onfail="IPV4: Add point intent failed" )
+ main.step( "IPV4_2: Add point intents between h1 and h9" )
stepResult = main.TRUE
stepResult = main.intentFunction.pointIntent(
main,
@@ -536,7 +537,7 @@
host2="h9",
deviceId1="of:0000000000000005/1",
deviceId2="of:0000000000000006/1",
- ipProto=1,
+ ipProto="",
ip1="",
ip2="",
tcp1="",
@@ -550,8 +551,66 @@
onpass="IPV4_2: Add point intent successful",
onfail="IPV4_2: Add point intent failed" )
+ main.step( "SDNIP-TCP: Add point intents between h1 and h9" )
stepResult = main.TRUE
+ mac1 = main.hostsData[ 'h1' ][ 'mac' ]
+ mac2 = main.hostsData[ 'h9' ][ 'mac' ]
+ ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ipProto = main.params[ 'SDNIP' ][ 'icmpProto' ]
+ tcp1 = main.params[ 'SDNIP' ][ 'srcPort' ]
+ tcp2 = main.params[ 'SDNIP' ][ 'dstPort' ]
+
+ stepResult = main.intentFunction.pointIntent(
+ main,
+ name="SDNIP-TCP",
+ host1="h1",
+ host2="h9",
+ deviceId1="of:0000000000000005/1",
+ deviceId2="of:0000000000000006/1",
+ mac1=mac1,
+ mac2=mac2,
+ ethType="IPV4",
+ ipProto=ipProto,
+ ip1=ip1,
+ ip2=ip2,
+ tcp1=tcp1,
+ tcp2=tcp2 )
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult,
+ onpass="SDNIP-TCP: Add point intent successful",
+ onfail="SDNIP-TCP: Add point intent failed" )
+
+ main.step( "SDNIP-ICMP: Add point intents between h1 and h9" )
+ stepResult = main.TRUE
+ mac1 = main.hostsData[ 'h1' ][ 'mac' ]
+ mac2 = main.hostsData[ 'h9' ][ 'mac' ]
+ ip1 = str( main.hostsData[ 'h1' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ip2 = str( main.hostsData[ 'h9' ][ 'ipAddresses' ][ 0 ] ) + "/24"
+ ipProto = main.params[ 'SDNIP' ][ 'tcpProto' ]
+ tcp1 = main.params[ 'SDNIP' ][ 'srcPort' ]
+ tcp2 = main.params[ 'SDNIP' ][ 'dstPort' ]
+
+ stepResult = main.intentFunction.pointIntent(
+ main,
+ name="SDNIP-ICMP",
+ host1="h1",
+ host2="h9",
+ deviceId1="of:0000000000000005/1",
+ deviceId2="of:0000000000000006/1",
+ mac1=mac1,
+ mac2=mac2,
+ ethType="IPV4",
+ ipProto=ipProto )
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult,
+ onpass="SDNIP-ICMP: Add point intent successful",
+ onfail="SDNIP-ICMP: Add point intent failed" )
+
main.step( "DUALSTACK1: Add point intents between h1 and h9" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.pointIntent(
main,
name="DUALSTACK1",
@@ -580,8 +639,9 @@
onpass="DUALSTACK1: Add point intent" +
" successful",
onfail="DUALSTACK1: Add point intent failed" )
- stepResult = main.TRUE
+
main.step( "VLAN: Add point intents between h5 and h21" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.pointIntent(
main,
name="VLAN",
@@ -610,8 +670,8 @@
onpass="VLAN: Add point intent successful",
onfail="VLAN: Add point intent failed" )
- stepResult = main.TRUE
main.step( "1HOP: Add point intents between h1 and h3" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.hostIntent( main,
name='1HOP',
host1='h1',
@@ -623,7 +683,7 @@
" successful",
onfail="1HOP: Add point intent failed" )
- def CASE1003( self, main ):
+ def CASE3000( self, main ):
"""
Add single point to multi point intents
- Get device ids
@@ -650,13 +710,12 @@
main.case( "Add single point to multi point intents between devices" )
+ main.step( "NOOPTION: Add single point to multi point intents" )
stepResult = main.TRUE
hostNames = [ 'h8', 'h16', 'h24' ]
devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
'of:0000000000000007/8' ]
macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
-
- main.step( "NOOPTION: Add single point to multi point intents" )
stepResult = main.intentFunction.singleToMultiIntent(
main,
name="NOOPTION",
@@ -673,8 +732,8 @@
onfail="NOOPTION: Failed to add single point" +
" to multi point intents" )
- stepResult = main.TRUE
main.step( "IPV4: Add single point to multi point intents" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.singleToMultiIntent(
main,
name="IPV4",
@@ -699,8 +758,8 @@
onfail="IPV4: Failed to add single point" +
" to multi point intents" )
- stepResult = main.TRUE
main.step( "IPV4_2: Add single point to multi point intents" )
+ stepResult = main.TRUE
hostNames = [ 'h8', 'h16', 'h24' ]
stepResult = main.intentFunction.singleToMultiIntent(
main,
@@ -715,8 +774,9 @@
+ " point to multi point intents",
onfail="IPV4_2: Failed to add single point" +
" to multi point intents" )
- stepResult = main.TRUE
+
main.step( "VLAN: Add single point to multi point intents" )
+ stepResult = main.TRUE
hostNames = [ 'h4', 'h12', 'h20' ]
devices = [ 'of:0000000000000005/4', 'of:0000000000000006/4', \
'of:0000000000000007/4' ]
@@ -745,7 +805,7 @@
onfail="VLAN: Failed to add single point" +
" to multi point intents" )
- def CASE1004( self, main ):
+ def CASE4000( self, main ):
"""
Add multi point to single point intents
- Get device ids
@@ -772,13 +832,12 @@
main.case( "Add multi point to single point intents between devices" )
+ main.step( "NOOPTION: Add multi point to single point intents" )
stepResult = main.TRUE
hostNames = [ 'h8', 'h16', 'h24' ]
devices = [ 'of:0000000000000005/8', 'of:0000000000000006/8', \
'of:0000000000000007/8' ]
macs = [ '00:00:00:00:00:08', '00:00:00:00:00:10', '00:00:00:00:00:18' ]
-
- main.step( "NOOPTION: Add multi point to single point intents" )
stepResult = main.intentFunction.multiToSingleIntent(
main,
name="NOOPTION",
@@ -795,8 +854,8 @@
onfail="NOOPTION: Failed to add multi point" +
" to single point intents" )
- stepResult = main.TRUE
main.step( "IPV4: Add multi point to single point intents" )
+ stepResult = main.TRUE
stepResult = main.intentFunction.multiToSingleIntent(
main,
name="IPV4",
@@ -821,8 +880,8 @@
onfail="IPV4: Failed to add multi point" +
" to single point intents" )
- stepResult = main.TRUE
main.step( "IPV4_2: Add multi point to single point intents" )
+ stepResult = main.TRUE
hostNames = [ 'h8', 'h16', 'h24' ]
stepResult = main.intentFunction.multiToSingleIntent(
main,
@@ -838,8 +897,8 @@
onfail="IPV4_2: Failed to add multi point" +
" to single point intents" )
- stepResult = main.TRUE
main.step( "VLAN: Add multi point to single point intents" )
+ stepResult = main.TRUE
hostNames = [ 'h5', 'h13', 'h21' ]
devices = [ 'of:0000000000000005/5', 'of:0000000000000006/5', \
'of:0000000000000007/5' ]
diff --git a/TestON/tests/FUNCintent/README b/TestON/tests/FUNCintent/README
new file mode 100644
index 0000000..ce4e99f
--- /dev/null
+++ b/TestON/tests/FUNCintent/README
@@ -0,0 +1,39 @@
+Summary:
+ This test suite consist of basic intent functionality testing.
+ The following is an overview of how host intents is being tested.
+ Steps:
+ - Discover hosts
+ - Add host intents
+ - Check intents
+ - Verify flows
+ - Ping hosts
+ - Reroute
+ - Link down
+ - Verify flows
+ - Check topology
+ - Ping hosts
+ - Link up
+ - Verify flows
+ - Check topology
+ - Ping hosts
+ - Remove intents
+ This test suite includes testing of different types of intents such as
+ host, point, single-to-multi and multi-to-single ( More intent types to
+ add later ). The same steps above is being performed to other type of
+ intents.
+
+Required:
+ This test requires Mininet topology file newFuncIntent.py that is in the
+ Dependency folder. You should run the topology file to check for any
+ missing packages. The mininet topology file has different type of hosts
+ including VLAN hosts. Therefore you need to install VLAN module to build
+ the topology correctly.
+
+VLAN configuration:
+ Execute command:
+ $ sudo apt-get install vlan
+ Configuration:
+ $ sudo modprobe 8021q
+ NOTE:To make this configuration permanent
+ $ sudo su -c 'echo "8021q" >> /etc/modules'
+
diff --git a/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
index acd899d..96d24a9 100644
--- a/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
+++ b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.py
@@ -1,6 +1,6 @@
-# Testing the basic functionality of ONOS Next
-# For sanity and driver functionality excercises only.
+# This is a sample template that starts up ONOS cluster, this template
+# is used as a starting script for creating functionality and performance test
class SAMPstartTemplate:
diff --git a/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo
index 4a116c3..cd2640f 100755
--- a/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo
+++ b/TestON/tests/SAMPstartTemplate/SAMPstartTemplate.topo
@@ -8,7 +8,6 @@
<type>OnosDriver</type>
<connect_order>1</connect_order>
<COMPONENTS>
- <nodes>3</nodes>
</COMPONENTS>
</ONOSbench>
diff --git a/TestON/tests/SCPFflowTp1g/SCPFflowTp1g.py b/TestON/tests/SCPFflowTp1g/SCPFflowTp1g.py
index 6cc65ab..3c1805a 100644
--- a/TestON/tests/SCPFflowTp1g/SCPFflowTp1g.py
+++ b/TestON/tests/SCPFflowTp1g/SCPFflowTp1g.py
@@ -75,7 +75,7 @@
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- resultsDB = open("flowTP1gDB", "w+")
+ resultsDB = open("/tmp/flowTP1gDB", "w+")
resultsDB.close()
# -- END OF INIT SECTION --#
@@ -367,7 +367,7 @@
main.log.info("Average thoughput: " + str(avgTP) + " Kflows/second" )
main.log.info("Standard deviation of throughput: " + str(stdTP) + " Kflows/second")
- resultsLog = open("flowTP1gDB","a")
+ resultsLog = open("/tmp/flowTP1gDB","a")
resultString = ("'" + commit + "',")
resultString += ("'1gig',")
resultString += ((main.params[ 'TEST' ][ 'flows' ]) + ",")
diff --git a/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
index 053556a..06fc028 100644
--- a/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
+++ b/TestON/tests/SCPFintentEventTp/SCPFintentEventTp.py
@@ -86,7 +86,7 @@
commit = (commit.split(" "))[1]
main.log.step("Creating results file")
- resultsDB = open("IntentEventTPDB", "w+")
+ resultsDB = open("/tmp/IntentEventTPDB", "w+")
resultsDB.close()
# -- END OF INIT SECTION --#
@@ -340,7 +340,7 @@
main.ONOSbench.handle.expect(":~")
main.log.info("Stopping intentperf" )
- resultsDB = open("IntentEventTPDB", "a")
+ resultsDB = open("/tmp/IntentEventTPDB", "a")
for node in groupResult:
resultString = "'" + commit + "',"
diff --git a/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py b/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
index d9179cf..ef92e58 100644
--- a/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
+++ b/TestON/tests/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
@@ -71,7 +71,7 @@
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- resultsDB = open("IntentInstallWithdrawLatDB", "w+")
+ resultsDB = open("/tmp/IntentInstallWithdrawLatDB", "w+")
resultsDB.close()
# -- END OF INIT SECTION --#
@@ -267,7 +267,7 @@
resultString += str(numpy.std(installed)) + ","
resultString += str(numpy.mean(withdrawn)) + ","
resultString += str(numpy.std(withdrawn)) + "\n"
- resultsDB = open("IntentInstallWithdrawLatDB", "a")
+ resultsDB = open("/tmp/IntentInstallWithdrawLatDB", "a")
resultsDB.write(resultString)
resultsDB.close()
diff --git a/TestON/tests/SCPFintentRerouteLat/SCPFintentRerouteLat.py b/TestON/tests/SCPFintentRerouteLat/SCPFintentRerouteLat.py
index 8bbf003..07871f9 100644
--- a/TestON/tests/SCPFintentRerouteLat/SCPFintentRerouteLat.py
+++ b/TestON/tests/SCPFintentRerouteLat/SCPFintentRerouteLat.py
@@ -72,7 +72,7 @@
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- resultsDB = open("IntentRerouteLatDB", "w+")
+ resultsDB = open("/tmp/IntentRerouteLatDB", "w+")
resultsDB.close()
# -- END OF INIT SECTION --#
@@ -397,7 +397,7 @@
main.log.report("Mode of last node to respond:..." + str(nodeMode))
main.log.report("________________________________________________________")
- resultsDB = open("IntentRerouteLatDB", "a")
+ resultsDB = open("/tmp/IntentRerouteLatDB", "a")
resultsDB.write("'" + commit + "',")
resultsDB.write(str(clusterCount) + ",")
resultsDB.write(str(intents) + ",")