Merge "Fix a small issus for Scale topo test. - Clean up mn when clean up onos"
diff --git a/.gitignore b/.gitignore
index fa270ed..b70404d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,4 +3,4 @@
*.pyc
.DS_Store
._.DS_Store
-
+.idea/*
diff --git a/README.md b/README.md
index ad22ef6..49ded69 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-TestON, a testing infastructure by Paxterra
+TestON, a testing infastructure by Paxterra and Open Networking Labs
=======================================
-TestON is the testing platform that all the ONOS tests are being run on currently.
+TestON is the testing platform that all the ONOS tests are being run on currently.
Code Style
@@ -11,27 +11,27 @@
Setup
-------------
-0. Pull the git repo from https://github.com/OPENNETWORKINGLAB/OnosSystemTest.git
+0. Pull the git repo from gerrit or github(Read only mirror)
+
+ $ git clone https://gerrit.onosproject.org/OnosSystemTest
+
+ or
$ git clone https://github.com/OPENNETWORKINGLAB/OnosSystemTest.git
-1. Make a symbolic link for TestON on the HOMEDIR
- Execute the following from the home directory
+1. Run the install script
- $ ln -s OnosSystemTest/TestON TestON
+ $ cd OnosSystemTest/TestON
-2. Make sure python path is correct
+ $ install.sh
- $ export PYTHONPATH={PATH TO HOMEDIR}/TestON/
-
- $ echo $PYTHONPATH
Dependencies
------------
-1. ONOS
+1. [ONOS](https://github.com/opennetworkinglab/onos) - The system under test
-2. Mininet - Some driver functions rely on a modified version of Mininet. These functions are noted in the mininet driver file. To checkout this branch from your Mininet folder:
+2. [Mininet](https://github.com/mininet/mininet) - A Network Emulator. NOTE: Some driver functions rely on a modified version of Mininet. These functions are noted in the mininet driver file. To checkout this branch from your Mininet folder:
$ git remote add jhall11 https://github.com/jhall11/mininet.git
@@ -43,13 +43,7 @@
Note that you may need to run 'sudo make develop' if your mnexec.c file changed when switching branches.
-3. Install python packages configObj and pexpect (Note: pexpect 3.3 has a known bug. We recommend using version 3.2 for now). They can be installed as :
-
- $ sudo pip install configObj
-
- $ sudo pip install pexpect==3.2
-
- $ sudo pip install numpy
+3. There are some python modules required by some test cases. These modules should be installed by running the install.sh script.
4. Linc-OE - Some testcases use this to emulate optical devices
@@ -83,53 +77,51 @@
Change the file paths to the appropriate paths
2. The .topo file for each test
-
+
Must change the IPs/login/etc to point to the nodes you want to run on
Running TestON
------------
-1. TestON must be ran from its bin directory
+1. TestON must be ran from its bin directory
$ cd TestON/bin
-2. Launch cli
+2. Run the test
- $ ./cli.py
-
-3. Run the test
-
- teston> run PingallExample
+ $ teston run SAMPstartTemplate_1node
The Tests
-----------------------------------------------
The tests are all located it TestON/tests/
-Each test has its own folder with the following files:
+Each test has its own folder with the following files:
-1. .ospk file
+1. .ospk file (optional)
- This is written in Openspeak, a word based language developed by Paxterra.
- - It defines the cases and sequence of events for the test
+ - It defines the cases and sequence of events for the test
+
+ - TestON will automatically generate the .py file based on the .ospk file if the .ospk file exists.
2. .py file
-
- - This file serves the same exact function as the openspeak file.
- - It will only be used if there is NO .ospk file, so if you like python, delete or rename the .ospk file
-
-3. .topo file
+ - This file serves the same exact function as the openspeak file.
- - This defines all the components that TestON creates for that test and includes data such as IP address, login info, and device drivers
-
- - The Components must be defined in this file to be uesd in the openspeak or python files.
-
+ - It will only be used if there is NO .ospk file, so if you like python, delete or rename the .ospk file
+
+3. .topo file
+
+ - This defines all the components that TestON creates for that test and includes data such as IP address, login info, and device drivers
+
+ - The Components must be defined in this file to be uesd in the openspeak or python files.
+
4. .params file
- - Defines all the test-specific variables that are used by the test.
+ - Defines all the test-specific variables that are used by the test.
- - NOTE: The variable `testcases` which defines which testcases run when the test is ran.
+ - NOTE: The variable `testcases` defines which testcases run when the test is ran.
Troubleshooting
-----------------------------------------------
@@ -137,4 +129,4 @@
1. Double check the topo file for that specific test the nodes must be able to run that specific component ( Mininet IP -> machine with mn installed)
-2. Enable passwordless logins between your nodes and the TestON node.
+2. Enable passwordless logins between your nodes and the TestON node.
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 1209571..1632fee 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -38,6 +38,7 @@
import os
from math import pow
from drivers.common.cli.emulatordriver import Emulator
+from core.graph import Graph
class MininetCliDriver( Emulator ):
@@ -57,6 +58,7 @@
self.hostPrompt = "~#"
self.bashPrompt = "\$"
self.scapyPrompt = ">>>"
+ self.graph = Graph()
def connect( self, **connectargs ):
"""
@@ -1827,6 +1829,72 @@
main.cleanup()
main.exit()
+ def getSwitchRandom( self, timeout=60, nonCut=True ):
+ """
+ Randomly get a switch from Mininet topology.
+ If nonCut is True, it gets a list of non-cut switches (the deletion
+ of a non-cut switch will not increase the number of connected
+ components of a graph) and randomly returns one of them, otherwise
+ it just randomly returns one switch from all current switches in
+ Mininet.
+ Returns the name of the chosen switch.
+ """
+ import random
+ candidateSwitches = []
+ try:
+ if not nonCut:
+ switches = self.getSwitches( timeout=timeout )
+ assert len( switches ) != 0
+ for switchName in switches.keys():
+ candidateSwitches.append( switchName )
+ else:
+ graphDict = self.getGraphDict( timeout=timeout, useId=False )
+ if graphDict == None:
+ return None
+ self.graph.update( graphDict )
+ candidateSwitches = self.graph.getNonCutVertices()
+ if candidateSwitches == None:
+ return None
+ elif len( candidateSwitches ) == 0:
+ main.log.info( self.name + ": No candidate switch for deletion" )
+ return None
+ else:
+ switch = random.sample( candidateSwitches, 1 )
+ return switch[ 0 ]
+ except KeyError:
+ main.log.exception( self.name + ": KeyError exception found" )
+ return None
+ except AssertionError:
+ main.log.exception( self.name + ": AssertionError exception found" )
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception" )
+ return None
+
+ def delSwitchRandom( self, timeout=60, nonCut=True ):
+ """
+ Randomly delete a switch from Mininet topology.
+ If nonCut is True, it gets a list of non-cut switches (the deletion
+ of a non-cut switch will not increase the number of connected
+ components of a graph) and randomly chooses one for deletion,
+ otherwise it just randomly delete one switch from all current
+ switches in Mininet.
+ Returns the name of the deleted switch
+ """
+ try:
+ switch = self.getSwitchRandom( timeout, nonCut )
+ if switch == None:
+ return None
+ else:
+ deletionResult = self.delSwitch( switch )
+ if deletionResult:
+ return switch
+ else:
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception" )
+ return None
+
def addLink( self, node1, node2 ):
"""
add a link to the mininet topology
@@ -1892,6 +1960,75 @@
main.cleanup()
main.exit()
+ def getLinkRandom( self, timeout=60, nonCut=True ):
+ """
+ Randomly get a link from Mininet topology.
+ If nonCut is True, it gets a list of non-cut links (the deletion
+ of a non-cut link will not increase the number of connected
+ component of a graph) and randomly returns one of them, otherwise
+ it just randomly returns one link from all current links in
+ Mininet.
+ Returns the link as a list, e.g. [ 's1', 's2' ]
+ """
+ import random
+ candidateLinks = []
+ try:
+ if not nonCut:
+ links = self.getLinks( timeout=timeout )
+ assert len( links ) != 0
+ for link in links:
+ # Exclude host-switch link
+ if link[ 'node1' ].startswith( 'h' ) or link[ 'node2' ].startswith( 'h' ):
+ continue
+ candidateLinks.append( [ link[ 'node1' ], link[ 'node2' ] ] )
+ else:
+ graphDict = self.getGraphDict( timeout=timeout, useId=False )
+ if graphDict == None:
+ return None
+ self.graph.update( graphDict )
+ candidateLinks = self.graph.getNonCutEdges()
+ if candidateLinks == None:
+ return None
+ elif len( candidateLinks ) == 0:
+ main.log.info( self.name + ": No candidate link for deletion" )
+ return None
+ else:
+ link = random.sample( candidateLinks, 1 )
+ return link[ 0 ]
+ except KeyError:
+ main.log.exception( self.name + ": KeyError exception found" )
+ return None
+ except AssertionError:
+ main.log.exception( self.name + ": AssertionError exception found" )
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception" )
+ return None
+
+ def delLinkRandom( self, timeout=60, nonCut=True ):
+ """
+ Randomly delete a link from Mininet topology.
+ If nonCut is True, it gets a list of non-cut links (the deletion
+ of a non-cut link will not increase the number of connected
+ component of a graph) and randomly chooses one for deletion,
+ otherwise it just randomly delete one link from all current links
+ in Mininet.
+ Returns the deleted link as a list, e.g. [ 's1', 's2' ]
+ """
+ try:
+ link = self.getLinkRandom( timeout, nonCut )
+ if link == None:
+ return None
+ else:
+ deletionResult = self.delLink( link[ 0 ], link[ 1 ] )
+ if deletionResult:
+ return link
+ else:
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception" )
+ return None
+
def addHost( self, hostname, **kwargs ):
"""
Add a host to the mininet topology
@@ -2476,6 +2613,48 @@
'enabled': isUp } )
return ports
+ def getOVSPorts( self, nodeName ):
+ """
+ Read ports from OVS by executing 'ovs-ofctl dump-ports-desc' command.
+
+ Returns a list of dictionaries containing information about each
+ port of the given switch.
+ """
+ command = "sh ovs-ofctl dump-ports-desc " + str( nodeName )
+ try:
+ response = self.execute(
+ cmd=command,
+ prompt="mininet>",
+ timeout=10 )
+ ports = []
+ if response:
+ for line in response.split( "\n" ):
+ # Regex patterns to parse 'ovs-ofctl dump-ports-desc' output
+ # Example port:
+ # 1(s1-eth1): addr:ae:60:72:77:55:51
+ pattern = "(?P<index>\d+)\((?P<name>[^-]+-eth(?P<port>\d+))\):\saddr:(?P<mac>([a-f0-9]{2}:){5}[a-f0-9]{2})"
+ result = re.search( pattern, line )
+ if result:
+ index = result.group( 'index' )
+ name = result.group( 'name' )
+ # This port number is extracted from port name
+ port = result.group( 'port' )
+ mac = result.group( 'mac' )
+ ports.append( { 'index': index,
+ 'name': name,
+ 'port': port,
+ 'mac': mac } )
+ return ports
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ 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()
+
def getSwitches( self, verbose=False ):
"""
Read switches from Mininet.
@@ -2963,6 +3142,100 @@
return switchList
+ def getGraphDict( self, timeout=60, useId=True, includeHost=False ):
+ """
+ Return a dictionary which describes the latest Mininet topology data as a
+ graph.
+ An example of the dictionary:
+ { vertex1: { 'edges': ..., 'name': ..., 'protocol': ... },
+ vertex2: { 'edges': ..., 'name': ..., 'protocol': ... } }
+ Each vertex should at least have an 'edges' attribute which describes the
+ adjacency information. The value of 'edges' attribute is also represented by
+ a dictionary, which maps each edge (identified by the neighbor vertex) to a
+ list of attributes.
+ An example of the edges dictionary:
+ 'edges': { vertex2: { 'port': ..., 'weight': ... },
+ vertex3: { 'port': ..., 'weight': ... } }
+ If useId == True, dpid/mac will be used instead of names to identify
+ vertices, which is helpful when e.g. comparing Mininet topology with ONOS
+ topology.
+ If includeHost == True, all hosts (and host-switch links) will be included
+ in topology data.
+ Note that link or switch that are brought down by 'link x x down' or 'switch
+ x down' commands still show in the output of Mininet CLI commands such as
+ 'links', 'dump', etc. Thus, to ensure the correctness of this function, it is
+ recommended to use delLink() or delSwitch functions to simulate link/switch
+ down, and addLink() or addSwitch to add them back.
+ """
+ graphDict = {}
+ try:
+ links = self.getLinks( timeout=timeout )
+ portDict = {}
+ if useId:
+ switches = self.getSwitches()
+ if includeHost:
+ hosts = self.getHosts()
+ for link in links:
+ # FIXME: support 'includeHost' argument
+ if link[ 'node1' ].startswith( 'h' ) or link[ 'node2' ].startswith( 'h' ):
+ continue
+ nodeName1 = link[ 'node1' ]
+ nodeName2 = link[ 'node2' ]
+ port1 = link[ 'port1' ]
+ port2 = link[ 'port2' ]
+ # Loop for two nodes
+ for i in range( 2 ):
+ # Get port index from OVS
+ # The index extracted from port name may be inconsistent with ONOS
+ portIndex = -1
+ if not nodeName1 in portDict.keys():
+ portList = self.getOVSPorts( nodeName1 )
+ if len( portList ) == 0:
+ main.log.warn( self.name + ": No port found on switch " + nodeName1 )
+ return None
+ portDict[ nodeName1 ] = portList
+ for port in portDict[ nodeName1 ]:
+ if port[ 'port' ] == port1:
+ portIndex = port[ 'index' ]
+ break
+ if portIndex == -1:
+ main.log.warn( self.name + ": Cannot find port index for interface {}-eth{}".format( nodeName1, port1 ) )
+ return None
+ if useId:
+ node1 = 'of:' + str( switches[ nodeName1 ][ 'dpid' ] )
+ node2 = 'of:' + str( switches[ nodeName2 ][ 'dpid' ] )
+ else:
+ node1 = nodeName1
+ node2 = nodeName2
+ if not node1 in graphDict.keys():
+ if useId:
+ graphDict[ node1 ] = { 'edges':{},
+ 'dpid':switches[ nodeName1 ][ 'dpid' ],
+ 'name':nodeName1,
+ 'ports':switches[ nodeName1 ][ 'ports' ],
+ 'swClass':switches[ nodeName1 ][ 'swClass' ],
+ 'pid':switches[ nodeName1 ][ 'pid' ],
+ 'options':switches[ nodeName1 ][ 'options' ] }
+ else:
+ graphDict[ node1 ] = { 'edges':{} }
+ else:
+ # Assert node2 is not connected to any current links of node1
+ assert node2 not in graphDict[ node1 ][ 'edges' ].keys()
+ graphDict[ node1 ][ 'edges' ][ node2 ] = { 'port':portIndex }
+ # Swap two nodes/ports
+ nodeName1, nodeName2 = nodeName2, nodeName1
+ port1, port2 = port2, port1
+ return graphDict
+ except KeyError:
+ main.log.exception( self.name + ": KeyError exception found" )
+ return None
+ except AssertionError:
+ main.log.exception( self.name + ": AssertionError exception found" )
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception" )
+ return None
+
def update( self ):
"""
updates the port address and status information for
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 1262b09..32a08e9 100755
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -23,6 +23,7 @@
import time
import os
from drivers.common.clidriver import CLI
+from core.graph import Graph
class OnosCliDriver( CLI ):
@@ -34,6 +35,7 @@
self.name = None
self.home = None
self.handle = None
+ self.graph = Graph()
super( CLI, self ).__init__()
def connect( self, **connectargs ):
@@ -811,8 +813,8 @@
Dependencies: checkMasters() and summary()
- Returns main.True if the devices are balanced
- Returns main.False if the devices are unbalanced
+ Returns main.TRUE if the devices are balanced
+ Returns main.FALSE if the devices are unbalanced
Exits on Exception
Returns None on TypeError
"""
@@ -1837,7 +1839,7 @@
-p or --purge: Purge the intent from the store after removal
Returns:
- main.False on error and
+ main.FALSE on error and
cli output otherwise
"""
try:
@@ -4855,3 +4857,72 @@
main.log.exception( self.name + ": Uncaught exception!" )
main.cleanup()
main.exit()
+
+ def getGraphDict( self, timeout=60, includeHost=False ):
+ """
+ Return a dictionary which describes the latest network topology data as a
+ graph.
+ An example of the dictionary:
+ { vertex1: { 'edges': ..., 'name': ..., 'protocol': ... },
+ vertex2: { 'edges': ..., 'name': ..., 'protocol': ... } }
+ Each vertex should at least have an 'edges' attribute which describes the
+ adjacency information. The value of 'edges' attribute is also represented by
+ a dictionary, which maps each edge (identified by the neighbor vertex) to a
+ list of attributes.
+ An example of the edges dictionary:
+ 'edges': { vertex2: { 'port': ..., 'weight': ... },
+ vertex3: { 'port': ..., 'weight': ... } }
+ If includeHost == True, all hosts (and host-switch links) will be included
+ in topology data.
+ """
+ graphDict = {}
+ try:
+ links = self.links()
+ links = json.loads( links )
+ devices = self.devices()
+ devices = json.loads( devices )
+ idToDevice = {}
+ for device in devices:
+ idToDevice[ device[ 'id' ] ] = device
+ if includeHost:
+ hosts = self.hosts()
+ # FIXME: support 'includeHost' argument
+ for link in links:
+ nodeA = link[ 'src' ][ 'device' ]
+ nodeB = link[ 'dst' ][ 'device' ]
+ assert idToDevice[ nodeA ][ 'available' ] and idToDevice[ nodeB ][ 'available' ]
+ if not nodeA in graphDict.keys():
+ graphDict[ nodeA ] = { 'edges':{},
+ 'dpid':idToDevice[ nodeA ][ 'id' ][3:],
+ 'type':idToDevice[ nodeA ][ 'type' ],
+ 'available':idToDevice[ nodeA ][ 'available' ],
+ 'role':idToDevice[ nodeA ][ 'role' ],
+ 'mfr':idToDevice[ nodeA ][ 'mfr' ],
+ 'hw':idToDevice[ nodeA ][ 'hw' ],
+ 'sw':idToDevice[ nodeA ][ 'sw' ],
+ 'serial':idToDevice[ nodeA ][ 'serial' ],
+ 'chassisId':idToDevice[ nodeA ][ 'chassisId' ],
+ 'annotations':idToDevice[ nodeA ][ 'annotations' ]}
+ else:
+ # Assert nodeB is not connected to any current links of nodeA
+ assert nodeB not in graphDict[ nodeA ][ 'edges' ].keys()
+ graphDict[ nodeA ][ 'edges' ][ nodeB ] = { 'port':link[ 'src' ][ 'port' ],
+ 'type':link[ 'type' ],
+ 'state':link[ 'state' ] }
+ return graphDict
+ except ( TypeError, ValueError ):
+ main.log.exception( self.name + ": Object not as expected" )
+ return None
+ except KeyError:
+ main.log.exception( self.name + ": KeyError exception found" )
+ return None
+ except AssertionError:
+ main.log.exception( self.name + ": AssertionError exception found" )
+ return None
+ except pexpect.EOF:
+ main.log.error( self.name + ": EOF exception found" )
+ main.log.error( self.name + ": " + self.handle.before )
+ return None
+ except Exception:
+ main.log.exception( self.name + ": Uncaught exception!" )
+ return None
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index dde65d3..3c8d484 100755
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -1847,7 +1847,7 @@
deviceCount - number of switches to be assigned
'''
- main.log.step("Creating link graph configuration file." )
+ main.log.info("Creating link graph configuration file." )
linkGraphPath = self.home + "/tools/package/etc/linkGraph.cfg"
tempFile = "/tmp/linkGraph.cfg"
@@ -1923,13 +1923,13 @@
numPorts = number of ports per device. Defaults to 10 both in this function and in ONOS. Optional arg
'''
- main.log.step("Configuring Null Device Provider" )
+ main.log.info("Configuring Null Device Provider" )
clusterCount = len(ONOSIpList)
try:
if type(deviceCount) is int or type(deviceCount) is str:
- main.log.step("Creating device distribution")
+ main.log.info("Creating device distribution")
deviceCount = int(deviceCount)
switchList = [0]*(clusterCount+1)
baselineSwitchCount = deviceCount/clusterCount
diff --git a/TestON/install.sh b/TestON/install.sh
index fbbd5a5..dee85c9 100755
--- a/TestON/install.sh
+++ b/TestON/install.sh
@@ -63,10 +63,10 @@
echo "Installing TestON dependencies"
if [ "$DIST" = "Fedora" ]; then
# Fedora may have vlan enabled by default. Still need to confirm and update later
- $install python-pip build-essential python-dev pep8 arping
+ $install python-pip build-essential python-dev pep8 arping python3-requests
$pipinstall pexpect==3.2 configobj==4.7.2 numpy
else
- $install python-pip build-essential python-dev pep8 vlan arping
+ $install python-pip build-essential python-dev pep8 vlan arping python3-requests
$pipinstall pexpect==3.2 configobj==4.7.2 numpy
fi
diff --git a/TestON/tests/CHO/CHOtest/CHOtest.py b/TestON/tests/CHO/CHOtest/CHOtest.py
index 8c92c20..94990c3 100644
--- a/TestON/tests/CHO/CHOtest/CHOtest.py
+++ b/TestON/tests/CHO/CHOtest/CHOtest.py
@@ -146,7 +146,7 @@
main.step( "Start ONOS CLI on all nodes" )
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
time1 = time.time()
@@ -499,7 +499,7 @@
import time
main.log.report( "Clean up ONOS" )
- main.log.case( "Stop topology and remove hosts and devices" )
+ main.case( "Stop topology and remove hosts and devices" )
main.step( "Stop Topology" )
stopStatus = main.Mininet1.stopNet()
@@ -2114,7 +2114,7 @@
main.log.report( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
main.log.report( "___________________________________________________________________________" )
- main.log.case( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
+ main.case( "Bring some core links down and verify ping all (Host Intents-Spine Topo)" )
main.step( "Bring some core links down" )
linkIndex = range(4)
diff --git a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
index 314bde9..7b07758 100644
--- a/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
+++ b/TestON/tests/CHOTestMonkey/CHOTestMonkey.py
@@ -32,6 +32,7 @@
"""
import time
from threading import Lock, Condition
+ from core.graph import Graph
from tests.CHOTestMonkey.dependencies.elements.ONOSElement import Controller
from tests.CHOTestMonkey.dependencies.EventGenerator import EventGenerator
from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduler
@@ -58,6 +59,7 @@
if main.params[ 'EVENT' ][ eventName ][ 'status' ] == 'on':
main.enabledEvents[ int( main.params[ 'EVENT' ][ eventName ][ 'typeIndex' ] ) ] = eventName
print main.enabledEvents
+ main.graph = Graph()
main.eventScheduler = EventScheduler()
main.eventGenerator = EventGenerator()
main.variableLock = Lock()
@@ -246,7 +248,7 @@
startStatus = main.Mininet1.startNet( topoFile = topoPath )
main.mininetSwitches = main.Mininet1.getSwitches()
main.mininetHosts = main.Mininet1.getHosts()
- main.mininetLinks = main.Mininet1.getLinks()
+ main.mininetLinks = main.Mininet1.getLinks( timeout=60 )
utilities.assert_equals( expect=main.TRUE,
actual=startStatus,
onpass="Start Mininet topology test PASS",
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
index de32193..dd53238 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventGenerator.py
@@ -5,7 +5,6 @@
from threading import Lock, Condition
from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
from tests.CHOTestMonkey.dependencies.EventScheduler import EventScheduleMethod
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
class MessageType:
def __init__( self ):
@@ -169,21 +168,10 @@
main.log.warn( "Event Generator - Too many arguments for randomLinkToggle: %s" % ( args ) )
else:
downUpAvgInterval = int( args[ 0 ] )
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- return
- link = random.sample( availableLinks, 1 )
-
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
- with main.variableLock:
- link[ 0 ].setPendingDown()
- link[ 0 ].backwardLink.setPendingDown()
+ [ 'random', 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -199,7 +187,7 @@
time.sleep( downUpInterval )
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
+ [ 'random', 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -227,24 +215,12 @@
linkGroupSize = int( args[ 0 ] )
downDownAvgInterval = int( args[ 1 ] )
downUpAvgInterval = int( args[ 2 ] )
- downLinks = []
for i in range( 0, linkGroupSize ):
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- continue
- link = random.sample( availableLinks, 1 )
if i == 0:
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_DOWN,
scheduleMethod,
- [ link[ 0 ].deviceA.name, link[ 0 ].deviceB.name ] )
- with main.variableLock:
- link[ 0 ].setPendingDown()
- link[ 0 ].backwardLink.setPendingDown()
- downLinks.append( link[ 0 ] )
+ [ 'random', 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -267,10 +243,10 @@
else:
time.sleep( downUpInterval )
- for link in downLinks:
+ for i in range( 0, linkGroupSize ):
main.eventScheduler.scheduleEvent( EventType().NETWORK_LINK_UP,
scheduleMethod,
- [ link.deviceA.name, link.deviceB.name ] )
+ [ 'random', 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -301,20 +277,10 @@
main.log.warn( "Event Generator - Too many arguments for randomDeviceToggle: %s" % ( args ) )
else:
downUpAvgInterval = int( args[ 0 ] )
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are Cut vertices, aborting event" )
- return
- device = random.sample( availableDevices, 1 )
-
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
scheduleMethod,
- [ device[ 0 ].name ] )
- with main.variableLock:
- device[ 0 ].setPendingDown()
+ [ 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -330,7 +296,7 @@
time.sleep( downUpInterval )
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
scheduleMethod,
- [ device[ 0 ].name ] )
+ [ 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -358,23 +324,12 @@
deviceGroupSize = int( args[ 0 ] )
downDownAvgInterval = int( args[ 1 ] )
downUpAvgInterval = int( args[ 2 ] )
- downDevices = []
for i in range( 0, deviceGroupSize ):
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are cut vertices, aborting event" )
- continue
- device = random.sample( availableDevices, 1 )
if i == 0:
self.eventGeneratorLock.acquire()
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_DOWN,
scheduleMethod,
- [ device[ 0 ].name ] )
- with main.variableLock:
- device[ 0 ].setPendingDown()
- downDevices.append( device[ 0 ] )
+ [ 'random' ] )
sleepTime = int( main.params[ 'EVENT' ][ 'randomLinkGroupToggle' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
@@ -397,10 +352,10 @@
else:
time.sleep( downUpInterval )
- for device in downDevices:
+ for i in range( 0, deviceGroupSize ):
main.eventScheduler.scheduleEvent( EventType().NETWORK_DEVICE_UP,
scheduleMethod,
- [ device.name ] )
+ [ 'random' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
@@ -445,9 +400,7 @@
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
sleepTime = int( main.params[ 'EVENT' ][ 'installAllHostIntents' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
- main.eventScheduler.scheduleEvent( EventType().CHECK_INTENT, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_FLOW, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_TRAFFIC, EventScheduleMethod().RUN_NON_BLOCK )
+ self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
@@ -482,9 +435,7 @@
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
sleepTime = int( main.params[ 'EVENT' ][ 'removeAllHostIntents' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
- main.eventScheduler.scheduleEvent( EventType().CHECK_INTENT, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_FLOW, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_TRAFFIC, EventScheduleMethod().RUN_NON_BLOCK )
+ self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
@@ -519,9 +470,7 @@
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
sleepTime = int( main.params[ 'EVENT' ][ 'installAllPointIntents' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
- main.eventScheduler.scheduleEvent( EventType().CHECK_INTENT, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_FLOW, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_TRAFFIC, EventScheduleMethod().RUN_NON_BLOCK )
+ self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
@@ -556,8 +505,6 @@
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
sleepTime = int( main.params[ 'EVENT' ][ 'removeAllPointIntents' ][ 'sleepBeforeCheck' ] )
main.eventScheduler.scheduleEvent( EventType().TEST_SLEEP, EventScheduleMethod().RUN_BLOCK, [ sleepTime ] )
- main.eventScheduler.scheduleEvent( EventType().CHECK_INTENT, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_FLOW, EventScheduleMethod().RUN_NON_BLOCK )
- main.eventScheduler.scheduleEvent( EventType().CHECK_TRAFFIC, EventScheduleMethod().RUN_NON_BLOCK )
+ self.insertAllChecks( EventScheduleMethod().RUN_NON_BLOCK )
if scheduleMethod == EventScheduleMethod().RUN_BLOCK:
main.eventScheduler.scheduleEvent( EventType().NULL, EventScheduleMethod().RUN_BLOCK )
diff --git a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
index 7e4c95c..99ead73 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/EventScheduler.py
@@ -172,7 +172,7 @@
if len( self.pendingEvents ) > 0:
events += str( self.pendingEvents[ -1 ].typeIndex )
events += "]"
- main.log.debug( "Event Scheduler - Events: " + events )
+ #main.log.debug( "Event Scheduler - Events: " + events )
def isAvailable( self ):
with self.pendingEventsCondition:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
index 2a18ac7..b3618dd 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/elements/NetworkElement.py
@@ -18,9 +18,6 @@
def isRemoved( self ):
return self.status == 'removed'
- def setPendingDown( self ):
- self.status = 'pending_down'
-
def setRemoved( self ):
self.status = 'removed'
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
index 7f0ca7c..de5fd48 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/AppEvent.py
@@ -194,10 +194,14 @@
controller = main.controllers[ self.CLIIndex - 1 ]
with controller.CLILock:
# TODO: handle the case that multiple hosts attach to one device
+ srcMAC = ""
+ dstMAC = ""
+ if len( self.deviceA.hosts ) > 0:
+ srcMAC = self.deviceA.hosts[ 0 ].mac
+ if len( self.deviceB.hosts ) > 0:
+ dstMAC = self.deviceB.hosts[ 0 ].mac
id = controller.CLI.addPointIntent( self.deviceA.dpid, self.deviceB.dpid,
- 1, 1, '',
- self.deviceA.hosts[ 0 ].mac,
- self.deviceB.hosts[ 0 ].mac )
+ 1, 1, '', srcMAC, dstMAC )
if id == None:
main.log.warn( self.typeString + " - add point intent failed" )
return EventStates().FAIL
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
index 76722f0..fcbf23d 100755
--- a/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/CheckEvent.py
@@ -99,6 +99,8 @@
if not host.isDown() and not host.isRemoved():
upHostNum += 1
clusterNum = 1
+ with main.mininetLock:
+ graphDictMininet = main.Mininet1.getGraphDict( useId=True )
for controller in main.controllers:
if controller.isUp():
with controller.CLILock:
@@ -106,8 +108,14 @@
#if not topoState:
# main.log.warn( "Topo Check - link or device number discoverd by ONOS%s is incorrect" % ( controller.index ) )
# checkResult = EventStates().FAIL
- # Check links
+ # Compare ONOS and Mininet topologies
+ graphDictONOS = controller.CLI.getGraphDict()
+ compareResult = main.graph.compareGraphs( graphDictONOS, graphDictMininet )
+ if not compareResult:
+ checkResult = EventStates().FAIL
+ main.log.warn( "Topo Check - ONOS and Mininet topologies do not match" )
try:
+ # Check links
links = controller.CLI.links()
links = json.loads( links )
if not len( links ) == upLinkNum:
diff --git a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
index 7247ecf..8ec62a1 100644
--- a/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
+++ b/TestON/tests/CHOTestMonkey/dependencies/events/NetworkEvent.py
@@ -4,7 +4,6 @@
"""
from tests.CHOTestMonkey.dependencies.events.Event import EventType, EventStates, Event
from tests.CHOTestMonkey.dependencies.elements.NetworkElement import NetworkElement, Device, Host, Link
-from tests.CHOTestMonkey.dependencies.GraphHelper import GraphHelper
class LinkEvent( Event ):
def __init__( self ):
@@ -28,18 +27,16 @@
main.log.warn( "%s - Too many arguments: %s" % ( self.typeString, args ) )
return EventStates().ABORT
if args[ 0 ] == 'random' or args[ 1 ] == 'random':
- import random
if self.typeIndex == EventType().NETWORK_LINK_DOWN:
- with main.variableLock:
- graphHelper = GraphHelper()
- availableLinks = graphHelper.getNonCutEdges()
- if len( availableLinks ) == 0:
- main.log.warn( "All links are cut edges, aborting event" )
- return EventStates().ABORT
- linkList = random.sample( availableLinks, 1 )
- self.linkA = linkList[ 0 ]
- self.linkB = linkList[ 0 ].backwardLink
+ with main.mininetLock:
+ linkRandom = main.Mininet1.getLinkRandom()
+ if linkRandom == None:
+ main.log.warn( "No link available, aborting event" )
+ return EventStates().ABORT
+ args[ 0 ] = linkRandom[ 0 ]
+ args[ 1 ] = linkRandom[ 1 ]
elif self.typeIndex == EventType().NETWORK_LINK_UP:
+ import random
with main.variableLock:
downLinks = []
for link in main.links:
@@ -54,7 +51,7 @@
elif args[ 0 ] == args[ 1 ]:
main.log.warn( "%s - invalid arguments: %s" % ( self.typeString, args ) )
return EventStates().ABORT
- else:
+ if self.linkA == None or self.linkB == None:
for link in main.links:
if link.deviceA.name == args[ 0 ] and link.deviceB.name == args[ 1 ]:
self.linkA = link
@@ -88,9 +85,13 @@
main.log.warn( "Link Down - link has been removed" )
return EventStates().ABORT
with main.mininetLock:
+ '''
result = main.Mininet1.link( END1=self.linkA.deviceA.name,
END2=self.linkA.deviceB.name,
OPTION="down")
+ '''
+ result = main.Mininet1.delLink( self.linkA.deviceA.name,
+ self.linkA.deviceB.name )
if not result:
main.log.warn( "%s - failed to bring down link" % ( self.typeString ) )
return EventStates().FAIL
@@ -118,9 +119,13 @@
main.log.warn( "Link Up - link has been removed" )
return EventStates().ABORT
with main.mininetLock:
+ '''
result = main.Mininet1.link( END1=self.linkA.deviceA.name,
END2=self.linkA.deviceB.name,
OPTION="up")
+ '''
+ result = main.Mininet1.addLink( self.linkA.deviceA.name,
+ self.linkA.deviceB.name )
if not result:
main.log.warn( "%s - failed to bring up link" % ( self.typeString ) )
return EventStates().FAIL
@@ -152,14 +157,12 @@
if args[ 0 ] == 'random':
import random
if self.typeIndex == EventType().NETWORK_DEVICE_DOWN:
- with main.variableLock:
- graphHelper = GraphHelper()
- availableDevices = graphHelper.getNonCutVertices()
- if len( availableDevices ) == 0:
- main.log.warn( "All devices are cut vertices, aborting event" )
- return EventStates().ABORT
- deviceList = random.sample( availableDevices, 1 )
- self.device = deviceList[ 0 ]
+ with main.mininetLock:
+ switchRandom = main.Mininet1.getSwitchRandom()
+ if switchRandom == None:
+ main.log.warn( "No switch available, aborting event" )
+ return EventStates().ABORT
+ args[ 0 ] = switchRandom
elif self.typeIndex == EventType().NETWORK_DEVICE_UP:
with main.variableLock:
removedDevices = []
@@ -171,7 +174,7 @@
return EventStates().ABORT
deviceList = random.sample( removedDevices, 1 )
self.device = deviceList[ 0 ]
- else:
+ if self.device == None:
for device in main.devices:
if device.name == args[ 0 ]:
self.device = device
diff --git a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
index 0e86351..a56c5c4 100755
--- a/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
+++ b/TestON/tests/FUNC/FUNCbgpls/FUNCbgpls.py
@@ -141,7 +141,7 @@
utilities.assert_equals( expect=main.TRUE, actual=onos1Isup,
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
print main.nodes[0].ip_address
cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address )
utilities.assert_equals( expect=main.TRUE, actual=cliResults,
diff --git a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
index 29c38a3..d50c434 100755
--- a/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
+++ b/TestON/tests/FUNC/FUNCintentRest/FUNCintentRest.topo
@@ -72,7 +72,7 @@
</ONOScli3>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py
index 45e15f4..8d3047e 100644
--- a/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py
+++ b/TestON/tests/FUNC/FUNCovsdbtest/FUNCovsdbtest.py
@@ -139,7 +139,7 @@
utilities.assert_equals( expect=main.TRUE, actual=onos1Isup,
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
print main.nodes[0].ip_address
cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address )
utilities.assert_equals( expect=main.TRUE, actual=cliResults,
diff --git a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py
index adf85a2..cf6cdc1 100644
--- a/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py
+++ b/TestON/tests/FUNC/FUNCvirNetNB/FUNCvirNetNB.py
@@ -155,7 +155,7 @@
onfail="ONOS startup failed" )
time.sleep( main.startUpSleep )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
print main.nodes[0].ip_address
cliResults = main.ONOScli1.startOnosCli(main.nodes[0].ip_address)
diff --git a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
index 69f094d..6ff14ce 100644
--- a/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
+++ b/TestON/tests/HA/HAclusterRestart/HAclusterRestart.py
@@ -222,7 +222,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
@@ -1834,7 +1834,7 @@
onpass="ONOS restarted",
onfail="ONOS restart NOT successful" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
diff --git a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
index a48a460..1b83edf 100644
--- a/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
+++ b/TestON/tests/HA/HAfullNetPartition/HAfullNetPartition.py
@@ -247,7 +247,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
@@ -1832,7 +1832,7 @@
onpass="Firewall rules set successfully",
onfail="Error setting firewall rules" )
- main.log.step( "Sleeping 60 seconds" )
+ main.step( "Sleeping 60 seconds" )
time.sleep( 60 )
def CASE62( self, main ):
diff --git a/TestON/tests/HA/HAkillNodes/HAkillNodes.py b/TestON/tests/HA/HAkillNodes/HAkillNodes.py
index 6fb4d6c..c6aa669 100644
--- a/TestON/tests/HA/HAkillNodes/HAkillNodes.py
+++ b/TestON/tests/HA/HAkillNodes/HAkillNodes.py
@@ -254,7 +254,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
diff --git a/TestON/tests/HA/HAsanity/HAsanity.py b/TestON/tests/HA/HAsanity/HAsanity.py
index aa66574..b18cce8 100644
--- a/TestON/tests/HA/HAsanity/HAsanity.py
+++ b/TestON/tests/HA/HAsanity/HAsanity.py
@@ -223,7 +223,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
diff --git a/TestON/tests/HA/HAscaling/HAscaling.py b/TestON/tests/HA/HAscaling/HAscaling.py
index 2064f1e..04000ba 100644
--- a/TestON/tests/HA/HAscaling/HAscaling.py
+++ b/TestON/tests/HA/HAscaling/HAscaling.py
@@ -282,7 +282,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
@@ -1894,7 +1894,7 @@
onpass="ONOS started",
onfail="ONOS start NOT successful" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in main.activeNodes:
diff --git a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
index 1d4db86..c13b910 100644
--- a/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
+++ b/TestON/tests/HA/HAsingleInstanceRestart/HAsingleInstanceRestart.py
@@ -212,7 +212,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
@@ -1401,7 +1401,7 @@
onpass="ONOS is back up",
onfail="ONOS failed to start" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.ONOScli1.startOnosCli( main.nodes[0].ip_address )
utilities.assert_equals( expect=main.TRUE, actual=cliResults,
onpass="ONOS cli startup successful",
diff --git a/TestON/tests/HA/HAstopNodes/HAstopNodes.py b/TestON/tests/HA/HAstopNodes/HAstopNodes.py
index 0f33ec0..7617a7a 100644
--- a/TestON/tests/HA/HAstopNodes/HAstopNodes.py
+++ b/TestON/tests/HA/HAstopNodes/HAstopNodes.py
@@ -247,7 +247,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
diff --git a/TestON/tests/HA/HAswapNodes/HAswapNodes.py b/TestON/tests/HA/HAswapNodes/HAswapNodes.py
index 8ea1490..1ced5a2 100644
--- a/TestON/tests/HA/HAswapNodes/HAswapNodes.py
+++ b/TestON/tests/HA/HAswapNodes/HAswapNodes.py
@@ -276,7 +276,7 @@
onpass="ONOS startup successful",
onfail="ONOS startup failed" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in range( main.numCtrls ):
@@ -1882,7 +1882,7 @@
onpass="ONOS started",
onfail="ONOS start NOT successful" )
- main.log.step( "Starting ONOS CLI sessions" )
+ main.step( "Starting ONOS CLI sessions" )
cliResults = main.TRUE
threads = []
for i in main.activeNodes:
diff --git a/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo b/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
index b37a17a..05dbe31 100755
--- a/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
+++ b/TestON/tests/MISC/SCPFbatchFlowResp/SCPFbatchFlowResp.topo
@@ -22,7 +22,7 @@
</ONOScli1>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/PLAT/PLATdockertest/PLATdockertest.topo b/TestON/tests/PLAT/PLATdockertest/PLATdockertest.topo
index 3501864..f6d50ae 100755
--- a/TestON/tests/PLAT/PLATdockertest/PLATdockertest.topo
+++ b/TestON/tests/PLAT/PLATdockertest/PLATdockertest.topo
@@ -32,7 +32,7 @@
</ONOSbenchDocker>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.py b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.py
index 23bfc09..3ad2f30 100644
--- a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.py
+++ b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.py
@@ -180,7 +180,7 @@
topology = main.params['CASE11']['topo']
main.log.report( "Start Mininet topology" )
- main.log.case( "Start Mininet topology" )
+ main.case( "Start Mininet topology" )
main.step( "Starting Mininet Topology" )
topoResult = main.Mininet1.startNet( mnCmd=topology )
@@ -213,7 +213,7 @@
Tests using through ONOS CLI handles
"""
- main.log.case( "Test some onos commands through CLI. ")
+ main.case( "Test some onos commands through CLI. ")
main.log.debug( main.ONOScli1.sendline("summary") )
main.log.debug( main.ONOScli1.sendline("devices") )
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
index a804d4a..4fee9ff 100755
--- a/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
+++ b/TestON/tests/SAMP/SAMPstartTemplate_1node/SAMPstartTemplate_1node.topo
@@ -27,7 +27,7 @@
</ONOScli1>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py
index 592c8b2..90bfb14 100644
--- a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py
+++ b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.py
@@ -180,7 +180,7 @@
topology = main.params['CASE11']['topo']
main.log.report( "Start Mininet topology" )
- main.log.case( "Start Mininet topology" )
+ main.case( "Start Mininet topology" )
main.step( "Starting Mininet Topology" )
topoResult = main.Mininet1.startNet(mnCmd=topology )
@@ -213,7 +213,7 @@
Tests using through ONOS CLI handles
"""
- main.log.case( "Test some onos commands through CLI. ")
+ main.case( "Test some onos commands through CLI. ")
main.log.debug( main.ONOScli1.sendline("summary") )
main.log.debug( main.ONOScli3.sendline("devices") )
diff --git a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
index 9f23369..c01bb0a 100755
--- a/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
+++ b/TestON/tests/SAMP/SAMPstartTemplate_3node/SAMPstartTemplate_3node.topo
@@ -47,7 +47,7 @@
</ONOScli3>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.params b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.params
index d862129..fb23e90 100644
--- a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.params
+++ b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.params
@@ -28,7 +28,7 @@
</CTRL>
<MN>
- <ip1>OC1</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.py b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.py
index 403e0fe..1da2d12 100644
--- a/TestON/tests/SCPF/SCPFcbench/SCPFcbench.py
+++ b/TestON/tests/SCPF/SCPFcbench/SCPFcbench.py
@@ -77,13 +77,13 @@
scale.remove(scale[0])
#kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating environment setup")
+ main.step("Safety check, killing all ONOS processes")
+ main.step("before initiating environment setup")
for node in range(1, maxNodes + 1):
main.ONOSbench.onosDie(ONOSIp[node])
#Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
+ main.step( "Cleaning Enviornment..." )
for i in range(1, maxNodes + 1):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
diff --git a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
index 4ec605f..a9abacb 100644
--- a/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
+++ b/TestON/tests/SCPF/SCPFflowTp1g/SCPFflowTp1g.py
@@ -85,13 +85,13 @@
main.log.info("CLUSTER COUNT: " + str(clusterCount))
#kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating environment setup")
+ main.step("Safety check, killing all ONOS processes")
+ main.step("before initiating environment setup")
for node in range(1, main.maxNodes + 1):
main.ONOSbench.onosDie(ONOSIp[node])
#Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
+ main.step( "Cleaning Enviornment..." )
for i in range(1, main.maxNodes + 1):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
@@ -191,9 +191,9 @@
st = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d %H:%M:%S')
for n in neighborList:
- main.log.step("\tSTARTING TEST")
- main.log.step("\tLOADING FROM SERVERS: \t" + str(clusterCount) )
- main.log.step("\tNEIGHBORS:\t" + n )
+ main.step("\tSTARTING TEST")
+ main.step("\tLOADING FROM SERVERS: \t" + str(clusterCount) )
+ main.step("\tNEIGHBORS:\t" + n )
main.log.info("=============================================================")
main.log.info("=============================================================")
#write file to configure nil link
diff --git a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
index c24b6a7..989ccea 100644
--- a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
+++ b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.py
@@ -180,7 +180,7 @@
main.step( "Start ONOS CLI on all nodes" )
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
time.sleep( main.startUpSleep )
startCliResult = main.TRUE
pool = []
diff --git a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
index 382d60f..615e957 100644
--- a/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
+++ b/TestON/tests/SCPF/SCPFhostLat/SCPFhostLat.topo
@@ -87,7 +87,7 @@
</ONOS1>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
index 201c28c..2caa008 100644
--- a/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
+++ b/TestON/tests/SCPF/SCPFintentEventTp/SCPFintentEventTp.py
@@ -81,17 +81,17 @@
pullResult = main.TRUE
main.log.info( "Skipped git checkout and pull" )
- main.log.step("Grabbing commit number")
+ main.step("Grabbing commit number")
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- main.log.step("Creating results file")
+ main.step("Creating results file")
resultsDB = open("/tmp/IntentEventTPDB", "w+")
resultsDB.close()
# -- END OF INIT SECTION --#
- main.log.step("Adjusting scale")
+ main.step("Adjusting scale")
print str(scale)
print str(ONOSIp)
clusterCount = int(scale[0])
@@ -101,8 +101,8 @@
BENCHIp = ONOSIp[len(ONOSIp) -2]
#kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating environment setup")
+ main.step("Safety check, killing all ONOS processes")
+ main.step("before initiating environment setup")
for node in range(maxNodes):
main.ONOSbench.onosDie(ONOSIp[node])
@@ -110,7 +110,7 @@
BENCHIp = ONOSIp[len(ONOSIp) -2]
#Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
+ main.step( "Cleaning Enviornment..." )
for i in range(maxNodes):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
@@ -161,7 +161,7 @@
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.net.intent.impl.IntentManager", "skipReleaseResourcesOnWithdrawal " + skipRelRsrc)
devices = int(clusterCount)*10
- main.log.step("Setting up null provider")
+ main.step("Setting up null provider")
for i in range(3):
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(devices))
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear")
diff --git a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py
index 059552b..1a6e3ab 100644
--- a/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py
+++ b/TestON/tests/SCPF/SCPFintentEventTpWithFlowObj/SCPFintentEventTpWithFlowObj.py
@@ -81,18 +81,18 @@
pullResult = main.TRUE
main.log.info( "Skipped git checkout and pull" )
- main.log.step("Grabbing commit number")
+ main.step("Grabbing commit number")
commit = main.ONOSbench.getVersion()
commit = (commit.split(" "))[1]
- main.log.step("Creating results file")
+ main.step("Creating results file")
# Create results file with flow object
flowObjResultsDB = open("/tmp/IntentEventTPflowObjDB", "w+")
flowObjResultsDB.close()
# -- END OF INIT SECTION --#
- main.log.step("Adjusting scale")
+ main.step("Adjusting scale")
print str(scale)
print str(ONOSIp)
clusterCount = int(scale[0])
@@ -102,8 +102,8 @@
BENCHIp = ONOSIp[len(ONOSIp) -2]
#kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes")
- main.log.step("before initiating environment setup")
+ main.step("Safety check, killing all ONOS processes")
+ main.step("before initiating environment setup")
for node in range(maxNodes):
main.ONOSbench.onosDie(ONOSIp[node])
@@ -111,7 +111,7 @@
BENCHIp = ONOSIp[len(ONOSIp) -2]
#Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
+ main.step( "Cleaning Enviornment..." )
for i in range(maxNodes):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( ONOSIp[i] )
@@ -162,7 +162,7 @@
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.net.intent.impl.IntentManager", "skipReleaseResourcesOnWithdrawal " + skipRelRsrc)
devices = int(clusterCount)*10
- main.log.step("Setting up null provider")
+ main.step("Setting up null provider")
for i in range(3):
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "deviceCount " + str(devices))
main.ONOSbench.onosCfgSet( ONOSIp[0], "org.onosproject.provider.nil.NullProviders", "topoShape linear")
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
index 7c3e10a..fe61b9a 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.params
@@ -68,7 +68,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
index 730875e..ef50ab3 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLat/SCPFintentInstallWithdrawLat.py
@@ -168,7 +168,7 @@
time.sleep(2)
main.step("Start ONOS CLI on all nodes")
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
main.threadID = 0
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params
index e1b799a..6eeed39 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.params
@@ -68,7 +68,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py
index bbcf154..37da138 100644
--- a/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py
+++ b/TestON/tests/SCPF/SCPFintentInstallWithdrawLatWithFlowObj/SCPFintentInstallWithdrawLatWithFlowObj.py
@@ -174,7 +174,7 @@
time.sleep(2)
main.step("Start ONOS CLI on all nodes")
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
main.threadID = 0
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
index 246a177..6d684cc 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
+++ b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.params
@@ -69,7 +69,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
index eaffabc..4a63f18 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
+++ b/TestON/tests/SCPF/SCPFintentRerouteLat/SCPFintentRerouteLat.py
@@ -179,7 +179,7 @@
time.sleep(2)
main.step("Start ONOS CLI on all nodes")
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
main.threadID = 0
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params
index 32735bc..237dc5d 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params
+++ b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.params
@@ -69,7 +69,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py
index 70b8a1e..bc6ff0d 100644
--- a/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py
+++ b/TestON/tests/SCPF/SCPFintentRerouteLatWithFlowObj/SCPFintentRerouteLatWithFlowObj.py
@@ -180,7 +180,7 @@
time.sleep(2)
main.step("Start ONOS CLI on all nodes")
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
main.threadID = 0
diff --git a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo b/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo
index 987f444..cdd16f1 100755
--- a/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo
+++ b/TestON/tests/SCPF/SCPFmaxIntents/SCPFmaxIntents.topo
@@ -33,7 +33,7 @@
</ONOSrest1>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
index 4a758b3..0d8687e 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.params
@@ -26,7 +26,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
index 1a73a2b..c988f13 100644
--- a/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
+++ b/TestON/tests/SCPF/SCPFportLat/SCPFportLat.topo
@@ -78,7 +78,7 @@
</ONOS7cli>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
index a6f4445..5420010 100644
--- a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.py
@@ -198,7 +198,7 @@
main.step( "Start ONOS CLI on all nodes" )
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
index a1ec149..8e58be7 100755
--- a/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntents/SCPFscalingMaxIntents.topo
@@ -88,7 +88,7 @@
</ONOScli7>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py
index 438338a..6177b1a 100644
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.py
@@ -198,7 +198,7 @@
main.step( "Start ONOS CLI on all nodes" )
cliResult = main.TRUE
- main.log.step(" Start ONOS cli using thread ")
+ main.step(" Start ONOS cli using thread ")
startCliResult = main.TRUE
pool = []
diff --git a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo
index a1ec149..8e58be7 100755
--- a/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo
+++ b/TestON/tests/SCPF/SCPFscalingMaxIntentsWithFlowObj/SCPFscalingMaxIntentsWithFlowObj.topo
@@ -88,7 +88,7 @@
</ONOScli7>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
index 6035fba..da371c3 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.params
@@ -26,8 +26,7 @@
</CTRL>
<MN>
- <ip1>localhost</ip1>
- <ip2>localhost</ip2>
+ <ip1>OCN</ip1>
</MN>
<BENCH>
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
index 7c12549..e905e5a 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.py
@@ -84,7 +84,7 @@
pullResult = main.TRUE
main.log.info( "Skipped git checkout and pull" )
- main.log.step("Grabbing commit number")
+ main.step("Grabbing commit number")
commit = main.ONOSbench.getVersion() ####
commit = (commit.split(" "))[1]
@@ -103,17 +103,17 @@
# -- END OF INIT SECTION --#
- main.log.step("Adjusting scale")
+ main.step("Adjusting scale")
clusterCount = int(scale[0])
scale.remove(scale[0])
#kill off all onos processes
- main.log.step("Safety check, killing all ONOS processes before initiating environment setup")
+ main.step("Safety check, killing all ONOS processes before initiating environment setup")
for node in range(main.maxNodes):
main.ONOSbench.onosDie(main.ONOSIp[node])
#Uninstall everywhere
- main.log.step( "Cleaning Enviornment..." )
+ main.step( "Cleaning Enviornment..." )
for i in range(main.maxNodes):
main.log.info(" Uninstalling ONOS " + str(i) )
main.ONOSbench.onosUninstall( main.ONOSIp[i] )
diff --git a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
index 8b05fd0..4addd4a 100644
--- a/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
+++ b/TestON/tests/SCPF/SCPFswitchLat/SCPFswitchLat.topo
@@ -87,7 +87,7 @@
</ONOS1>
<Mininet1>
- <host>localhost</host>
+ <host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/README.md b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/README.md
new file mode 100755
index 0000000..21e7773
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/README.md
@@ -0,0 +1,22 @@
+This test verifies control plane resilience from a CLUSTER restart
+
+It consists of
+
+1) Configure and Install ONOS
+2) Start Mininet and check flow state
+3) Pingall
+4) Induce a CLUSTER restart
+5) check flow state
+6) Pingall
+
+Requirements
+
+ - An updated version of the CPQD switch has to be running to make sure it supports group chaining.
+
+The test is executed using the netcfg subsystem:
+ 1) APPS=openflow-base,netcfghostprovider,netcfglinksprovider
+
+The test runs for different topologies:
+ - 2x2 Leaf-Spine and 3-node ONOS cluster
+ - 4x4 Leaf-Spine and 3-node ONOS cluster
+ - Single switch and 3-node ONOS cluster
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.params b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.params
similarity index 100%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.params
copy to TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.params
diff --git a/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.py b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.py
new file mode 100755
index 0000000..ae70e00
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.py
@@ -0,0 +1,106 @@
+# CASE1: 2x2 topo + 3-node ONOS CLUSTER + IP connectivity test + CLUSTER restart
+# CASE2: 4x4 topo + 3-node ONOS CLUSTER + IP connectivity test + CLUSTER restart
+# CASE3: Single switch + 3-node ONOS CLUSTER + IP connectivity test + CLUSTER restart
+
+class SRClusterRestart:
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Induce CLUSTER restart
+ Pingall
+ """
+ description = "Cluster Restart test with 2x2 Leaf-spine "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '2x2'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, "CASE1" )
+ run.killOnos( main, [ 0, 1, 2 ], '4', '8', '0' )
+ run.pingAll( main, 'CASE1_Failure', dumpflows=False )
+ run.recoverOnos( main, [ 0, 1, 2 ], '4', '8', '3' )
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, 'CASE1_Failure' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE2( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Induce Cluster Restart
+ Pingall
+ """
+ description = "Cluster Restart test with 4x4 Leaf-spine "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '4x4'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE2' )
+ run.killOnos( main, [ 0, 1, 2 ], '8', '32', '0' )
+ run.pingAll( main, 'CASE2_Failure', dumpflows=False )
+ run.recoverOnos( main, [ 0, 1, 2 ], '8', '32', '3' )
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE3_Recovery' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE3( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start single switch topology
+ Pingall
+ Induce Cluster Restart
+ Pingall
+ """
+ description = "Cluster Restart test with single switch "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '0x1'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=1 --spine=0" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE3' )
+ run.killOnos( main, [ 0, 1, 2 ], '1', '0', '0' )
+ run.pingAll( main, 'CASE3_Failure', dumpflows=False )
+ run.recoverOnos( main, [ 0, 1, 2 ], '1', '0', '3' )
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE3_Failure' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
similarity index 61%
rename from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
rename to TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
index 546a023..c531f7d 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/SRClusterRestart.topo
@@ -42,13 +42,45 @@
</COMPONENTS>
</ONOScli3>
+ <ONOSrest1>
+ <host>OC1</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest1>
+
+ <ONOSrest2>
+ <host>OC2</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest2>
+
+ <ONOSrest3>
+ <host>OC3</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest3>
<Mininet1>
<host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>7</connect_order>
<COMPONENTS>
<home>~/mininet/custom/</home>
</COMPONENTS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRClusterRestart/__init__.py
similarity index 100%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py
copy to TestON/tests/USECASE/SegmentRouting/SRClusterRestart/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.py b/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.py
deleted file mode 100755
index db5469d..0000000
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# This test should always succeed. it runs cases 1,2,3,4
-#CASE1: Get and Build ONOS
-#CASE2: Package and Install ONOS
-#CASE3: Start Mininet and check flows
-#CASE4: Ping all
-#CASE5: Link Failure
-#CASE6: Switch Failure
-#CASE7: ONOS Failure
-#CASE8: CLUSTER Failure
-#CASE10: Logging
-
-class SRLinkDown:
-
- def __init__( self ):
- self.default = ''
-
- def CASE1( self, main ):
- """
- Sets up 1-node Onos-cluster
- Start 2x2 Leaf-Spine topology
- Pingall
- """
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
-
- description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
- main.case( description )
-
- main.cfgName = '2x2'
- main.numCtrls = 1
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py')
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=116)
- run.pingAll(main)
- run.killLink(main, 'spine101', 'leaf2', switches='4', links='6')
- run.pingAll(main, "CASE1_AfterLinkDown")
- run.restoreLink(main, 'spine101', 'leaf2','of:0000000000000101',
- 'of:0000000000000002', '2', '1', '4', '8')
- run.pingAll(main, "CASE1_AfterLinkUp")
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO Dynamic config of vlan xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
-
- def CASE2( self, main ):
- """
- Sets up 1-node Onos-cluster
- Start 4x4 Leaf-Spine topology
- Pingall
- """
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
- description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
- main.case( description )
- main.cfgName = '4x4'
- main.numCtrls = 1
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py', args="--leaf=4 --spine=4")
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=350)
- run.pingAll(main)
- run.killLink(main, 'spine101', 'leaf2', switches='8', links='30')
- run.pingAll(main, "CASE2_AfterLinkDown")
- run.restoreLink(main, 'spine101', 'leaf2','of:0000000000000101',
- 'of:0000000000000002', '2', '1', '8', '32')
- run.pingAll(main, "CASE2_AfterLinkUp")
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO preconfigured xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
-
- def CASE3( self, main ):
- """
- Sets up 3-node Onos-cluster
- Start 2x2 Leaf-Spine topology
- Pingall
- """
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
- description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
- main.case( description )
- main.cfgName = '2x2'
- main.numCtrls = 3
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py')
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=116)
- run.pingAll(main)
- run.killLink(main, 'spine101', 'leaf2', switches='4', links='6')
- run.pingAll(main, "CASE3_AfterLinkDown")
- run.restoreLink(main, 'spine101', 'leaf2','of:0000000000000101',
- 'of:0000000000000002', '2', '1', '4', '8')
- run.pingAll(main, "CASE3_AfterLinkUp")
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO Dynamic config of vlan xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/README.md b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/README.md
similarity index 100%
rename from TestON/tests/USECASE/SegmentRouting/SRLinkDown/README.md
rename to TestON/tests/USECASE/SegmentRouting/SRLinkFailure/README.md
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params
new file mode 100755
index 0000000..8f3ade9
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.params
@@ -0,0 +1,46 @@
+<PARAMS>
+
+ <testcases>1,2,4,5</testcases>
+
+ <SCALE>
+ <size>3</size>
+ <max>3</max>
+ </SCALE>
+
+ <DEPENDENCY>
+ <wrapper1>startUp</wrapper1>
+ <topology>cord_fabric.py</topology>
+ </DEPENDENCY>
+
+ <ENV>
+ <cellName>productionCell</cellName>
+ <cellApps>drivers,segmentrouting</cellApps>
+ <diffApps>openflow-base,netcfghostprovider,netcfglinksprovider</diffApps>
+ <cellUser>sdn</cellUser>
+ </ENV>
+
+ <GIT>
+ <pull>False</pull>
+ <branch>master</branch>
+ </GIT>
+
+ <CTRL>
+ <port>6653</port>
+ </CTRL>
+
+ <timers>
+ <LinkDiscovery>12</LinkDiscovery>
+ <SwitchDiscovery>12</SwitchDiscovery>
+ </timers>
+
+ <kill>
+ <switch> spine101 </switch>
+ <dpid> 000000000101 </dpid>
+ <links> leaf1 leaf2 </links>
+ </kill>
+
+ <SLEEP>
+ <startup>10</startup>
+ </SLEEP>
+
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py
new file mode 100755
index 0000000..b388a64
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.py
@@ -0,0 +1,147 @@
+# In this test we perform a link failure and then test for connectivity
+# CASE1: 2x2 topo + link failure + IP connectivity test
+# CASE2: 4x4 topo + link failure + IP connectivity test
+# CASE4: 2x2 topo + 3-node ONOS CLUSTER + link failure + IP connectivity test
+# CASE5: 4x4 topo + 3-node ONOS CLUSTER + link failure + IP connectivity test
+
+class SRLinkFailure:
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+
+ description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
+ main.case( description )
+
+ main.cfgName = '2x2'
+ main.numCtrls = 1
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main )
+ # link failure
+ run.killLink( main, 'spine101', 'leaf2', switches='4', links='6' )
+ run.pingAll( main, "CASE1_Failure" )
+ run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
+ 'of:0000000000000002', '2', '1', '4', '8' )
+ run.pingAll( main, "CASE1_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE2( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
+ main.case( description )
+ main.cfgName = '4x4'
+ main.numCtrls = 1
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main )
+ # link failure
+ run.killLink( main, 'spine101', 'leaf2', switches='8', links='30' )
+ run.pingAll( main, "CASE2_Failure" )
+ run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
+ 'of:0000000000000002', '2', '1', '8', '32' )
+ run.pingAll( main, "CASE2_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO preconfigured xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE4( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
+ main.case( description )
+ main.cfgName = '2x2'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main )
+ # link failure
+ run.killLink( main, 'spine101', 'leaf2', switches='4', links='6' )
+ run.pingAll( main, "CASE3_Failure" )
+ run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
+ 'of:0000000000000002', '2', '1', '4', '8' )
+ run.pingAll( main, "CASE3_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE5( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
+ main.case( description )
+ main.cfgName = '4x4'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main )
+ # link failure
+ run.killLink( main, 'spine101', 'leaf2', switches='8', links='30' )
+ run.pingAll( main, "CASE2_Failure" )
+ run.restoreLink( main, 'spine101', 'leaf2', 'of:0000000000000101',
+ 'of:0000000000000002', '2', '1', '8', '32' )
+ run.pingAll( main, "CASE2_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO preconfigured xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
similarity index 61%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
copy to TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
index 546a023..2d69c35 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/SRLinkFailure.topo
@@ -21,7 +21,7 @@
<COMPONENTS>
</COMPONENTS>
</ONOScli1>
-
+
<ONOScli2>
<host>OC2</host>
<user>sdn</user>
@@ -42,13 +42,45 @@
</COMPONENTS>
</ONOScli3>
+ <ONOSrest1>
+ <host>OC1</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest1>
+
+ <ONOSrest2>
+ <host>OC2</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest2>
+
+ <ONOSrest3>
+ <host>OC3</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest3>
<Mininet1>
<host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>8</connect_order>
<COMPONENTS>
<home>~/mininet/custom/</home>
</COMPONENTS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRLinkFailure/__init__.py
similarity index 100%
rename from TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py
rename to TestON/tests/USECASE/SegmentRouting/SRLinkFailure/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/README.md b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/README.md
new file mode 100755
index 0000000..94677cb
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/README.md
@@ -0,0 +1,22 @@
+This test verifies basic control plane resilience from an ONOS Instance failure using SegmentRouting via pingall
+
+It consists of
+
+1) Configure and Install ONOS
+2) Start Mininet and check flow state
+3) Pingall
+4) Induce a ONOS failure
+5) check flow state
+6) Pingall
+
+Requirements
+
+ - An updated version of the CPQD switch has to be running to make sure it supports group chaining.
+
+The test is executed using the netcfg subsystem:
+ 1) APPS=openflow-base,netcfghostprovider,netcfglinksprovider
+
+The test runs for different topologies:
+ - 2x2 Leaf-Spine and 3-node ONOS cluster
+ - 4x4 Leaf-Spine and 3-node ONOS cluster
+ - Single switch and 3-node ONOS cluster
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.params b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.params
similarity index 100%
rename from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.params
rename to TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.params
diff --git a/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.py b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.py
new file mode 100755
index 0000000..53daa33
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.py
@@ -0,0 +1,106 @@
+# CASE1: 2x2 topo + 3-node ONOS CLUSTER + IP connectivity test + Control plane resilience
+# CASE2: 4x4 topo + 3-node ONOS CLUSTER + IP connectivity test + Control plane resilience
+# CASE3: Single switch + 3-node ONOS CLUSTER + IP connectivity test + Control plane resilience
+
+class SROnosFailure:
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Induce ONOS Failure
+ Pingall
+ """
+ description = "ONOS Failure test with 2x2 Leaf-spine "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '2x2'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, "CASE1" )
+ run.killOnos( main, [ 0 ], '4', '8', '2' )
+ run.pingAll( main, 'CASE1_Failure' )
+ run.recoverOnos( main, [ 0 ], '4', '8', '3' )
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, 'CASE1_Failure' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE2( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Induce ONOS Failure
+ Pingall
+ """
+ description = "ONOS Failure test with 4x4 Leaf-spine "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '4x4'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE2' )
+ run.killOnos( main, [ 0 ], '8', '32', '2' )
+ run.pingAll( main, 'CASE2_Failure' )
+ run.recoverOnos( main, [ 0 ], '8', '32', '3' )
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE3_Recovery' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE3( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start single switch topology
+ Pingall
+ Induce ONOS Failure
+ Pingall
+ """
+ description = "ONOS Failure test with single switch "
+ main.case( description )
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ main.cfgName = '0x1'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=1 --spine=0" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE3' )
+ run.killOnos( main, [ 0 ], '1', '0', '2' )
+ run.pingAll( main, 'CASE3_Failure' )
+ run.recoverOnos( main, [ 0 ], '1', '0', '3' )
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE3_Failure' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
similarity index 61%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
copy to TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
index 546a023..c531f7d 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/SROnosFailure.topo
@@ -42,13 +42,45 @@
</COMPONENTS>
</ONOScli3>
+ <ONOSrest1>
+ <host>OC1</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest1>
+
+ <ONOSrest2>
+ <host>OC2</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest2>
+
+ <ONOSrest3>
+ <host>OC3</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest3>
<Mininet1>
<host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>7</connect_order>
<COMPONENTS>
<home>~/mininet/custom/</home>
</COMPONENTS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py b/TestON/tests/USECASE/SegmentRouting/SROnosFailure/__init__.py
similarity index 100%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py
copy to TestON/tests/USECASE/SegmentRouting/SROnosFailure/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSanity/README.md b/TestON/tests/USECASE/SegmentRouting/SRSanity/README.md
index 59c1214..e20287e 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSanity/README.md
+++ b/TestON/tests/USECASE/SegmentRouting/SRSanity/README.md
@@ -1,7 +1,6 @@
-This test verifies basic connectivity using SegmentRouting via pingall,
-it should not fail.
+This test verifies basic IP connectivity using SegmentRouting via pingall
-It consists of
+It consists of
1) Configure and Install ONOS
2) Start Mininet and check flow state
@@ -13,4 +12,10 @@
The test is executed using the netcfg subsystem:
1) APPS=openflow-base,netcfghostprovider,netcfglinksprovider
-The topology is a 2x2 Leaf-spine
+The test runs for different topologies:
+ - 2x2 Leaf-Spine and 1-node ONOS cluster
+ - 4x4 Leaf-Spine and 1-node ONOS cluster
+ - Single switch and 1-node ONOS cluster
+ - 2x2 Leaf-Spine and 3-node ONOS cluster
+ - 4x4 Leaf-Spine and 3-node ONOS cluster
+ - Single switch and 3-node ONOS cluster
\ No newline at end of file
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.params b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.params
index 1a58556..a757a48 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.params
+++ b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.params
@@ -1,6 +1,6 @@
<PARAMS>
- <testcases>1,2,3</testcases>
+ <testcases>1,2,3,4,5,6</testcases>
<SCALE>
<size>3</size>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.py b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.py
index 77e90e3..e62dc78 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.py
+++ b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.py
@@ -1,10 +1,11 @@
-# This test should always succeed. it runs cases 1,2,3
-#CASE1: 2x2 Leaf-Spine topo and test IP connectivity
-#CASE2: 4x4 topo + IP connectivity test
-#CASE3: 2x2 topo + 3-node ONOS CLUSTER + IP connectivity test
+# CASE1: 2x2 Leaf-Spine topo and test IP connectivity
+# CASE2: 4x4 topo + IP connectivity test
+# CASE3: Single switch topo + IP connectivity test
+# CASE4: 2x2 topo + 3-node ONOS CLUSTER + IP connectivity test
+# CASE5: 4x4 topo + 3-node ONOS CLUSTER + IP connectivity test
+# CASE6: Single switch + 3-node ONOS CLUSTER + IP connectivity test
class SRSanity:
-
def __init__( self ):
self.default = ''
@@ -14,26 +15,27 @@
Start 2x2 Leaf-Spine topology
Pingall
"""
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
main.case( description )
main.cfgName = '2x2'
main.numCtrls = 1
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py')
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=116)
- run.pingAll(main, "CASE1")
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO Dynamic config of vlan xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, "CASE1" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
def CASE2( self, main ):
"""
@@ -41,46 +43,126 @@
Start 4x4 Leaf-Spine topology
Pingall
"""
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
main.case( description )
main.cfgName = '4x4'
main.numCtrls = 1
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py', args="--leaf=4 --spine=4")
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=350)
- run.pingAll(main, 'CASE2')
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO Dynamic config of vlan xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE2' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
def CASE3( self, main ):
"""
+ Sets up 1-node Onos-cluster
+ Start single switch topology
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with single switch "
+ main.case( description )
+ main.cfgName = '0x1'
+ main.numCtrls = 1
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=1 --spine=0" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE3' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE4( self, main ):
+ """
Sets up 3-node Onos-cluster
Start 2x2 Leaf-Spine topology
Pingall
"""
- from tests.USECASE.SegmentRouting.dependencies.Testcaselib import Testcaselib as run
- if not hasattr(main,'apps'):
- run.initTest(main)
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
main.case( description )
main.cfgName = '2x2'
main.numCtrls = 3
- run.installOnos(main)
- run.startMininet(main, 'cord_fabric.py')
- #pre-configured routing and bridging test
- run.checkFlows(main, flowCount=116)
- run.pingAll(main, 'CASE3')
- #TODO Dynamic config of hosts in subnet
- #TODO Dynamic config of host not in subnet
- #TODO Dynamic config of vlan xconnect
- #TODO Vrouter integration
- #TODO Mcast integration
- run.cleanup(main)
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, 'CASE4' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE5( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
+ main.case( description )
+ main.cfgName = '4x4'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, 'CASE5' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE6( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start single switch topology
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with single switch "
+ main.case( description )
+ main.cfgName = '0x1'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=1 --spine=0" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=15 )
+ run.pingAll( main, 'CASE4' )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
index 546a023..c531f7d 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRSanity/SRSanity.topo
@@ -42,13 +42,45 @@
</COMPONENTS>
</ONOScli3>
+ <ONOSrest1>
+ <host>OC1</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest1>
+
+ <ONOSrest2>
+ <host>OC2</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest2>
+
+ <ONOSrest3>
+ <host>OC3</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest3>
<Mininet1>
<host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>7</connect_order>
<COMPONENTS>
<home>~/mininet/custom/</home>
</COMPONENTS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/README.md b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/README.md
similarity index 100%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/README.md
copy to TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/README.md
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.params b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.params
new file mode 100755
index 0000000..8f3ade9
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.params
@@ -0,0 +1,46 @@
+<PARAMS>
+
+ <testcases>1,2,4,5</testcases>
+
+ <SCALE>
+ <size>3</size>
+ <max>3</max>
+ </SCALE>
+
+ <DEPENDENCY>
+ <wrapper1>startUp</wrapper1>
+ <topology>cord_fabric.py</topology>
+ </DEPENDENCY>
+
+ <ENV>
+ <cellName>productionCell</cellName>
+ <cellApps>drivers,segmentrouting</cellApps>
+ <diffApps>openflow-base,netcfghostprovider,netcfglinksprovider</diffApps>
+ <cellUser>sdn</cellUser>
+ </ENV>
+
+ <GIT>
+ <pull>False</pull>
+ <branch>master</branch>
+ </GIT>
+
+ <CTRL>
+ <port>6653</port>
+ </CTRL>
+
+ <timers>
+ <LinkDiscovery>12</LinkDiscovery>
+ <SwitchDiscovery>12</SwitchDiscovery>
+ </timers>
+
+ <kill>
+ <switch> spine101 </switch>
+ <dpid> 000000000101 </dpid>
+ <links> leaf1 leaf2 </links>
+ </kill>
+
+ <SLEEP>
+ <startup>10</startup>
+ </SLEEP>
+
+</PARAMS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py
new file mode 100755
index 0000000..b516cc0
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.py
@@ -0,0 +1,151 @@
+# In this test we perform a switch failure and then test for connectivity
+# CASE1: 2x2 topo + swtich failure + IP connectivity test
+# CASE2: 4x4 topo + switch failure + IP connectivity test
+# CASE4: 2x2 topo + 3-node ONOS CLUSTER + switch failure + IP connectivity test
+# CASE5: 4x4 topo + 3-node ONOS CLUSTER + switch failure + IP connectivity test
+
+class SRSwitchFailure:
+ def __init__( self ):
+ self.default = ''
+
+ def CASE1( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Cause switch failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+
+ description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
+ main.case( description )
+
+ main.cfgName = '2x2'
+ main.numCtrls = 1
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main )
+ # switch failure\
+ switch = main.params[ 'kill' ][ 'switch' ]
+ run.killSwitch( main, switch, switches='3', links='4' )
+ run.pingAll( main, "CASE1_Failure" )
+ run.recoverSwitch( main, switch, switches='4', links='8' )
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, "CASE1_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE2( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Cause switch failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
+ main.case( description )
+ main.cfgName = '4x4'
+ main.numCtrls = 1
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main )
+ # switch failure
+ switch = main.params[ 'kill' ][ 'switch' ]
+ run.killSwitch( main, switch, switches='7', links='24' )
+ run.pingAll( main, "CASE2_Failure" )
+ run.recoverSwitch( main, switch, switches='8', links='32' )
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, "CASE2_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO preconfigured xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE4( self, main ):
+ """
+ Sets up 3-node Onos-cluster
+ Start 2x2 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 2x2 Leaf-spine "
+ main.case( description )
+ main.cfgName = '2x2'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py' )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main )
+ # switch failure
+ switch = main.params[ 'kill' ][ 'switch' ]
+ run.killSwitch( main, switch, switches='3', links='4' )
+ run.pingAll( main, "CASE3_Failure" )
+ run.recoverSwitch( main, switch, switches='4', links='8' )
+ run.checkFlows( main, minFlowCount=116 )
+ run.pingAll( main, "CASE3_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO Dynamic config of vlan xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
+
+ def CASE5( self, main ):
+ """
+ Sets up 1-node Onos-cluster
+ Start 4x4 Leaf-Spine topology
+ Pingall
+ Cause link failure
+ Pingall
+ """
+ from tests.USECASE.SegmentRouting.dependencies.Testcaselib import \
+ Testcaselib as run
+ if not hasattr( main, 'apps' ):
+ run.initTest( main )
+ description = "Bridging and Routing sanity test with 4x4 Leaf-spine "
+ main.case( description )
+ main.cfgName = '4x4'
+ main.numCtrls = 3
+ run.installOnos( main )
+ run.startMininet( main, 'cord_fabric.py', args="--leaf=4 --spine=4" )
+ # pre-configured routing and bridging test
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main )
+ # switch failure
+ switch = main.params[ 'kill' ][ 'switch' ]
+ run.killSwitch( main, switch, switches='7', links='24' )
+ run.pingAll( main, "CASE4_Failure" )
+ run.recoverSwitch( main, switch, switches='8', links='32' )
+ run.checkFlows( main, minFlowCount=350 )
+ run.pingAll( main, "CASE4_Recovery" )
+ # TODO Dynamic config of hosts in subnet
+ # TODO Dynamic config of host not in subnet
+ # TODO preconfigured xconnect
+ # TODO Vrouter integration
+ # TODO Mcast integration
+ run.cleanup( main )
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
similarity index 61%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
copy to TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
index 546a023..2d69c35 100755
--- a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/SRLinkDown.topo
+++ b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/SRSwitchFailure.topo
@@ -21,7 +21,7 @@
<COMPONENTS>
</COMPONENTS>
</ONOScli1>
-
+
<ONOScli2>
<host>OC2</host>
<user>sdn</user>
@@ -42,13 +42,45 @@
</COMPONENTS>
</ONOScli3>
+ <ONOSrest1>
+ <host>OC1</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest1>
+
+ <ONOSrest2>
+ <host>OC2</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest2>
+
+ <ONOSrest3>
+ <host>OC3</host>
+ <port>8181</port>
+ <user>onos</user>
+ <password>rocks</password>
+ <type>OnosRestDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS>
+ </COMPONENTS>
+ </ONOSrest3>
<Mininet1>
<host>OCN</host>
<user>sdn</user>
<password>rocks</password>
<type>MininetCliDriver</type>
- <connect_order>5</connect_order>
+ <connect_order>8</connect_order>
<COMPONENTS>
<home>~/mininet/custom/</home>
</COMPONENTS>
diff --git a/TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py b/TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/__init__.py
similarity index 100%
copy from TestON/tests/USECASE/SegmentRouting/SRLinkDown/__init__.py
copy to TestON/tests/USECASE/SegmentRouting/SRSwitchFailure/__init__.py
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json b/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json
new file mode 100755
index 0000000..8232036
--- /dev/null
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/0x1.json
@@ -0,0 +1,46 @@
+{
+ "ports" : {
+ "of:0000000000000001/1" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.1.254/24" ]
+ }
+ ]
+ },
+ "of:0000000000000001/2" : {
+ "interfaces" : [
+ {
+ "ips" : [ "10.0.1.254/24" ]
+ }
+ ]
+ }
+ },
+ "devices" : {
+ "of:0000000000000001" : {
+ "basic":{ "driver" : "ofdpa-cpqd" },
+ "segmentrouting" : {
+ "name" : "Leaf-R1",
+ "nodeSid" : 1,
+ "routerIp" : "192.168.0.1",
+ "routerMac" : "10:00:00:00:00:01",
+ "isEdgeRouter" : true,
+ "adjacencySids" : []
+ }
+ }
+ },
+ "hosts" : {
+ "00:00:00:00:00:01/-1" : {
+ "basic": {
+ "ips": ["10.0.1.1"],
+ "location": "of:0000000000000001/1"
+ }
+ },
+ "00:00:00:00:00:02/-1" : {
+ "basic": {
+ "ips": ["10.0.1.2"],
+ "location": "of:0000000000000001/2"
+ }
+ }
+ }
+
+}
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
index 3bbca7d..8565930 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/Testcaselib.py
@@ -1,6 +1,7 @@
import os
import imp
import time
+import json
from core import utilities
@@ -17,7 +18,6 @@
- Install ONOS package
- Build ONOS package
"""
- main.case( "Constructing test variables and building ONOS" )
main.step( "Constructing test variables" )
# Test variables
main.cellName = main.params[ 'ENV' ][ 'cellName' ]
@@ -25,21 +25,23 @@
main.diff = main.params[ 'ENV' ][ 'diffApps' ]
gitBranch = main.params[ 'GIT' ][ 'branch' ]
main.path = os.path.dirname( main.testFile )
- main.dependencyPath = main.path +"/../dependencies/"
+ main.dependencyPath = main.path + "/../dependencies/"
main.topology = main.params[ 'DEPENDENCY' ][ 'topology' ]
wrapperFile1 = main.params[ 'DEPENDENCY' ][ 'wrapper1' ]
- main.scale = ( main.params[ 'SCALE' ][ 'size' ] ).split( "," )
+ main.scale = (main.params[ 'SCALE' ][ 'size' ]).split( "," )
main.maxNodes = int( main.params[ 'SCALE' ][ 'max' ] )
- #main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
+ # main.ONOSport = main.params[ 'CTRL' ][ 'port' ]
main.startUpSleep = int( main.params[ 'SLEEP' ][ 'startup' ] )
- main.cellData = {} # for creating cell file
- main.CLIs = []
- main.ONOSip = []
+ main.cellData = { } # for creating cell file
+ main.CLIs = [ ]
+ main.ONOSip = [ ]
+ main.RESTs = [ ]
# Assigning ONOS cli handles to a list
- for i in range( 1, main.maxNodes + 1 ):
+ for i in range( 1, main.maxNodes + 1 ):
main.CLIs.append( getattr( main, 'ONOScli' + str( i ) ) )
- main.ONOSip.append( main.CLIs[i-1].ip_address )
+ main.RESTs.append( getattr( main, 'ONOSrest' + str( i ) ) )
+ main.ONOSip.append( main.CLIs[ i - 1 ].ip_address )
# -- INIT SECTION, ONLY RUNS ONCE -- #
main.startUp = imp.load_source( wrapperFile1,
main.dependencyPath +
@@ -77,18 +79,19 @@
- Connect to cli
"""
# main.scale[ 0 ] determines the current number of ONOS controller
- apps=main.apps
+ apps = main.apps
if main.diff:
apps = main.apps + "," + main.diff
- else: main.log.error( "App list is empty" )
- main.case( "Package and start ONOS using apps:" + apps)
+ else:
+ main.log.error( "App list is empty" )
+ main.case( "Package and start ONOS using apps:" + apps )
print "NODE COUNT = ", main.numCtrls
print main.ONOSip
- tempOnosIp = []
+ tempOnosIp = [ ]
for i in range( main.numCtrls ):
- tempOnosIp.append( main.ONOSip[i] )
+ tempOnosIp.append( main.ONOSip[ i ] )
onosUser = main.params[ 'ENV' ][ 'cellUser' ]
- main.step("Create and Apply cell file")
+ main.step( "Create and Apply cell file" )
main.ONOSbench.createCellFile( main.ONOSbench.ip_address,
"temp",
main.Mininet1.ip_address,
@@ -96,33 +99,33 @@
tempOnosIp,
onosUser )
cellResult = main.ONOSbench.setCell( "temp" )
- verifyResult = main.ONOSbench.verifyCell()
+ verifyResult = main.ONOSbench.verifyCell( )
stepResult = cellResult and verifyResult
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully applied cell to " + \
"environment",
onfail="Failed to apply cell to environment " )
- #kill off all onos processes
+ # kill off all onos processes
main.log.info( "Safety check, killing all ONOS processes" +
" before initiating environment setup" )
for i in range( main.maxNodes ):
main.ONOSbench.onosDie( main.ONOSip[ i ] )
main.step( "Create and Install ONOS package" )
- main.ONOSbench.handle.sendline( "cp "+main.dependencyPath+"/"+main.cfgName+".json ~/onos/tools/package/config/network-cfg.json")
- packageResult = main.ONOSbench.onosPackage()
+ packageResult = main.ONOSbench.onosPackage( )
onosInstallResult = main.TRUE
for i in range( main.numCtrls ):
onosInstallResult = onosInstallResult and \
- main.ONOSbench.onosInstall( node=main.ONOSip[ i ] )
+ main.ONOSbench.onosInstall(
+ node=main.ONOSip[ i ] )
stepResult = onosInstallResult
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
onpass="Successfully installed ONOS package",
onfail="Failed to install ONOS package" )
main.step( "Starting ONOS service" )
- stopResult,startResult, onosIsUp= main.TRUE, main.TRUE, main.TRUE,
+ stopResult, startResult, onosIsUp = main.TRUE, main.TRUE, main.TRUE,
for i in range( main.numCtrls ):
onosIsUp = onosIsUp and main.ONOSbench.isup( main.ONOSip[ i ] )
if onosIsUp == main.TRUE:
@@ -144,17 +147,18 @@
onfail="ONOS service did not start properly" )
main.step( "Checking if ONOS CLI is ready" )
for i in range( main.numCtrls ):
- main.CLIs[i].startCellCli()
- cliResult = main.CLIs[i].startOnosCli( main.ONOSip[ i ],
- commandlineTimeout=60, onosStartTimeout=100 )
+ main.CLIs[ i ].startCellCli( )
+ cliResult = main.CLIs[ i ].startOnosCli( main.ONOSip[ i ],
+ commandlineTimeout=60,
+ onosStartTimeout=100 )
utilities.assert_equals( expect=main.TRUE,
actual=cliResult,
onpass="ONOS CLI is ready",
onfail="ONOS CLI is not ready" )
- main.active=0
+ main.active = 0
for i in range( 10 ):
ready = True
- output = main.CLIs[main.active].summary()
+ output = main.CLIs[ main.active ].summary( )
if not output:
ready = False
if ready:
@@ -164,23 +168,28 @@
onpass="ONOS summary command succeded",
onfail="ONOS summary command failed" )
+ with open( main.dependencyPath + "/" + main.cfgName + ".json" ) as cfg:
+ main.RESTs[ main.active ].setNetCfg( json.load( cfg ) )
+
if not ready:
main.log.error( "ONOS startup failed!" )
- main.cleanup()
- main.exit()
+ main.cleanup( )
+ main.exit( )
for i in range( main.numCtrls ):
- main.CLIs[i].logSet( "DEBUG", "org.onosproject.segmentrouting" )
- main.CLIs[i].logSet( "DEBUG", "org.onosproject.driver.pipeline" )
- main.CLIs[i].logSet( "DEBUG", "org.onosproject.store.group.impl" )
- main.CLIs[i].logSet( "DEBUG", "org.onosproject.net.flowobjective.impl" )
+ main.CLIs[ i ].logSet( "DEBUG", "org.onosproject.segmentrouting" )
+ main.CLIs[ i ].logSet( "DEBUG", "org.onosproject.driver.pipeline" )
+ main.CLIs[ i ].logSet( "DEBUG", "org.onosproject.store.group.impl" )
+ main.CLIs[ i ].logSet( "DEBUG",
+ "org.onosproject.net.flowobjective.impl" )
@staticmethod
def startMininet( main, topology, args="" ):
main.step( "Starting Mininet Topology" )
arg = "--onos %d %s" % (main.numCtrls, args)
- main.topology=topology
- topoResult = main.Mininet1.startNet( topoFile= main.dependencyPath + main.topology, args=arg )
+ main.topology = topology
+ topoResult = main.Mininet1.startNet(
+ topoFile=main.dependencyPath + main.topology, args=arg )
stepResult = topoResult
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
@@ -188,52 +197,53 @@
onfail="Failed to load topology" )
# Exit if topology did not load properly
if not topoResult:
- main.cleanup()
- main.exit()
+ main.cleanup( )
+ main.exit( )
@staticmethod
- def checkFlows( main, flowCount ):
- main.step(" Check whether the flow count is bigger than %s" % flowCount)
- count = utilities.retry( main.CLIs[main.active].checkFlowCount,
- main.FALSE,
- kwargs={'min':flowCount},
- attempts=10,
- sleep=10 )
+ def checkFlows( main, minFlowCount ):
+ main.step(
+ " Check whether the flow count is bigger than %s" % minFlowCount )
+ count = utilities.retry( main.CLIs[ main.active ].checkFlowCount,
+ main.FALSE,
+ kwargs={ 'min': minFlowCount },
+ attempts=10,
+ sleep=10 )
utilities.assertEquals( \
expect=True,
- actual=(count>0),
- onpass="Flow count looks correct: "+str(count),
- onfail="Flow count looks wrong: "+str(count) )
+ actual=(count > 0),
+ onpass="Flow count looks correct: " + str( count ),
+ onfail="Flow count looks wrong: " + str( count ) )
main.step( "Check whether all flow status are ADDED" )
- flowCheck = utilities.retry( main.CLIs[main.active].checkFlowsState,
+ flowCheck = utilities.retry( main.CLIs[ main.active ].checkFlowsState,
main.FALSE,
- kwargs={'isPENDING':False},
+ kwargs={ 'isPENDING': False },
attempts=10,
- sleep=10)
+ sleep=10 )
utilities.assertEquals( \
expect=main.TRUE,
actual=flowCheck,
onpass="Flow status is correct!",
onfail="Flow status is wrong!" )
- main.ONOSbench.dumpFlows( main.ONOSip[main.active],
- main.logdir, "flowsBefore" + main.cfgName)
- main.ONOSbench.dumpGroups( main.ONOSip[0],
- main.logdir, "groupsBefore" + main.cfgName)
+ main.ONOSbench.dumpFlows( main.ONOSip[ main.active ],
+ main.logdir, "flowsBefore" + main.cfgName )
+ main.ONOSbench.dumpGroups( main.ONOSip[ 0 ],
+ main.logdir, "groupsBefore" + main.cfgName )
@staticmethod
- def pingAll( main, tag=""):
+ def pingAll( main, tag="", dumpflows=True ):
main.log.report( "Check full connectivity" )
- main.step("Check full connectivity %s" %tag)
- pa = main.Mininet1.pingall()
+ main.step( "Check full connectivity %s" % tag )
+ pa = main.Mininet1.pingall( )
utilities.assert_equals( expect=main.TRUE, actual=pa,
onpass="Full connectivity successfully tested",
onfail="Full connectivity failed" )
- ##FIXME choose valid onos instead of 0
- main.ONOSbench.dumpFlows( main.ONOSip[main.active],
- main.logdir, "flowsOn" + tag)
- main.ONOSbench.dumpGroups( main.ONOSip[main.active],
- main.logdir, "groupsOn" + tag)
+ if dumpflows:
+ main.ONOSbench.dumpFlows( main.ONOSip[ main.active ],
+ main.logdir, "flowsOn" + tag )
+ main.ONOSbench.dumpGroups( main.ONOSip[ main.active ],
+ main.logdir, "groupsOn" + tag )
@staticmethod
def killLink( main, end1, end2, switches, links ):
@@ -243,47 +253,50 @@
Kill a link and verify ONOS can see the proper link change
"""
main.linkSleep = float( main.params[ 'timers' ][ 'LinkDiscovery' ] )
- main.step( "Kill link between %s and %s" %(end1, end2))
+ main.step( "Kill link between %s and %s" % (end1, end2) )
LinkDown = main.Mininet1.link( END1=end1, END2=end2, OPTION="down" )
- main.log.info( "Waiting %s seconds for link up to be discovered" % (main.linkSleep) )
- # TODO Maybe parameterize number of expected links
+ main.log.info(
+ "Waiting %s seconds for link down to be discovered" % main.linkSleep )
time.sleep( main.linkSleep )
- ##FIXME CLI for active node instead of 0
- topology = utilities.retry( main.CLIs[main.active].checkStatus,
- main.FALSE,
- kwargs={'numoswitch':switches, 'numolink':links},
- attempts=10,
- sleep=main.linkSleep)
+ topology = utilities.retry( main.CLIs[ main.active ].checkStatus,
+ main.FALSE,
+ kwargs={ 'numoswitch': switches,
+ 'numolink': links },
+ attempts=10,
+ sleep=main.linkSleep )
result = topology & LinkDown
utilities.assert_equals( expect=main.TRUE, actual=result,
onpass="Link down successful",
onfail="Failed to turn off link?" )
@staticmethod
- def restoreLink( main, end1, end2, dpid1, dpid2, port1, port2, switches, links ):
+ def restoreLink( main, end1, end2, dpid1, dpid2, port1, port2, switches,
+ links ):
"""
Params:
end1,end2: identify the end switches, ex.: 'leaf1', 'spine1'
dpid1, dpid2: dpid of the end switches respectively, ex.: 'of:0000000000000002'
- port1, port2: respective port of the end switchs that connects to the link, ex.:'1'
+ port1, port2: respective port of the end switches that connects to the link, ex.:'1'
switches, links: number of expected switches and links after linkDown, ex.: '4', '6'
Kill a link and verify ONOS can see the proper link change
"""
- main.step( "Restore link between %s and %s" %( end1, end2 ) )
+ main.step( "Restore link between %s and %s" % (end1, end2) )
result = False
- count=0
+ count = 0
while True:
- count+=0
+ count += 0
main.Mininet1.link( END1=end1, END2=end2, OPTION="up" )
main.Mininet1.link( END2=end1, END1=end2, OPTION="up" )
- main.log.info( "Waiting %s seconds for link up to be discovered" % (main.linkSleep) )
+ main.log.info(
+ "Waiting %s seconds for link up to be discovered" % main.linkSleep )
time.sleep( main.linkSleep )
- main.CLIs[main.active].portstate( dpid=dpid1, port=port1 )
- main.CLIs[main.active].portstate( dpid=dpid2, port=port2 )
+ main.CLIs[ main.active ].portstate( dpid=dpid1, port=port1 )
+ main.CLIs[ main.active ].portstate( dpid=dpid2, port=port2 )
time.sleep( main.linkSleep )
- result = main.CLIs[main.active].checkStatus( numoswitch=switches, numolink=links )
- if count>5 or result:
+ result = main.CLIs[ main.active ].checkStatus( numoswitch=switches,
+ numolink=links )
+ if count > 5 or result:
break
utilities.assert_equals( expect=main.TRUE, actual=result,
onpass="Link up successful",
@@ -293,19 +306,22 @@
def killSwitch( main, switch, switches, links ):
"""
Params: switches, links: number of expected switches and links after SwitchDown, ex.: '4', '6'
- Kill a switch and verify ONOS can see the proper change
+ Completely kill a switch and verify ONOS can see the proper change
"""
main.switchSleep = float( main.params[ 'timers' ][ 'SwitchDiscovery' ] )
main.step( "Kill " + switch )
main.log.info( "Stopping" + switch )
main.Mininet1.switch( SW=switch, OPTION="stop" )
- main.log.info( "Waiting %s seconds for switch down to be discovered" % ( main.switchSleep ) )
+ # todo make this repeatable
+ main.log.info( "Waiting %s seconds for switch down to be discovered" % (
+ main.switchSleep) )
time.sleep( main.switchSleep )
- topology = utilities.retry( main.CLIs[main.active].checkStatus,
- main.FALSE,
- kwargs={'numoswitch':switches, 'numolink':links},
- attempts=10,
- sleep=main.switchSleep)
+ topology = utilities.retry( main.CLIs[ main.active ].checkStatus,
+ main.FALSE,
+ kwargs={ 'numoswitch': switches,
+ 'numolink': links },
+ attempts=10,
+ sleep=main.switchSleep )
utilities.assert_equals( expect=main.TRUE, actual=topology,
onpass="Kill switch successful",
onfail="Failed to kill switch?" )
@@ -316,16 +332,19 @@
Params: switches, links: number of expected switches and links after SwitchUp, ex.: '4', '6'
Recover a switch and verify ONOS can see the proper change
"""
+ # todo make this repeatable
main.step( "Recovering " + switch )
main.log.info( "Starting" + switch )
- main.Mininet1.switch( SW=switch, OPTION="start")
- main.log.info( "Waiting %s seconds for switch up to be discovered" %(main.switchSleep))
+ main.Mininet1.switch( SW=switch, OPTION="start" )
+ main.log.info( "Waiting %s seconds for switch up to be discovered" % (
+ main.switchSleep) )
time.sleep( main.switchSleep )
- topology = utilities.retry( main.CLIs[main.active].checkStatus,
- main.FALSE,
- kwargs={'numoswitch':switches, 'numolink':links},
- attempts=10,
- sleep=main.switchSleep)
+ topology = utilities.retry( main.CLIs[ main.active ].checkStatus,
+ main.FALSE,
+ kwargs={ 'numoswitch': switches,
+ 'numolink': links },
+ attempts=10,
+ sleep=main.switchSleep )
utilities.assert_equals( expect=main.TRUE, actual=topology,
onpass="Switch recovery successful",
onfail="Failed to recover switch?" )
@@ -337,10 +356,93 @@
Stops Mininet
Copies ONOS log
"""
- main.Mininet1.stopNet()
- main.ONOSbench.scp( main.ONOScli1 ,"/opt/onos/log/karaf.log",
- "/tmp/karaf.log", direction="from" )
- main.ONOSbench.cpLogsToDir("/tmp/karaf.log",main.logdir,
- copyFileName="karaf.log."+main.cfgName)
- for i in range(main.numCtrls):
- main.ONOSbench.onosStop( main.ONOSip[i] )
+ main.Mininet1.stopNet( )
+ main.ONOSbench.scp( main.ONOScli1, "/opt/onos/log/karaf.log",
+ "/tmp/karaf.log", direction="from" )
+ main.ONOSbench.cpLogsToDir( "/tmp/karaf.log", main.logdir,
+ copyFileName="karaf.log." + main.cfgName )
+ for i in range( main.numCtrls ):
+ main.ONOSbench.onosStop( main.ONOSip[ i ] )
+
+ @staticmethod
+ def killOnos( main, nodes, switches, links, expNodes ):
+ """
+ Params: nodes, integer array with position of the ONOS nodes in the CLIs array
+ switches, links, nodes: number of expected switches, links and nodes after KillOnos, ex.: '4', '6'
+ Completely Kill an ONOS instance and verify the ONOS cluster can see the proper change
+ """
+ main.step( "Killing ONOS instance" )
+ for i in nodes:
+ killResult = main.ONOSbench.onosDie( main.CLIs[ i ].ip_address )
+ utilities.assert_equals( expect=main.TRUE, actual=killResult,
+ onpass="ONOS instance Killed",
+ onfail="Error killing ONOS instance" )
+ if i == main.active:
+ main.active = (i + 1) % main.numCtrls
+ time.sleep( 12 )
+ if len( nodes ) < main.numCtrls:
+ topology = utilities.retry( main.CLIs[ main.active ].checkStatus,
+ main.FALSE,
+ kwargs={ 'numoswitch': switches,
+ 'numolink': links,
+ 'numoctrl': expNodes },
+ attempts=10,
+ sleep=12 )
+ utilities.assert_equals( expect=main.TRUE, actual=topology,
+ onpass="ONOS Instance down successful",
+ onfail="Failed to turn off ONOS Instance" )
+ else:
+ main.active = -1
+
+ @staticmethod
+ def recoverOnos( main, nodes, switches, links, expNodes ):
+ """
+ Params: nodes, integer array with position of the ONOS nodes in the CLIs array
+ switches, links, nodes: number of expected switches, links and nodes after recoverOnos, ex.: '4', '6'
+ Recover an ONOS instance and verify the ONOS cluster can see the proper change
+ """
+ main.step( "Recovering ONOS instance" )
+ [ main.ONOSbench.onosStart( main.CLIs[ i ].ip_address ) for i in nodes ]
+ for i in nodes:
+ isUp = main.ONOSbench.isup( main.ONOSip[ i ] )
+ utilities.assert_equals( expect=main.TRUE, actual=isUp,
+ onpass="ONOS service is ready",
+ onfail="ONOS service did not start properly" )
+ for i in nodes:
+ main.step( "Checking if ONOS CLI is ready" )
+ main.CLIs[ i ].startCellCli( )
+ cliResult = main.CLIs[ i ].startOnosCli( main.ONOSip[ i ],
+ commandlineTimeout=60,
+ onosStartTimeout=100 )
+ utilities.assert_equals( expect=main.TRUE,
+ actual=cliResult,
+ onpass="ONOS CLI is ready",
+ onfail="ONOS CLI is not ready" )
+ main.active = i if main.active == -1 else main.active
+
+ topology = utilities.retry( main.CLIs[ main.active ].checkStatus,
+ main.FALSE,
+ kwargs={ 'numoswitch': switches,
+ 'numolink': links,
+ 'numoctrl': expNodes },
+ attempts=10,
+ sleep=12 )
+ utilities.assert_equals( expect=main.TRUE, actual=topology,
+ onpass="ONOS Instance down successful",
+ onfail="Failed to turn off ONOS Instance" )
+
+ for i in range( 10 ):
+ ready = True
+ output = main.CLIs[ main.active ].summary( )
+ if not output:
+ ready = False
+ if ready:
+ break
+ time.sleep( 10 )
+ utilities.assert_equals( expect=True, actual=ready,
+ onpass="ONOS summary command succeded",
+ onfail="ONOS summary command failed" )
+ if not ready:
+ main.log.error( "ONOS startup failed!" )
+ main.cleanup( )
+ main.exit( )
diff --git a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
index a2a8a8e..c890177 100755
--- a/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
+++ b/TestON/tests/USECASE/SegmentRouting/dependencies/cord_fabric.py
@@ -10,84 +10,93 @@
from mininet.log import setLogLevel
from mininet.cli import CLI
-# Parse command line options and dump results
-def parseOptions():
- """Parse command line options"""
- parser = OptionParser()
- parser.add_option('--spine', dest='spine', type='int', default=2,
- help='number of spine switches, default=2')
- parser.add_option('--leaf', dest='leaf', type='int', default=2,
- help='number of leaf switches, default=2')
- parser.add_option('--fanout', dest='fanout', type='int', default=2,
- help='number of hosts per leaf switch, default=2')
- parser.add_option('--onos', dest='onos', type='int', default=0,
- help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on')
- (options, args) = parser.parse_args()
+# Parse command line options and dump results
+def parseOptions( ):
+ """Parse command line options"""
+ parser = OptionParser( )
+ parser.add_option( '--spine', dest='spine', type='int', default=2,
+ help='number of spine switches, default=2' )
+ parser.add_option( '--leaf', dest='leaf', type='int', default=2,
+ help='number of leaf switches, default=2' )
+ parser.add_option( '--fanout', dest='fanout', type='int', default=2,
+ help='number of hosts per leaf switch, default=2' )
+ parser.add_option( '--onos', dest='onos', type='int', default=0,
+ help='number of ONOS Instances, default=0, 0 means localhost, 1 will use OC1 and so on' )
+
+ (options, args) = parser.parse_args( )
return options, args
-opts, args = parseOptions()
-class LeafAndSpine(Topo):
- def __init__(self, spine=2, leaf=2, fanout=2, **opts):
+opts, args = parseOptions( )
+
+
+class LeafAndSpine( Topo ):
+ def __init__( self, spine=2, leaf=2, fanout=2, **opts ):
"Create Leaf and Spine Topo."
- Topo.__init__(self, **opts)
+ Topo.__init__( self, **opts )
# Add spine switches
- spines = {}
- for s in range(spine):
- spines[s] = self.addSwitch('spine10%s' % (s + 1), dpid="00000000010%s" % (s + 1))
+ spines = { }
+ for s in range( spine ):
+ spines[ s ] = self.addSwitch( 'spine10%s' % (s + 1),
+ dpid="00000000010%s" % (s + 1) )
# Set link speeds to 100Mb/s
- linkopts = dict(bw=100)
+ linkopts = dict( bw=100 )
# Add Leaf switches
- for ls in range(leaf):
- leafSwitch = self.addSwitch('leaf%s' % (ls + 1), dpid="00000000000%s" % (1+ls))
+ for ls in range( leaf ):
+ leafSwitch = self.addSwitch( 'leaf%s' % (ls + 1),
+ dpid="00000000000%s" % (1 + ls) )
# Connect leaf to all spines
- for s in range(spine):
- switch = spines[s]
- self.addLink(leafSwitch, switch, **linkopts)
+ for s in range( spine ):
+ switch = spines[ s ]
+ self.addLink( leafSwitch, switch, **linkopts )
# Add hosts under a leaf, fanout hosts per leaf switch
- for f in range(fanout):
- host = self.addHost('h%s' % (ls * fanout + f + 1),
- cls=IpHost,
- ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
- gateway='10.0.%s.254' % (ls + 1))
- self.addLink(host, leafSwitch, **linkopts)
+ for f in range( fanout ):
+ host = self.addHost( 'h%s' % (ls * fanout + f + 1),
+ cls=IpHost,
+ ip='10.0.%s.%s/24' % ((ls + 1), (f + 1)),
+ gateway='10.0.%s.254' % (ls + 1) )
+ self.addLink( host, leafSwitch, **linkopts )
-class IpHost(Host):
- def __init__(self, name, gateway, *args, **kwargs):
- super(IpHost, self).__init__(name, *args, **kwargs)
+
+class IpHost( Host ):
+ def __init__( self, name, gateway, *args, **kwargs ):
+ super( IpHost, self ).__init__( name, *args, **kwargs )
self.gateway = gateway
- def config(self, **kwargs):
- Host.config(self, **kwargs)
- mtu = "ifconfig "+self.name+"-eth0 mtu 1490"
- self.cmd(mtu)
- self.cmd('ip route add default via %s' % self.gateway)
+ def config( self, **kwargs ):
+ Host.config( self, **kwargs )
+ mtu = "ifconfig " + self.name + "-eth0 mtu 1490"
+ self.cmd( mtu )
+ self.cmd( 'ip route add default via %s' % self.gateway )
-def config(opts):
+
+def config( opts ):
spine = opts.spine
leaf = opts.leaf
- fanout = opts.fanout
- controllers= [ os.environ['OC%s' % i] for i in range(1,opts.onos+1) ] if (opts.onos) else ['127.0.0.1']
- topo = LeafAndSpine(spine=spine, leaf=leaf, fanout=fanout)
- net = Mininet(topo=topo, link=TCLink, build=False,
- switch=UserSwitch,
- controller = None,
- autoSetMacs = True)
+ fanout = opts.fanout
+ controllers = [ os.environ[ 'OC%s' % i ] for i in
+ range( 1, opts.onos + 1 ) ] if (opts.onos) else [
+ '127.0.0.1' ]
+ topo = LeafAndSpine( spine=spine, leaf=leaf, fanout=fanout )
+ net = Mininet( topo=topo, link=TCLink, build=False,
+ switch=UserSwitch,
+ controller=None,
+ autoSetMacs=True )
i = 0
for ip in controllers:
- net.addController( "c%s" % (i), controller=RemoteController, ip=ip)
+ net.addController( "c%s" % (i), controller=RemoteController, ip=ip )
i += 1;
- net.build()
- net.start()
- CLI(net)
- net.stop()
+ net.build( )
+ net.start( )
+ CLI( net )
+ net.stop( )
+
if __name__ == '__main__':
- setLogLevel('info')
- config(opts)
- os.system('sudo mn -c')
-
+ setLogLevel( 'info' )
+ config( opts )
+ os.system( 'sudo mn -c' )
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.py b/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.py
index 9ea664b..50501cf 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.py
+++ b/TestON/tests/USECASE/USECASE_SdnipFunction/USECASE_SdnipFunction.py
@@ -113,7 +113,7 @@
branchName = main.ONOSbench.getBranchName()
main.log.report( "ONOS is on branch: " + branchName )
- main.log.step( "Uninstalling ONOS" )
+ main.step( "Uninstalling ONOS" )
uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
utilities.assert_equals( expect=main.TRUE,
actual=uninstallResult,
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.py b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.py
index e1c20f5..bb8acb8 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.py
+++ b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster/USECASE_SdnipFunctionCluster.py
@@ -108,7 +108,7 @@
branchName = main.ONOSbench.getBranchName()
main.log.report( "ONOS is on branch: " + branchName )
- main.log.step( "Uninstalling ONOS" )
+ main.step( "Uninstalling ONOS" )
uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip ) \
and main.ONOSbench.onosUninstall( ONOS2Ip ) \
and main.ONOSbench.onosUninstall( ONOS3Ip )
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster_fsfw/USECASE_SdnipFunctionCluster_fsfw.py b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster_fsfw/USECASE_SdnipFunctionCluster_fsfw.py
index 8ca65a6..0499fde 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunctionCluster_fsfw/USECASE_SdnipFunctionCluster_fsfw.py
+++ b/TestON/tests/USECASE/USECASE_SdnipFunctionCluster_fsfw/USECASE_SdnipFunctionCluster_fsfw.py
@@ -113,7 +113,7 @@
branchName = main.ONOSbench.getBranchName()
main.log.report( "ONOS is on branch: " + branchName )
- main.log.step( "Uninstalling ONOS" )
+ main.step( "Uninstalling ONOS" )
uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip ) \
and main.ONOSbench.onosUninstall( ONOS2Ip ) \
and main.ONOSbench.onosUninstall( ONOS3Ip )
diff --git a/TestON/tests/USECASE/USECASE_SdnipFunction_fsfw/USECASE_SdnipFunction_fsfw.py b/TestON/tests/USECASE/USECASE_SdnipFunction_fsfw/USECASE_SdnipFunction_fsfw.py
index d995156..f2395de 100644
--- a/TestON/tests/USECASE/USECASE_SdnipFunction_fsfw/USECASE_SdnipFunction_fsfw.py
+++ b/TestON/tests/USECASE/USECASE_SdnipFunction_fsfw/USECASE_SdnipFunction_fsfw.py
@@ -122,7 +122,7 @@
branchName = main.ONOSbench.getBranchName()
main.log.report( "ONOS is on branch: " + branchName )
- main.log.step( "Uninstalling ONOS" )
+ main.step( "Uninstalling ONOS" )
uninstallResult = main.ONOSbench.onosUninstall( ONOS1Ip )
utilities.assert_equals( expect=main.TRUE,
actual=uninstallResult,