FUNCflow test suite
Change-Id: I9dd2ce19736a702fd22549dd93933052ca6a6858
diff --git a/TestON/tests/FUNCflow/Dependency/topo-flow.py b/TestON/tests/FUNCflow/Dependency/topo-flow.py
new file mode 100755
index 0000000..2299d9e
--- /dev/null
+++ b/TestON/tests/FUNCflow/Dependency/topo-flow.py
@@ -0,0 +1,50 @@
+#!/usr/bin/python
+
+"""
+Custom topology for Mininet
+"""
+from mininet.topo import Topo
+from mininet.net import Mininet
+from mininet.node import Host, RemoteController
+from mininet.node import Node
+from mininet.node import CPULimitedHost
+from mininet.link import TCLink
+from mininet.cli import CLI
+from mininet.log import setLogLevel
+from mininet.util import dumpNodeConnections
+from mininet.node import ( UserSwitch, OVSSwitch, IVSSwitch )
+
+class MyTopo( Topo ):
+
+ def __init__( self ):
+ # Initialize topology
+ Topo.__init__( self )
+ # Switch S5 Hosts
+ host1=self.addHost( 'h1', ip='10.1.0.1/24' )
+ host2=self.addHost( 'h2', ip='10.1.0.2/24' )
+ #host3=self.addHost( 'h3', ip='10.1.0.3/24', v6Addr='1000::3/64' )
+ #host4=self.addHost( 'h4', ip='10.1.0.4/24', v6Addr='1000::4/64' )
+
+ s1 = self.addSwitch( 's1' )
+ #s2 = self.addSwitch( 's2' )
+
+ self.addLink(s1, host1)
+ self.addLink(s1, host2)
+ #self.addLink(s1, host3)
+ #self.addLink(s1, host4)
+
+
+ topos = { 'mytopo': ( lambda: MyTopo() ) }
+
+def setupNetwork():
+ "Create network"
+ topo = MyTopo()
+ network = Mininet(topo=topo, autoSetMacs=True, controller=None)
+ network.start()
+ CLI( network )
+ network.stop()
+
+if __name__ == '__main__':
+ setLogLevel('info')
+ #setLogLevel('debug')
+ setupNetwork()
diff --git a/TestON/tests/FUNCflow/FUNCflow.params b/TestON/tests/FUNCflow/FUNCflow.params
index 396686e..e0dde55 100755
--- a/TestON/tests/FUNCflow/FUNCflow.params
+++ b/TestON/tests/FUNCflow/FUNCflow.params
@@ -7,38 +7,37 @@
# 9 - Report logs
# 10 - Start mininet and assign switches to controller
# 1000 - Add flows
- # 2000 - Delete flows
- # 3000 - Modify flow rule selectors
- # 4000 - Modify flow rule treatments
- # 5000 - flow rule controller
- # 100 - Compare switch flow table with ONOS
- <testcases>1,2,10,8,1000</testcases>
+ # 2000 - Verify flows are in the ADDED state
+ # 3000 - Delete flows
+ <testcases>1,2,10,11,1000,2000,3000,100</testcases>
<SCALE>
- <max>3</max>
+ <max>1</max>
</SCALE>
<DEPENDENCY>
<path>/tests/FUNCflow/Dependency/</path>
<wrapper1>startUp</wrapper1>
<wrapper2>topo</wrapper2>
- <topology>flow-2sw.py</topology>
+ <topology>topo-flow.py</topology>
</DEPENDENCY>
<TOPO>
<numSwitches>1</numSwitches>
<numHosts>2</numHosts>
- <numLinks>2</numLinks>
+ <numLinks>0</numLinks>
+ </TOPO>
+
+ <MININET>
<deviceId>of:0000000000000001</deviceId>
<hostMac1>00:00:00:00:00:01</hostMac1>
<hostMac2>00:00:00:00:00:02</hostMac2>
- <ethType>IPV4</ethType>
- </TOPO>
+ </MININET>
<ENV>
<cellName>productionCell</cellName>
- <cellApps>drivers,openflow,fwd</cellApps>
+ <cellApps>drivers,openflow</cellApps>
</ENV>
<GIT>
diff --git a/TestON/tests/FUNCflow/FUNCflow.py b/TestON/tests/FUNCflow/FUNCflow.py
index 30608a6..fdd2c1f 100644
--- a/TestON/tests/FUNCflow/FUNCflow.py
+++ b/TestON/tests/FUNCflow/FUNCflow.py
@@ -203,7 +203,42 @@
onpass="Successfully start ONOS cli",
onfail="Failed to start ONOS cli" )
- def CASE8( self, main ):
+ def CASE10( self, main ):
+ '''
+ Start Mininet
+ '''
+ main.case( "Setup mininet and assign switches to controllers" )
+ main.step( "Setup Mininet Topology" )
+ topology = main.Mininet1.home + '/custom/' + main.topology
+ mnCmd = 'mn --custom ' + topology + ' --mac --arp'
+ stepResult1 = main.Mininet1.startNet( mnCmd=mnCmd )
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult1,
+ onpass="Successfully loaded topology",
+ onfail="Failed to load topology" )
+
+ main.step( "Assign switches to controllers" )
+ for i in range( main.numSwitches ):
+ stepResult2 = main.Mininet1.assignSwController(
+ sw="s" + str( i+1 ),
+ ip=main.ONOSip )
+ if not stepResult2:
+ break
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult2,
+ onpass="Controller assignment successfull",
+ onfail="Controller assignment failed" )
+
+ time.sleep(5)
+
+ caseResult = stepResult1 and stepResult2
+ if not caseResult:
+ main.cleanup()
+ main.exit()
+
+ def CASE11( self, main ):
'''
Compare topology
'''
@@ -244,9 +279,9 @@
utilities.assert_equals( expect=main.TRUE,
actual=currentDevicesResult,
onpass="ONOS" + controllerStr +
- " Switches view is correct",
+ " Switches view is correct",
onfail="ONOS" + controllerStr +
- " Switches view is incorrect" )
+ " Switches view is incorrect" )
if links[ controller ] and "Error" not in links[ controller ]:
currentLinksResult = main.Mininet1.compareLinks(
mnSwitches, mnLinks,
@@ -256,9 +291,9 @@
utilities.assert_equals( expect=main.TRUE,
actual=currentLinksResult,
onpass="ONOS" + controllerStr +
- " links view is correct",
+ " links view is correct",
onfail="ONOS" + controllerStr +
- " links view is incorrect" )
+ " links view is incorrect" )
if hosts[ controller ] or "Error" not in hosts[ controller ]:
currentHostsResult = main.Mininet1.compareHosts(
@@ -269,21 +304,85 @@
utilities.assert_equals( expect=main.TRUE,
actual=currentHostsResult,
onpass="ONOS" + controllerStr +
- " hosts exist in Mininet",
+ " hosts exist in Mininet",
onfail="ONOS" + controllerStr +
- " hosts don't match Mininet")
+ " hosts don't match Mininet")
- main.step( "Deactiviate reactive fwd" )
- stepResult = main.CLIs[0].deactivateApp( 'org.onosproject.fwd' )
+
+
+ def CASE1000( self, main ):
+ '''
+ Add flows
+ '''
+
+ main.step("Add flows through rest")
+
+ deviceId = main.params['MININET']['deviceId']
+ host1_mac = main.params['MININET']['hostMac1']
+ host2_mac = main.params['MININET']['hostMac2']
+
+ # Add flows that connects host1 to host 2
+ stepResult = main.ONOSrest.addFlow( deviceId=deviceId,
+ egressPort=2,
+ ingressPort=1,
+ ethSrc=host1_mac,
+ ethDst=host2_mac)
+
+ stepResult = stepResult and main.ONOSrest.addFlow( deviceId=deviceId,
+ egressPort=1,
+ ingressPort=2,
+ ethSrc=host2_mac,
+ ethDst=host1_mac)
+
utilities.assert_equals( expect=main.TRUE,
actual=stepResult,
- onpass="Successfully deactived fwd app",
- onfail="Failed to deactivate fwd app" )
+ onpass="Successfully added flows",
+ onfail="Failed add flows" )
- main.log.info("Wait for the flows to dissappear")
- time.sleep(5)
+ def CASE2000( self, main ):
+ '''
+ Check flows are ADDED
+ '''
+ import json
+ main.step("Check flows are in the ADDED state")
+ main.log.info("Check only the flows added through REST")
- def CASE9( self, main ):
+ flows = json.loads( main.ONOSrest.flows() )
+
+ stepResult = main.TRUE
+ for f in flows:
+ if "rest" in f.get("appId"):
+ if "ADDED" in f.get("state"):
+ stepResult = stepResult and main.ONOSrest.removeFlow( deviceId, flowId )
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult,
+ onpass="All flows are in the ADDED state",
+ onfail="All flows are in the ADDED state" )
+
+ def CASE3000( self, main ):
+ '''
+ Delete flows that were added through REST
+ '''
+ import json
+ main.step("Remove flows")
+ main.log.info("Remove the flows that were added through rest")
+
+ flows = json.loads( main.ONOSrest.flows() )
+
+ stepResult = main.TRUE
+ for f in flows:
+ if "rest" in f.get("appId"):
+ flowId = f.get("id")
+ deviceId = f.get("deviceId")
+ stepResult = stepResult and main.ONOSrest.removeFlow( deviceId, flowId )
+
+ utilities.assert_equals( expect=main.TRUE,
+ actual=stepResult,
+ onpass="Successfully removed all rest flows",
+ onfail="Failed to remove rest flows" )
+
+ def CASE100( self, main ):
'''
Report errors/warnings/exceptions
'''
@@ -295,123 +394,5 @@
"flow",
"ERROR",
"Except" ],
- "s" )
+ "s" )
- def CASE10( self, main ):
- '''
- Start Mininet
- '''
- main.case( "Setup mininet and assign switches to controllers" )
- main.step( "Setup Mininet Topology" )
- topology = main.Mininet1.home + '/custom/' + main.topology
- stepResult1 = main.Mininet1.startNet( topoFile=topology )
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult1,
- onpass="Successfully loaded topology",
- onfail="Failed to load topology" )
-
- main.step( "Assign switches to controllers" )
- for i in range( main.numSwitches ):
- stepResult2 = main.Mininet1.assignSwController(
- sw="s" + str( i+1 ),
- ip=main.ONOSip )
- if not stepResult2:
- break
-
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult2,
- onpass="Controller assignment successfull",
- onfail="Controller assignment failed" )
-
- time.sleep(5)
-
- main.step( "Pingall hosts for discovery" )
- stepResult3 = main.Mininet1.pingall()
- if not stepResult3:
- stepResult3 = main.Mininet1.pingall()
- utilities.assert_equals( expect=main.TRUE,
- actual=stepResult3,
- onpass="Pingall successfull",
- onfail="Pingall unsuccessfull" )
-
- caseResult = stepResult1 and stepResult2 and stepResult3
- if not caseResult:
- main.cleanup()
- main.exit()
-
- def CASE1000( self, main ):
- '''
- Add flows
- '''
-
- main.step("Add some flows")
-
- deviceId = main.params['TOPO']['deviceId']
- host1_mac = main.params['TOPO']['hostMac1']
- host2_mac = main.params['TOPO']['hostMac2']
-
-
- flowResult1 = main.ONOSrest.addFlow( deviceId=deviceId,
- egressPort=-3,
- ethType="IPV4" )
-
- flowResult2 = main.ONOSrest.addFlow( deviceId=deviceId,
- egressPort=2,
- ingressPort=1,
- ethSrc=host1_mac,
- ethDst=host2_mac)
-
- flowResult3 = main.ONOSrest.addFlow( deviceId=deviceId,
- egressPort=1,
- ingressPort=2,
- ethSrc=host2_mac,
- ethDst=host1_mac)
-
- flowResult = flowResult1 and flowResult2 and flowResult3
-
- utilities.assert_equals( expect=main.TRUE,
- actual=flowResult,
- onpass="Successfully added flows",
- onfail="Failed add flows" )
-
- main.step("Verify flows with pingall")
- main.log.info("wait for flows to install")
- time.sleep(5)
-
- pingResult = main.Mininet1.pingall()
- if not pingResult:
- main.log.warn("First pingall failed. Retrying")
- pingResult = main.Mininet1.pingall()
-
- utilities.assert_equals( expect=main.TRUE,
- actual=pingResult,
- onpass="Pingall successfull",
- onfail="Pingall failed" )
-
- time.sleep(100)
-
- def CASE2000( self, main ):
- '''
- Delete flows
- '''
-
- def CASE3000( self, main ):
- '''
- Modify flow rule selectors
- '''
-
- def CASE4000( self, main ):
- '''
- Modify flow rule treatment
- '''
-
- def CASE5000( self, main ):
- '''
- Modify flow rule controller
- '''
-
- def CASE100( self, main ):
- '''
- Compare switch flow table with ONOS
- '''
diff --git a/TestON/tests/FUNCflow/FUNCflow.topo b/TestON/tests/FUNCflow/FUNCflow.topo
index 7c17bcb..9ea3d19 100755
--- a/TestON/tests/FUNCflow/FUNCflow.topo
+++ b/TestON/tests/FUNCflow/FUNCflow.topo
@@ -21,26 +21,6 @@
</COMPONENTS>
</ONOScli1>
- <ONOScli2>
- <host>localhost</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>3</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </ONOScli2>
-
- <ONOScli3>
- <host>localhost</host>
- <user>admin</user>
- <password>onos_test</password>
- <type>OnosCliDriver</type>
- <connect_order>4</connect_order>
- <COMPONENTS>
- </COMPONENTS>
- </ONOScli3>
-
<Mininet1>
<host>localhost</host>
<user>admin</user>