Merge pull request #22 from OPENNETWORKINGLAB/driver_change
Changes to add-point-intent to accomodate additional arguments
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index ad07d95..5f7d8a3 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -573,14 +573,20 @@
result = re.match(pattern, line)
if result:
version = result.group(0)
- return version
+ return version
- def get_sw_controller_sanity(self, sw):
+ def get_sw_controller(self, sw):
+ '''
+ Parameters:
+ sw: The name of an OVS switch. Example "s1"
+ Return:
+ The output of the command from the mininet cli or main.FALSE on timeout
+ '''
command = "sh ovs-vsctl get-controller "+str(sw)
try:
- response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+ response = self.execute(cmd=command, prompt="mininet>", timeout=10)
if response:
- return main.TRUE
+ return response
else:
return main.FALSE
except pexpect.EOF:
@@ -588,26 +594,6 @@
main.log.error(self.name + ": " + self.handle.before)
main.cleanup()
main.exit()
- else:
- main.log.info(response)
-
- def get_sw_controller(self,sw):
- command = "sh ovs-vsctl get-controller "+str(sw)
- try:
- response = self.execute(cmd=command,prompt="mininet>",timeout=10)
- print(response)
- if response:
- print("**********************")
- return response
- else:
- return main.FALSE
- except pexpect.EOF:
- main.log.error(self.name + ": EOF exception found")
- main.log.error(self.name + ": " + self.handle.before)
- main.cleanup()
- main.exit()
- else:
- main.log.info(response)
def assign_sw_controller(self,**kwargs):
'''
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 009b785..2efd3d6 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -388,11 +388,15 @@
except pexpect.EOF:
main.log.error(self.name + ": EOF exception found")
main.log.error(self.name + ": " + self.handle.before)
+ main.log.report("Failed to install feature")
+ main.log.report("Exiting test")
main.cleanup()
main.exit()
except:
main.log.info(self.name+" ::::::")
main.log.error( traceback.print_exc())
+ main.log.report("Failed to install feature")
+ main.log.report("Exiting test")
main.log.info(self.name+" ::::::")
main.cleanup()
main.exit()
@@ -518,14 +522,10 @@
if not grep_str:
self.handle.sendline("links")
self.handle.expect("onos>")
- self.handle.sendline("")
- self.handle.expect("onos>")
else:
self.handle.sendline("links | grep '"+
str(grep_str)+"'")
self.handle.expect("onos>")
- self.handle.sendline("")
- self.handle.expect("onos>")
handle = self.handle.before
#print "handle =",handle
return handle
diff --git a/TestON/drivers/common/cli/onosdriver.py b/TestON/drivers/common/cli/onosdriver.py
index 575de1c..1fb180a 100644
--- a/TestON/drivers/common/cli/onosdriver.py
+++ b/TestON/drivers/common/cli/onosdriver.py
@@ -1053,7 +1053,7 @@
self.handle.sendline("cd ~/ONOS/tools/test/bin")
self.handle.expect("/bin$")
self.handle.sendline("./onos-topo-cfg")
- self.handle.expect("{}admin@onosTestBench")
+ self.handle.expect("{}")
self.handle.sendline("cd ~")
self.handle.expect("\$")
diff --git a/TestON/tests/MultiProd/MultiProd.params b/TestON/tests/MultiProd/MultiProd.params
new file mode 100755
index 0000000..2f99555
--- /dev/null
+++ b/TestON/tests/MultiProd/MultiProd.params
@@ -0,0 +1,47 @@
+<PARAMS>
+
+ <testcases>1,4,5,6,7,8,9</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>multi_test</cellName>
+ </ENV>
+
+ <CTRL>
+ <ip1>10.128.20.11</ip1>
+ <ip2>10.128.20.12</ip2>
+ <ip3>10.128.20.13</ip3>
+ <port1>6633</port1>
+ <port2>6633</port2>
+ <port3>6633</port3>
+ </CTRL>
+
+ <PING>
+ <source1>h8</source1>
+ <source2>h9</source2>
+ <source3>h10</source3>
+ <source4>h11</source4>
+ <source5>h12</source5>
+ <source6>h13</source6>
+ <source7>h14</source7>
+ <source8>h15</source8>
+ <source9>h16</source9>
+ <source10>h17</source10>
+ <target1>10.0.0.18</target1>
+ <target2>10.0.0.19</target2>
+ <target3>10.0.0.20</target3>
+ <target4>10.0.0.21</target4>
+ <target5>10.0.0.22</target5>
+ <target6>10.0.0.23</target6>
+ <target7>10.0.0.24</target7>
+ <target8>10.0.0.25</target8>
+ <target9>10.0.0.26</target9>
+ <target10>10.0.0.27</target10>
+ </PING>
+
+ <timers>
+ <LinkDiscovery>5</LinkDiscovery>
+ <SwitchDiscovery>31</SwitchDiscovery>
+ </timers>
+
+</PARAMS>
diff --git a/TestON/tests/MultiProd/MultiProd.py b/TestON/tests/MultiProd/MultiProd.py
new file mode 100755
index 0000000..33d86b4
--- /dev/null
+++ b/TestON/tests/MultiProd/MultiProd.py
@@ -0,0 +1,869 @@
+
+#Testing the basic functionality of ONOS Next
+#For sanity and driver functionality excercises only.
+
+import time
+import sys
+import os
+import re
+import time
+import json
+
+time.sleep(1)
+class MultiProd:
+ def __init__(self):
+ self.default = ''
+
+ def CASE1(self, main):
+ '''
+ Startup sequence:
+ git pull
+ mvn clean install
+ onos-package
+ cell <name>
+ onos-verify-cell
+ onos-install -f
+ onos-wait-for-start
+ '''
+
+ cell_name = main.params['ENV']['cellName']
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+ ONOS1_port = main.params['CTRL']['port1']
+ ONOS2_port = main.params['CTRL']['port2']
+ ONOS3_port = main.params['CTRL']['port3']
+
+ main.case("Setting up test environment")
+ main.log.report("This testcase is testing setting up test environment")
+ main.log.report("__________________________________")
+ main.step("Git checkout and pull master and get version")
+ main.ONOSbench.git_checkout("master")
+ git_pull_result = main.ONOSbench.git_pull()
+ print "git_pull_result = ", git_pull_result
+ version_result = main.ONOSbench.get_version(report=True)
+
+ if git_pull_result == 1:
+ main.step("Using mvn clean & install")
+ clean_install_result = main.ONOSbench.clean_install()
+ #clean_install_result = main.TRUE
+
+ main.step("Applying cell variable to environment")
+ cell_result1 = main.ONOSbench.set_cell(cell_name)
+ #cell_result2 = main.ONOScli1.set_cell(cell_name)
+ #cell_result3 = main.ONOScli2.set_cell(cell_name)
+ #cell_result4 = main.ONOScli3.set_cell(cell_name)
+ verify_result = main.ONOSbench.verify_cell()
+ cell_result = cell_result1
+
+ main.step("Creating ONOS package")
+ package_result = main.ONOSbench.onos_package()
+
+ #main.step("Creating a cell")
+ #cell_create_result = main.ONOSbench.create_cell_file(**************)
+
+ main.step("Installing ONOS package")
+ onos1_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS1_ip)
+ onos2_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS2_ip)
+ onos3_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS3_ip)
+ onos_install_result = onos1_install_result and onos2_install_result and onos3_install_result
+ if onos_install_result == main.TRUE:
+ main.log.report("Installing ONOS package successful")
+ else:
+ main.log.report("Installing ONOS package failed")
+
+ onos1_isup = main.ONOSbench.isup(ONOS1_ip)
+ onos2_isup = main.ONOSbench.isup(ONOS2_ip)
+ onos3_isup = main.ONOSbench.isup(ONOS3_ip)
+ onos_isup = onos1_isup and onos2_isup and onos3_isup
+ if onos_isup == main.TRUE:
+ main.log.report("ONOS instances are up and ready")
+ else:
+ main.log.report("ONOS instances may not be up")
+
+ main.step("Starting ONOS service")
+ start_result = main.TRUE
+ #start_result = main.ONOSbench.onos_start(ONOS1_ip)
+ startcli1 = main.ONOScli1.start_onos_cli(ONOS_ip = ONOS1_ip)
+ startcli2 = main.ONOScli2.start_onos_cli(ONOS_ip = ONOS2_ip)
+ startcli3 = main.ONOScli3.start_onos_cli(ONOS_ip = ONOS3_ip)
+ print startcli1
+ print startcli2
+ print startcli3
+
+ case1_result = (package_result and\
+ cell_result and verify_result and onos_install_result and\
+ onos_isup and start_result )
+ utilities.assert_equals(expect=main.TRUE, actual=case1_result,
+ onpass="Test startup successful",
+ onfail="Test startup NOT successful")
+
+ def CASE11(self, main):
+ '''
+ Cleanup sequence:
+ onos-service <node_ip> stop
+ onos-uninstall
+
+ TODO: Define rest of cleanup
+
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.case("Cleaning up test environment")
+
+ main.step("Testing ONOS kill function")
+ kill_result1 = main.ONOSbench.onos_kill(ONOS1_ip)
+ kill_result2 = main.ONOSbench.onos_kill(ONOS2_ip)
+ kill_result3 = main.ONOSbench.onos_kill(ONOS3_ip)
+
+ main.step("Stopping ONOS service")
+ stop_result1 = main.ONOSbench.onos_stop(ONOS1_ip)
+ stop_result2 = main.ONOSbench.onos_stop(ONOS2_ip)
+ stop_result3 = main.ONOSbench.onos_stop(ONOS3_ip)
+
+ main.step("Uninstalling ONOS service")
+ uninstall_result = main.ONOSbench.onos_uninstall()
+
+ def CASE3(self, main):
+ '''
+ Test 'onos' command and its functionality in driver
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.case("Testing 'onos' command")
+
+ main.step("Sending command 'onos -w <onos-ip> system:name'")
+ cmdstr1 = "system:name"
+ cmd_result1 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result1)
+ cmd_result2 = main.ONOSbench.onos_cli(ONOS2_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result2)
+ cmd_result3 = main.ONOSbench.onos_cli(ONOS3_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result3)
+
+ main.step("Sending command 'onos -w <onos-ip> onos:topology'")
+ cmdstr2 = "onos:topology"
+ cmd_result4 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result4)
+ cmd_result5 = main.ONOSbench.onos_cli(ONOS2_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result5)
+ cmd_result6 = main.ONOSbench.onos_cli(ONOS6_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result6)
+
+
+ def CASE4(self, main):
+ import re
+ import time
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+ ONOS1_port = main.params['CTRL']['port1']
+ ONOS2_port = main.params['CTRL']['port2']
+ ONOS3_port = main.params['CTRL']['port3']
+
+ main.log.report("This testcase is testing the assignment of all the switches to all controllers and discovering the hosts in reactive mode")
+ main.log.report("__________________________________")
+ main.case("Pingall Test(No intents are added)")
+ main.step("Assigning switches to controllers")
+ for i in range(1,29): #1 to (num of switches +1)
+ main.Mininet1.assign_sw_controller(sw=str(i),count=3,
+ ip1=ONOS1_ip, port1=ONOS1_port,
+ ip2=ONOS2_ip, port2=ONOS2_port,
+ ip3=ONOS3_ip, port3=ONOS3_port)
+
+ switch_mastership = main.TRUE
+ for i in range (1,29):
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ switch_mastership = switch_mastership and main.TRUE
+ else:
+ switch_mastership = main.FALSE
+
+ if switch_mastership == main.TRUE:
+ main.log.report("Controller assignment successfull")
+ else:
+ main.log.report("Controller assignment failed")
+ #REACTIVE FWD test
+ main.step("Pingall")
+ ping_result = main.FALSE
+ time1 = time.time()
+ ping_result = main.Mininet1.pingall()
+ time2 = time.time()
+ print "Time for pingall: %2f seconds" % (time2 - time1)
+
+ case4_result = switch_mastership and ping_result
+ if ping_result == main.TRUE:
+ main.log.report("Pingall Test in reactive mode to discover the hosts successful")
+ else:
+ main.log.report("Pingall Test in reactive mode to discover the hosts failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,onpass="Controller assignment and Pingall Test successful",onfail="Controller assignment and Pingall Test NOT successful")
+
+
+
+ def CASE5(self,main) :
+ import json
+ from subprocess import Popen, PIPE
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.log.report("This testcase is testing if all ONOS nodes are in topology sync with mininet and its peer ONOS nodes")
+ main.log.report("__________________________________")
+ main.case ("Testing Mininet topology with the topology of multi instances ONOS")
+ main.step("Collecting topology information from ONOS")
+ devices1 = main.ONOScli1.devices()
+ devices2 = main.ONOScli2.devices()
+ devices3 = main.ONOScli3.devices()
+ print "devices1 = ", devices1
+ print "devices2 = ", devices2
+ print "devices3 = ", devices3
+ hosts1 = main.ONOScli1.hosts()
+ hosts2 = main.ONOScli2.hosts()
+ hosts3 = main.ONOScli3.hosts()
+ #print "hosts1 = ", hosts1
+ #print "hosts2 = ", hosts2
+ #print "hosts3 = ", hosts3
+ ports1 = main.ONOScli1.ports()
+ ports2 = main.ONOScli2.ports()
+ ports3 = main.ONOScli3.ports()
+ #print "ports1 = ", ports1
+ #print "ports2 = ", ports2
+ #print "ports3 = ", ports3
+ links1 = main.ONOScli1.links()
+ links2 = main.ONOScli2.links()
+ links3 = main.ONOScli3.links()
+ #print "links1 = ", links1
+ #print "links2 = ", links2
+ #print "links3 = ", links3
+
+ print "**************"
+
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+
+ switches_results1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices1))
+ print "switches_Result1 = ", switches_results1
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results1,
+ onpass="ONOS1 Switches view is correct",
+ onfail="ONOS1 Switches view is incorrect")
+
+ switches_results2 = main.Mininet1.compare_switches(MNTopo, json.loads(devices2))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results2,
+ onpass="ONOS2 Switches view is correct",
+ onfail="ONOS2 Switches view is incorrect")
+
+ switches_results3 = main.Mininet1.compare_switches(MNTopo, json.loads(devices3))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results3,
+ onpass="ONOS3 Switches view is correct",
+ onfail="ONOS3 Switches view is incorrect")
+
+ '''
+ ports_results1 = main.Mininet1.compare_ports(MNTopo, json.loads(ports1))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results1,
+ onpass="ONOS1 Ports view is correct",
+ onfail="ONOS1 Ports view is incorrect")
+
+ ports_results2 = main.Mininet1.compare_ports(MNTopo, json.loads(ports2))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results2,
+ onpass="ONOS2 Ports view is correct",
+ onfail="ONOS2 Ports view is incorrect")
+
+ ports_results3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports3))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results3,
+ onpass="ONOS3 Ports view is correct",
+ onfail="ONOS3 Ports view is incorrect")
+ '''
+
+ links_results1 = main.Mininet1.compare_links(MNTopo, json.loads(links1))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results1,
+ onpass="ONOS1 Links view is correct",
+ onfail="ONOS1 Links view is incorrect")
+
+ links_results2 = main.Mininet1.compare_links(MNTopo, json.loads(links2))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results2,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ links_results3 = main.Mininet1.compare_links(MNTopo, json.loads(links3))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results3,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ #topo_result = switches_results1 and switches_results2 and switches_results3\
+ #and ports_results1 and ports_results2 and ports_results3\
+ #and links_results1 and links_results2 and links_results3
+
+ topo_result = switches_results1 and switches_results2 and switches_results3\
+ and links_results1 and links_results2 and links_results3
+
+ if topo_result == main.TRUE:
+ main.log.report("Topology Check Test with mininet and ONOS instances successful")
+ else:
+ main.log.report("Topology Check Test with mininet and ONOS instances failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=topo_result,
+ onpass="Topology Check Test successful",
+ onfail="Topology Check Test NOT successful")
+
+ def CASE6(self):
+ main.log.report("This testcase is testing the addition of host intents and then doing pingall")
+ main.log.report("__________________________________")
+ main.case("Uninstalling reactive forwarding app and addhost intents")
+ main.step("Get hosts")
+ main.ONOScli1.handle.sendline("hosts")
+ main.ONOScli1.handle.expect("onos>")
+ hosts = main.ONOScli1.handle.before
+ main.log.info(hosts)
+
+ main.step("Get all devices id")
+ devices_id_list = main.ONOScli1.get_all_devices_id()
+ main.log.info(devices_id_list)
+
+ #ONOS displays the hosts in hex format unlike mininet which does in decimal format
+ #So take care while adding intents
+
+ main.step("Add host intents for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1")
+
+
+ #Unistall onos-app-fwd app to disable reactive forwarding
+ main.step("Unistall onos-app-fwd app to disable reactive forwarding")
+ appUninstall_result = main.ONOScli1.feature_uninstall("onos-app-fwd")
+ main.log.info("onos-app-fwd uninstalled")
+
+ #After reactive forwarding is disabled, the reactive flows on switches timeout in 10-15s
+ #So sleep for 15s
+ time.sleep(15)
+
+ flowHandle = main.ONOScli1.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows:" +flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Host intents have not ben installed correctly. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Host intents have been installed correctly")
+
+ case6_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case6_result,
+ onpass="Host intent addition and Pingall Test successful",
+ onfail="Host intent addition and Pingall Test NOT successful")
+
+
+ def CASE7 (self,main):
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ link_sleep = int(main.params['timers']['LinkDiscovery'])
+
+ main.log.report("This testscase is killing a link to ensure that link discovery is consistent")
+ main.log.report("__________________________________")
+ main.case("Killing a link to Ensure that Link Discovery is Working Properly")
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+
+ main.step("Determine the current number of switches and links")
+ topology_output = main.ONOScli1.topology()
+ topology_result = main.ONOSbench.get_topology(topology_output)
+ activeSwitches = topology_result['devices']
+ links = topology_result['links']
+ print "activeSwitches = ", type(activeSwitches)
+ print "links = ", type(links)
+ main.log.info("Currently there are %s switches and %s links" %(str(activeSwitches), str(links)))
+
+ main.step("Kill Link between s3 and s28")
+ main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
+ time.sleep(link_sleep)
+ topology_output = main.ONOScli2.topology()
+ Link_Down = main.ONOSbench.check_status(topology_output,activeSwitches,str(int(links)-2))
+ if Link_Down == main.TRUE:
+ main.log.report("Link Down discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Down,
+ onpass="Link Down discovered properly",
+ onfail="Link down was not discovered in "+ str(link_sleep) + " seconds")
+
+ main.step("Bring link between s3 and s28 back up")
+ Link_Up = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
+ time.sleep(link_sleep)
+ topology_output = main.ONOScli2.topology()
+ Link_Up = main.ONOSbench.check_status(topology_output,activeSwitches,str(links))
+ if Link_Up == main.TRUE:
+ main.log.report("Link up discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Up,
+ onpass="Link up discovered properly",
+ onfail="Link up was not discovered in "+ str(link_sleep) + " seconds")
+
+ main.step("Compare ONOS Topology to MN Topology")
+ main.case ("Testing Mininet topology with the topology of multi instances ONOS")
+ main.step("Collecting topology information from ONOS")
+ devices1 = main.ONOScli1.devices()
+ devices2 = main.ONOScli2.devices()
+ devices3 = main.ONOScli3.devices()
+ print "devices1 = ", devices1
+ print "devices2 = ", devices2
+ print "devices3 = ", devices3
+ hosts1 = main.ONOScli1.hosts()
+ hosts2 = main.ONOScli2.hosts()
+ hosts3 = main.ONOScli3.hosts()
+ #print "hosts1 = ", hosts1
+ #print "hosts2 = ", hosts2
+ #print "hosts3 = ", hosts3
+ ports1 = main.ONOScli1.ports()
+ ports2 = main.ONOScli2.ports()
+ ports3 = main.ONOScli3.ports()
+ #print "ports1 = ", ports1
+ #print "ports2 = ", ports2
+ #print "ports3 = ", ports3
+ links1 = main.ONOScli1.links()
+ links2 = main.ONOScli2.links()
+ links3 = main.ONOScli3.links()
+ #print "links1 = ", links1
+ #print "links2 = ", links2
+ #print "links3 = ", links3
+
+ print "**************"
+
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+
+ switches_results1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices1))
+ print "switches_Result1 = ", switches_results1
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results1,
+ onpass="ONOS1 Switches view is correct",
+ onfail="ONOS1 Switches view is incorrect")
+
+ switches_results2 = main.Mininet1.compare_switches(MNTopo, json.loads(devices2))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results2,
+ onpass="ONOS2 Switches view is correct",
+ onfail="ONOS2 Switches view is incorrect")
+
+ switches_results3 = main.Mininet1.compare_switches(MNTopo, json.loads(devices3))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results3,
+ onpass="ONOS3 Switches view is correct",
+ onfail="ONOS3 Switches view is incorrect")
+
+ '''
+ ports_results1 = main.Mininet1.compare_ports(MNTopo, json.loads(ports1))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results1,
+ onpass="ONOS1 Ports view is correct",
+ onfail="ONOS1 Ports view is incorrect")
+
+ ports_results2 = main.Mininet1.compare_ports(MNTopo, json.loads(ports2))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results2,
+ onpass="ONOS2 Ports view is correct",
+ onfail="ONOS2 Ports view is incorrect")
+
+ ports_results3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports3))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results3,
+ onpass="ONOS3 Ports view is correct",
+ onfail="ONOS3 Ports view is incorrect")
+ '''
+
+ links_results1 = main.Mininet1.compare_links(MNTopo, json.loads(links1))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results1,
+ onpass="ONOS1 Links view is correct",
+ onfail="ONOS1 Links view is incorrect")
+
+ links_results2 = main.Mininet1.compare_links(MNTopo, json.loads(links2))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results2,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ links_results3 = main.Mininet1.compare_links(MNTopo, json.loads(links3))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results3,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ #topo_result = switches_results1 and switches_results2 and switches_results3\
+ #and ports_results1 and ports_results2 and ports_results3\
+ #and links_results1 and links_results2 and links_results3
+
+ topo_result = switches_results1 and switches_results2 and switches_results3\
+ and links_results1 and links_results2 and links_results3
+
+ utilities.assert_equals(expect=main.TRUE, actual=topo_result and Link_Up and Link_Down,
+ onpass="Topology Check Test successful",
+ onfail="Topology Check Test NOT successful")
+
+
+ def CASE8(self):
+ '''
+ Host intents removal
+ '''
+ main.log.report("This testcase removes host intents before adding the point intents")
+ main.log.report("__________________________________")
+ main.log.info("Host intents removal")
+ main.case("Removing host intents")
+ main.step("Obtain the intent id's")
+ intent_result = main.ONOScli1.intents()
+ #print "intent_result = ",intent_result
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+ #for line in intent_linewise:
+ #print "line = ", line
+ intentids = []
+ for line in intent_linewise:
+ intentids.append(line.split(",")[0].split("=")[1])
+ for id in intentids:
+ print "id = ", id
+
+ main.step("Iterate through the intentids list and remove each intent")
+ for id in intentids:
+ main.ONOScli1.remove_intent(intent_id = id)
+
+ intent_result = main.ONOScli1.intents()
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+
+ intentState = {}
+ for id, line in zip(intentids, intent_linewise):
+ #print "line after removing intent = ", line
+ x = line.split(",")
+ state = x[1].split("=")[1]
+ intentState[id] = state
+
+ case8_result = main.TRUE
+ for key,value in intentState.iteritems():
+ print "key,value = ", key, value
+ if value == "WITHDRAWN":
+ case8_result = case8_result and main.TRUE
+ else:
+ case8_result = case8_result and main.FALSE
+
+ if case8_result == main.TRUE:
+ main.log.report("Intent removal successful")
+ else:
+ main.log.report("Intent removal failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Intent removal test successful",
+ onfail="Intent removal test failed")
+
+
+ def CASE9(self):
+ '''
+ This test case adds point intents. Make sure you run test case 8 which is host intent removal before executing this test case.
+ Else the host intent's flows will persist on switches and the pings would work even if there is some issue with the point intent's flows
+ '''
+ main.log.report("This testcase adds point intents and then does pingall")
+ main.log.report("__________________________________")
+ main.log.info("Adding point intents")
+ main.case("Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ main.step("Add point-to-point intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003008", 1, "of:0000000000006018", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006018", 1, "of:0000000000003008", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h9 and h19 or ONOS hosts h9 and h13")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003009", 1, "of:0000000000006019", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006019", 1, "of:0000000000003009", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h10 and h20 or ONOS hosts hA and h14")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003010", 1, "of:0000000000006020", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006020", 1, "of:0000000000003010", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h11 and h21 or ONOS hosts hB and h15")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003011", 1, "of:0000000000006021", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006021", 1, "of:0000000000003011", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h12 and h22 or ONOS hosts hC and h16")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003012", 1, "of:0000000000006022", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006022", 1, "of:0000000000003012", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h13 and h23 or ONOS hosts hD and h17")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003013", 1, "of:0000000000006023", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006023", 1, "of:0000000000003013", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h14 and h24 or ONOS hosts hE and h18")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003014", 1, "of:0000000000006024", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006024", 1, "of:0000000000003014", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h15 and h25 or ONOS hosts hF and h19")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003015", 1, "of:0000000000006025", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006025", 1, "of:0000000000003015", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h16 and h26 or ONOS hosts h10 and h1A")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003016", 1, "of:0000000000006026", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006026", 1, "of:0000000000003016", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+
+ main.step("Add point-to-point intents for mininet hosts h17 and h27 or ONOS hosts h11 and h1B")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003017", 1, "of:0000000000006027", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006027", 1, "of:0000000000003017", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ print("_______________________________________________________________________________________")
+
+ flowHandle = main.ONOScli1.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows :" + flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Ping all test after Point intents addition failed. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Ping all test after Point intents addition successful")
+
+ case8_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Ping all test after Point intents addition successful",
+ onfail="Ping all test after Point intents addition failed")
+
diff --git a/TestON/tests/MultiProd/MultiProd.topo b/TestON/tests/MultiProd/MultiProd.topo
new file mode 100755
index 0000000..28dfa92
--- /dev/null
+++ b/TestON/tests/MultiProd/MultiProd.topo
@@ -0,0 +1,98 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli1>
+
+ <ONOScli2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli2>
+
+ <ONOScli3>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli3>
+
+ <ONOS1>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+
+ <Mininet1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ <Mininet2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>RemoteMininetDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet2>
+ </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/MultiProd13/MultiProd13.params b/TestON/tests/MultiProd13/MultiProd13.params
new file mode 100755
index 0000000..2f99555
--- /dev/null
+++ b/TestON/tests/MultiProd13/MultiProd13.params
@@ -0,0 +1,47 @@
+<PARAMS>
+
+ <testcases>1,4,5,6,7,8,9</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>multi_test</cellName>
+ </ENV>
+
+ <CTRL>
+ <ip1>10.128.20.11</ip1>
+ <ip2>10.128.20.12</ip2>
+ <ip3>10.128.20.13</ip3>
+ <port1>6633</port1>
+ <port2>6633</port2>
+ <port3>6633</port3>
+ </CTRL>
+
+ <PING>
+ <source1>h8</source1>
+ <source2>h9</source2>
+ <source3>h10</source3>
+ <source4>h11</source4>
+ <source5>h12</source5>
+ <source6>h13</source6>
+ <source7>h14</source7>
+ <source8>h15</source8>
+ <source9>h16</source9>
+ <source10>h17</source10>
+ <target1>10.0.0.18</target1>
+ <target2>10.0.0.19</target2>
+ <target3>10.0.0.20</target3>
+ <target4>10.0.0.21</target4>
+ <target5>10.0.0.22</target5>
+ <target6>10.0.0.23</target6>
+ <target7>10.0.0.24</target7>
+ <target8>10.0.0.25</target8>
+ <target9>10.0.0.26</target9>
+ <target10>10.0.0.27</target10>
+ </PING>
+
+ <timers>
+ <LinkDiscovery>5</LinkDiscovery>
+ <SwitchDiscovery>31</SwitchDiscovery>
+ </timers>
+
+</PARAMS>
diff --git a/TestON/tests/MultiProd13/MultiProd13.py b/TestON/tests/MultiProd13/MultiProd13.py
new file mode 100755
index 0000000..1c989c0
--- /dev/null
+++ b/TestON/tests/MultiProd13/MultiProd13.py
@@ -0,0 +1,869 @@
+
+#Testing the basic functionality of ONOS Next
+#For sanity and driver functionality excercises only.
+
+import time
+import sys
+import os
+import re
+import time
+import json
+
+time.sleep(1)
+class MultiProd13:
+ def __init__(self):
+ self.default = ''
+
+ def CASE1(self, main):
+ '''
+ Startup sequence:
+ git pull
+ mvn clean install
+ onos-package
+ cell <name>
+ onos-verify-cell
+ onos-install -f
+ onos-wait-for-start
+ '''
+
+ cell_name = main.params['ENV']['cellName']
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+ ONOS1_port = main.params['CTRL']['port1']
+ ONOS2_port = main.params['CTRL']['port2']
+ ONOS3_port = main.params['CTRL']['port3']
+
+ main.case("Setting up test environment")
+ main.log.report("This testcase is testing setting up test environment")
+ main.log.report("__________________________________")
+ main.step("Git checkout and pull master and get version")
+ main.ONOSbench.git_checkout("master")
+ git_pull_result = main.ONOSbench.git_pull()
+ print "git_pull_result = ", git_pull_result
+ version_result = main.ONOSbench.get_version(report=True)
+
+ if git_pull_result == 1:
+ main.step("Using mvn clean & install")
+ clean_install_result = main.ONOSbench.clean_install()
+ #clean_install_result = main.TRUE
+
+ main.step("Applying cell variable to environment")
+ cell_result1 = main.ONOSbench.set_cell(cell_name)
+ #cell_result2 = main.ONOScli1.set_cell(cell_name)
+ #cell_result3 = main.ONOScli2.set_cell(cell_name)
+ #cell_result4 = main.ONOScli3.set_cell(cell_name)
+ verify_result = main.ONOSbench.verify_cell()
+ cell_result = cell_result1
+
+ main.step("Creating ONOS package")
+ package_result = main.ONOSbench.onos_package()
+
+ #main.step("Creating a cell")
+ #cell_create_result = main.ONOSbench.create_cell_file(**************)
+
+ main.step("Installing ONOS package")
+ onos1_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS1_ip)
+ onos2_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS2_ip)
+ onos3_install_result = main.ONOSbench.onos_install(options="-f", node=ONOS3_ip)
+ onos_install_result = onos1_install_result and onos2_install_result and onos3_install_result
+ if onos_install_result == main.TRUE:
+ main.log.report("Installing ONOS package successful")
+ else:
+ main.log.report("Installing ONOS package failed")
+
+ onos1_isup = main.ONOSbench.isup(ONOS1_ip)
+ onos2_isup = main.ONOSbench.isup(ONOS2_ip)
+ onos3_isup = main.ONOSbench.isup(ONOS3_ip)
+ onos_isup = onos1_isup and onos2_isup and onos3_isup
+ if onos_isup == main.TRUE:
+ main.log.report("ONOS instances are up and ready")
+ else:
+ main.log.report("ONOS instances may not be up")
+
+ main.step("Starting ONOS service")
+ start_result = main.TRUE
+ #start_result = main.ONOSbench.onos_start(ONOS1_ip)
+ startcli1 = main.ONOScli1.start_onos_cli(ONOS_ip = ONOS1_ip)
+ startcli2 = main.ONOScli2.start_onos_cli(ONOS_ip = ONOS2_ip)
+ startcli3 = main.ONOScli3.start_onos_cli(ONOS_ip = ONOS3_ip)
+ print startcli1
+ print startcli2
+ print startcli3
+
+ case1_result = (package_result and\
+ cell_result and verify_result and onos_install_result and\
+ onos_isup and start_result )
+ utilities.assert_equals(expect=main.TRUE, actual=case1_result,
+ onpass="Test startup successful",
+ onfail="Test startup NOT successful")
+
+ def CASE11(self, main):
+ '''
+ Cleanup sequence:
+ onos-service <node_ip> stop
+ onos-uninstall
+
+ TODO: Define rest of cleanup
+
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.case("Cleaning up test environment")
+
+ main.step("Testing ONOS kill function")
+ kill_result1 = main.ONOSbench.onos_kill(ONOS1_ip)
+ kill_result2 = main.ONOSbench.onos_kill(ONOS2_ip)
+ kill_result3 = main.ONOSbench.onos_kill(ONOS3_ip)
+
+ main.step("Stopping ONOS service")
+ stop_result1 = main.ONOSbench.onos_stop(ONOS1_ip)
+ stop_result2 = main.ONOSbench.onos_stop(ONOS2_ip)
+ stop_result3 = main.ONOSbench.onos_stop(ONOS3_ip)
+
+ main.step("Uninstalling ONOS service")
+ uninstall_result = main.ONOSbench.onos_uninstall()
+
+ def CASE3(self, main):
+ '''
+ Test 'onos' command and its functionality in driver
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.case("Testing 'onos' command")
+
+ main.step("Sending command 'onos -w <onos-ip> system:name'")
+ cmdstr1 = "system:name"
+ cmd_result1 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result1)
+ cmd_result2 = main.ONOSbench.onos_cli(ONOS2_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result2)
+ cmd_result3 = main.ONOSbench.onos_cli(ONOS3_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result3)
+
+ main.step("Sending command 'onos -w <onos-ip> onos:topology'")
+ cmdstr2 = "onos:topology"
+ cmd_result4 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result4)
+ cmd_result5 = main.ONOSbench.onos_cli(ONOS2_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result5)
+ cmd_result6 = main.ONOSbench.onos_cli(ONOS6_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result6)
+
+
+ def CASE4(self, main):
+ import re
+ import time
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+ ONOS1_port = main.params['CTRL']['port1']
+ ONOS2_port = main.params['CTRL']['port2']
+ ONOS3_port = main.params['CTRL']['port3']
+
+ main.log.report("This testcase is testing the assignment of all the switches to all controllers and discovering the hosts in reactive mode")
+ main.log.report("__________________________________")
+ main.case("Pingall Test(No intents are added)")
+ main.step("Assigning switches to controllers")
+ for i in range(1,29): #1 to (num of switches +1)
+ main.Mininet1.assign_sw_controller(sw=str(i),count=3,
+ ip1=ONOS1_ip, port1=ONOS1_port,
+ ip2=ONOS2_ip, port2=ONOS2_port,
+ ip3=ONOS3_ip, port3=ONOS3_port)
+
+ switch_mastership = main.TRUE
+ for i in range (1,29):
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ switch_mastership = switch_mastership and main.TRUE
+ else:
+ switch_mastership = main.FALSE
+
+ if switch_mastership == main.TRUE:
+ main.log.report("Controller assignment successfull")
+ else:
+ main.log.report("Controller assignment failed")
+ #REACTIVE FWD test
+ main.step("Pingall")
+ ping_result = main.FALSE
+ time1 = time.time()
+ ping_result = main.Mininet1.pingall()
+ time2 = time.time()
+ print "Time for pingall: %2f seconds" % (time2 - time1)
+
+ case4_result = switch_mastership and ping_result
+ if ping_result == main.TRUE:
+ main.log.report("Pingall Test in reactive mode to discover the hosts successful")
+ else:
+ main.log.report("Pingall Test in reactive mode to discover the hosts failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,onpass="Controller assignment and Pingall Test successful",onfail="Controller assignment and Pingall Test NOT successful")
+
+
+
+ def CASE5(self,main) :
+ import json
+ from subprocess import Popen, PIPE
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+
+ main.log.report("This testcase is testing if all ONOS nodes are in topology sync with mininet and its peer ONOS nodes")
+ main.log.report("__________________________________")
+ main.case ("Testing Mininet topology with the topology of multi instances ONOS")
+ main.step("Collecting topology information from ONOS")
+ devices1 = main.ONOScli1.devices()
+ devices2 = main.ONOScli2.devices()
+ devices3 = main.ONOScli3.devices()
+ print "devices1 = ", devices1
+ print "devices2 = ", devices2
+ print "devices3 = ", devices3
+ hosts1 = main.ONOScli1.hosts()
+ hosts2 = main.ONOScli2.hosts()
+ hosts3 = main.ONOScli3.hosts()
+ #print "hosts1 = ", hosts1
+ #print "hosts2 = ", hosts2
+ #print "hosts3 = ", hosts3
+ ports1 = main.ONOScli1.ports()
+ ports2 = main.ONOScli2.ports()
+ ports3 = main.ONOScli3.ports()
+ #print "ports1 = ", ports1
+ #print "ports2 = ", ports2
+ #print "ports3 = ", ports3
+ links1 = main.ONOScli1.links()
+ links2 = main.ONOScli2.links()
+ links3 = main.ONOScli3.links()
+ #print "links1 = ", links1
+ #print "links2 = ", links2
+ #print "links3 = ", links3
+
+ print "**************"
+
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+
+ switches_results1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices1))
+ print "switches_Result1 = ", switches_results1
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results1,
+ onpass="ONOS1 Switches view is correct",
+ onfail="ONOS1 Switches view is incorrect")
+
+ switches_results2 = main.Mininet1.compare_switches(MNTopo, json.loads(devices2))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results2,
+ onpass="ONOS2 Switches view is correct",
+ onfail="ONOS2 Switches view is incorrect")
+
+ switches_results3 = main.Mininet1.compare_switches(MNTopo, json.loads(devices3))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results3,
+ onpass="ONOS3 Switches view is correct",
+ onfail="ONOS3 Switches view is incorrect")
+
+ '''
+ ports_results1 = main.Mininet1.compare_ports(MNTopo, json.loads(ports1))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results1,
+ onpass="ONOS1 Ports view is correct",
+ onfail="ONOS1 Ports view is incorrect")
+
+ ports_results2 = main.Mininet1.compare_ports(MNTopo, json.loads(ports2))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results2,
+ onpass="ONOS2 Ports view is correct",
+ onfail="ONOS2 Ports view is incorrect")
+
+ ports_results3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports3))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results3,
+ onpass="ONOS3 Ports view is correct",
+ onfail="ONOS3 Ports view is incorrect")
+ '''
+
+ links_results1 = main.Mininet1.compare_links(MNTopo, json.loads(links1))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results1,
+ onpass="ONOS1 Links view is correct",
+ onfail="ONOS1 Links view is incorrect")
+
+ links_results2 = main.Mininet1.compare_links(MNTopo, json.loads(links2))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results2,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ links_results3 = main.Mininet1.compare_links(MNTopo, json.loads(links3))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results3,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ #topo_result = switches_results1 and switches_results2 and switches_results3\
+ #and ports_results1 and ports_results2 and ports_results3\
+ #and links_results1 and links_results2 and links_results3
+
+ topo_result = switches_results1 and switches_results2 and switches_results3\
+ and links_results1 and links_results2 and links_results3
+
+ if topo_result == main.TRUE:
+ main.log.report("Topology Check Test with mininet and ONOS instances successful")
+ else:
+ main.log.report("Topology Check Test with mininet and ONOS instances failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=topo_result,
+ onpass="Topology Check Test successful",
+ onfail="Topology Check Test NOT successful")
+
+ def CASE6(self):
+ main.log.report("This testcase is testing the addition of host intents and then doing pingall")
+ main.log.report("__________________________________")
+ main.case("Uninstalling reactive forwarding app and addhost intents")
+ main.step("Get hosts")
+ main.ONOScli1.handle.sendline("hosts")
+ main.ONOScli1.handle.expect("onos>")
+ hosts = main.ONOScli1.handle.before
+ main.log.info(hosts)
+
+ main.step("Get all devices id")
+ devices_id_list = main.ONOScli1.get_all_devices_id()
+ main.log.info(devices_id_list)
+
+ #ONOS displays the hosts in hex format unlike mininet which does in decimal format
+ #So take care while adding intents
+
+ main.step("Add host intents for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1")
+ hth_intent_result = main.ONOScli1.add_host_intent("00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1")
+
+
+ #Unistall onos-app-fwd app to disable reactive forwarding
+ main.step("Unistall onos-app-fwd app to disable reactive forwarding")
+ appUninstall_result = main.ONOScli1.feature_uninstall("onos-app-fwd")
+ main.log.info("onos-app-fwd uninstalled")
+
+ #After reactive forwarding is disabled, the reactive flows on switches timeout in 10-15s
+ #So sleep for 15s
+ time.sleep(15)
+
+ flowHandle = main.ONOScli1.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows:" +flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Host intents have not ben installed correctly. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Host intents have been installed correctly")
+
+ case6_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case6_result,
+ onpass="Host intent addition and Pingall Test successful",
+ onfail="Host intent addition and Pingall Test NOT successful")
+
+
+ def CASE7 (self,main):
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ link_sleep = int(main.params['timers']['LinkDiscovery'])
+
+ main.log.report("This testscase is killing a link to ensure that link discovery is consistent")
+ main.log.report("__________________________________")
+ main.case("Killing a link to Ensure that Link Discovery is Working Properly")
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+
+ main.step("Determine the current number of switches and links")
+ topology_output = main.ONOScli1.topology()
+ topology_result = main.ONOSbench.get_topology(topology_output)
+ activeSwitches = topology_result['devices']
+ links = topology_result['links']
+ print "activeSwitches = ", type(activeSwitches)
+ print "links = ", type(links)
+ main.log.info("Currently there are %s switches and %s links" %(str(activeSwitches), str(links)))
+
+ main.step("Kill Link between s3 and s28")
+ main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
+ time.sleep(link_sleep)
+ topology_output = main.ONOScli2.topology()
+ Link_Down = main.ONOSbench.check_status(topology_output,activeSwitches,str(int(links)-2))
+ if Link_Down == main.TRUE:
+ main.log.report("Link Down discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Down,
+ onpass="Link Down discovered properly",
+ onfail="Link down was not discovered in "+ str(link_sleep) + " seconds")
+
+ main.step("Bring link between s3 and s28 back up")
+ Link_Up = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
+ time.sleep(link_sleep)
+ topology_output = main.ONOScli2.topology()
+ Link_Up = main.ONOSbench.check_status(topology_output,activeSwitches,str(links))
+ if Link_Up == main.TRUE:
+ main.log.report("Link up discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Up,
+ onpass="Link up discovered properly",
+ onfail="Link up was not discovered in "+ str(link_sleep) + " seconds")
+
+ main.step("Compare ONOS Topology to MN Topology")
+ main.case ("Testing Mininet topology with the topology of multi instances ONOS")
+ main.step("Collecting topology information from ONOS")
+ devices1 = main.ONOScli1.devices()
+ devices2 = main.ONOScli2.devices()
+ devices3 = main.ONOScli3.devices()
+ print "devices1 = ", devices1
+ print "devices2 = ", devices2
+ print "devices3 = ", devices3
+ hosts1 = main.ONOScli1.hosts()
+ hosts2 = main.ONOScli2.hosts()
+ hosts3 = main.ONOScli3.hosts()
+ #print "hosts1 = ", hosts1
+ #print "hosts2 = ", hosts2
+ #print "hosts3 = ", hosts3
+ ports1 = main.ONOScli1.ports()
+ ports2 = main.ONOScli2.ports()
+ ports3 = main.ONOScli3.ports()
+ #print "ports1 = ", ports1
+ #print "ports2 = ", ports2
+ #print "ports3 = ", ports3
+ links1 = main.ONOScli1.links()
+ links2 = main.ONOScli2.links()
+ links3 = main.ONOScli3.links()
+ #print "links1 = ", links1
+ #print "links2 = ", links2
+ #print "links3 = ", links3
+
+ print "**************"
+
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+
+ switches_results1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices1))
+ print "switches_Result1 = ", switches_results1
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results1,
+ onpass="ONOS1 Switches view is correct",
+ onfail="ONOS1 Switches view is incorrect")
+
+ switches_results2 = main.Mininet1.compare_switches(MNTopo, json.loads(devices2))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results2,
+ onpass="ONOS2 Switches view is correct",
+ onfail="ONOS2 Switches view is incorrect")
+
+ switches_results3 = main.Mininet1.compare_switches(MNTopo, json.loads(devices3))
+ utilities.assert_equals(expect=main.TRUE, actual=switches_results3,
+ onpass="ONOS3 Switches view is correct",
+ onfail="ONOS3 Switches view is incorrect")
+
+ '''
+ ports_results1 = main.Mininet1.compare_ports(MNTopo, json.loads(ports1))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results1,
+ onpass="ONOS1 Ports view is correct",
+ onfail="ONOS1 Ports view is incorrect")
+
+ ports_results2 = main.Mininet1.compare_ports(MNTopo, json.loads(ports2))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results2,
+ onpass="ONOS2 Ports view is correct",
+ onfail="ONOS2 Ports view is incorrect")
+
+ ports_results3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports3))
+ utilities.assert_equals(expect=main.TRUE, actual=ports_results3,
+ onpass="ONOS3 Ports view is correct",
+ onfail="ONOS3 Ports view is incorrect")
+ '''
+
+ links_results1 = main.Mininet1.compare_links(MNTopo, json.loads(links1))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results1,
+ onpass="ONOS1 Links view is correct",
+ onfail="ONOS1 Links view is incorrect")
+
+ links_results2 = main.Mininet1.compare_links(MNTopo, json.loads(links2))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results2,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ links_results3 = main.Mininet1.compare_links(MNTopo, json.loads(links3))
+ utilities.assert_equals(expect=main.TRUE, actual=links_results3,
+ onpass="ONOS2 Links view is correct",
+ onfail="ONOS2 Links view is incorrect")
+
+ #topo_result = switches_results1 and switches_results2 and switches_results3\
+ #and ports_results1 and ports_results2 and ports_results3\
+ #and links_results1 and links_results2 and links_results3
+
+ topo_result = switches_results1 and switches_results2 and switches_results3\
+ and links_results1 and links_results2 and links_results3
+
+ utilities.assert_equals(expect=main.TRUE, actual=topo_result and Link_Up and Link_Down,
+ onpass="Topology Check Test successful",
+ onfail="Topology Check Test NOT successful")
+
+
+ def CASE8(self):
+ '''
+ Host intents removal
+ '''
+ main.log.report("This testcase removes host intents before adding the point intents")
+ main.log.report("__________________________________")
+ main.log.info("Host intents removal")
+ main.case("Removing host intents")
+ main.step("Obtain the intent id's")
+ intent_result = main.ONOScli1.intents()
+ #print "intent_result = ",intent_result
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+ #for line in intent_linewise:
+ #print "line = ", line
+ intentids = []
+ for line in intent_linewise:
+ intentids.append(line.split(",")[0].split("=")[1])
+ for id in intentids:
+ print "id = ", id
+
+ main.step("Iterate through the intentids list and remove each intent")
+ for id in intentids:
+ main.ONOScli1.remove_intent(intent_id = id)
+
+ intent_result = main.ONOScli1.intents()
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+
+ intentState = {}
+ for id, line in zip(intentids, intent_linewise):
+ #print "line after removing intent = ", line
+ x = line.split(",")
+ state = x[1].split("=")[1]
+ intentState[id] = state
+
+ case8_result = main.TRUE
+ for key,value in intentState.iteritems():
+ print "key,value = ", key, value
+ if value == "WITHDRAWN":
+ case8_result = case8_result and main.TRUE
+ else:
+ case8_result = case8_result and main.FALSE
+
+ if case8_result == main.TRUE:
+ main.log.report("Intent removal successful")
+ else:
+ main.log.report("Intent removal failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Intent removal test successful",
+ onfail="Intent removal test failed")
+
+
+ def CASE9(self):
+ '''
+ This test case adds point intents. Make sure you run test case 8 which is host intent removal before executing this test case.
+ Else the host intent's flows will persist on switches and the pings would work even if there is some issue with the point intent's flows
+ '''
+ main.log.report("This testcase adds point intents and then does pingall")
+ main.log.report("__________________________________")
+ main.log.info("Adding point intents")
+ main.case("Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ main.step("Add point-to-point intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003008", 1, "of:0000000000006018", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006018", 1, "of:0000000000003008", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h9 and h19 or ONOS hosts h9 and h13")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003009", 1, "of:0000000000006019", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006019", 1, "of:0000000000003009", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h10 and h20 or ONOS hosts hA and h14")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003010", 1, "of:0000000000006020", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006020", 1, "of:0000000000003010", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h11 and h21 or ONOS hosts hB and h15")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003011", 1, "of:0000000000006021", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006021", 1, "of:0000000000003011", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h12 and h22 or ONOS hosts hC and h16")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003012", 1, "of:0000000000006022", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006022", 1, "of:0000000000003012", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h13 and h23 or ONOS hosts hD and h17")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003013", 1, "of:0000000000006023", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006023", 1, "of:0000000000003013", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h14 and h24 or ONOS hosts hE and h18")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003014", 1, "of:0000000000006024", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006024", 1, "of:0000000000003014", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h15 and h25 or ONOS hosts hF and h19")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003015", 1, "of:0000000000006025", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006025", 1, "of:0000000000003015", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h16 and h26 or ONOS hosts h10 and h1A")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003016", 1, "of:0000000000006026", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006026", 1, "of:0000000000003016", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+
+ main.step("Add point-to-point intents for mininet hosts h17 and h27 or ONOS hosts h11 and h1B")
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000003017", 1, "of:0000000000006027", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOScli1.add_point_intent("of:0000000000006027", 1, "of:0000000000003017", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOScli1.intents()
+ main.log.info("Point to point intent install successful")
+ #main.log.info(get_intent_result)
+
+ print("_______________________________________________________________________________________")
+
+ flowHandle = main.ONOScli1.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows :" + flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Ping all test after Point intents addition failed. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Ping all test after Point intents addition successful")
+
+ case8_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Ping all test after Point intents addition successful",
+ onfail="Ping all test after Point intents addition failed")
+
diff --git a/TestON/tests/MultiProd13/MultiProd13.topo b/TestON/tests/MultiProd13/MultiProd13.topo
new file mode 100755
index 0000000..a4fad91
--- /dev/null
+++ b/TestON/tests/MultiProd13/MultiProd13.topo
@@ -0,0 +1,98 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOScli1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli1>
+
+ <ONOScli2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli2>
+
+ <ONOScli3>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOScli3>
+
+ <ONOS1>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+
+ <Mininet1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ <Mininet2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>RemoteMininetDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet2>
+ </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/ProdFunc/ProdFunc.params b/TestON/tests/ProdFunc/ProdFunc.params
new file mode 100755
index 0000000..9b44a53
--- /dev/null
+++ b/TestON/tests/ProdFunc/ProdFunc.params
@@ -0,0 +1,43 @@
+<PARAMS>
+
+ <testcases>1,4,5,6,7,8,9</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>driver_test</cellName>
+ </ENV>
+
+ <CTRL>
+ <ip1>10.128.20.11</ip1>
+ <port1>6633</port1>
+ </CTRL>
+
+ <PING>
+ <source1>h8</source1>
+ <source2>h9</source2>
+ <source3>h10</source3>
+ <source4>h11</source4>
+ <source5>h12</source5>
+ <source6>h13</source6>
+ <source7>h14</source7>
+ <source8>h15</source8>
+ <source9>h16</source9>
+ <source10>h17</source10>
+ <target1>10.0.0.18</target1>
+ <target2>10.0.0.19</target2>
+ <target3>10.0.0.20</target3>
+ <target4>10.0.0.21</target4>
+ <target5>10.0.0.22</target5>
+ <target6>10.0.0.23</target6>
+ <target7>10.0.0.24</target7>
+ <target8>10.0.0.25</target8>
+ <target9>10.0.0.26</target9>
+ <target10>10.0.0.27</target10>
+ </PING>
+
+ <timers>
+ <LinkDiscovery>5</LinkDiscovery>
+ <SwitchDiscovery>31</SwitchDiscovery>
+ </timers>
+
+</PARAMS>
diff --git a/TestON/tests/ProdFunc/ProdFunc.py b/TestON/tests/ProdFunc/ProdFunc.py
new file mode 100755
index 0000000..67a2981
--- /dev/null
+++ b/TestON/tests/ProdFunc/ProdFunc.py
@@ -0,0 +1,766 @@
+
+#Testing the basic functionality of ONOS Next
+#For sanity and driver functionality excercises only.
+
+import time
+import sys
+import os
+import re
+import time
+import json
+
+time.sleep(1)
+class ProdFunc:
+ def __init__(self):
+ self.default = ''
+
+ def CASE1(self, main):
+ '''
+ Startup sequence:
+ git pull
+ mvn clean install
+ onos-package
+ cell <name>
+ onos-verify-cell
+ onos-install -f
+ onos-wait-for-start
+ '''
+
+ cell_name = main.params['ENV']['cellName']
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS1_port = main.params['CTRL']['port1']
+
+ main.case("Setting up test environment")
+ main.log.report("This testcase is testing setting up test environment")
+ main.log.report("__________________________________")
+ main.step("Git checkout and pull master and get version")
+ main.ONOSbench.git_checkout("master")
+ git_pull_result = main.ONOSbench.git_pull()
+ print "git_pull_result = ", git_pull_result
+ version_result = main.ONOSbench.get_version(report=True)
+
+ if git_pull_result == 1:
+ main.step("Using mvn clean & install")
+ clean_install_result = main.ONOSbench.clean_install()
+ #clean_install_result = main.TRUE
+
+ main.step("Applying cell variable to environment")
+ cell_result1 = main.ONOSbench.set_cell(cell_name)
+ verify_result = main.ONOSbench.verify_cell()
+ cell_result2 = main.ONOS2.set_cell(cell_name)
+ #verify_result = main.ONOS2.verify_cell()
+ main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+
+ cell_result = cell_result1 and cell_result2
+
+ main.step("Creating ONOS package")
+ package_result = main.ONOSbench.onos_package()
+
+ #main.step("Creating a cell")
+ #cell_create_result = main.ONOSbench.create_cell_file(**************)
+
+ main.step("Installing ONOS package")
+ onos_install_result = main.ONOSbench.onos_install()
+ if onos_install_result == main.TRUE:
+ main.log.report("Installing ONOS package successful")
+ else:
+ main.log.report("Installing ONOS package failed")
+
+ onos1_isup = main.ONOSbench.isup()
+ if onos1_isup == main.TRUE:
+ main.log.report("ONOS instance is up and ready")
+ else:
+ main.log.report("ONOS instance may not be up")
+
+ main.step("Starting ONOS service")
+ start_result = main.ONOSbench.onos_start(ONOS1_ip)
+
+ case1_result = (package_result and\
+ cell_result and verify_result and onos_install_result and\
+ onos1_isup and start_result )
+ utilities.assert_equals(expect=main.TRUE, actual=case1_result,
+ onpass="Test startup successful",
+ onfail="Test startup NOT successful")
+
+ def CASE11(self, main):
+ '''
+ Cleanup sequence:
+ onos-service <node_ip> stop
+ onos-uninstall
+
+ TODO: Define rest of cleanup
+
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ main.case("Cleaning up test environment")
+
+ main.step("Testing ONOS kill function")
+ kill_result = main.ONOSbench.onos_kill(ONOS1_ip)
+
+ main.step("Stopping ONOS service")
+ stop_result = main.ONOSbench.onos_stop(ONOS1_ip)
+
+ main.step("Uninstalling ONOS service")
+ uninstall_result = main.ONOSbench.onos_uninstall()
+
+ def CASE3(self, main):
+ '''
+ Test 'onos' command and its functionality in driver
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ main.case("Testing 'onos' command")
+
+ main.step("Sending command 'onos -w <onos-ip> system:name'")
+ cmdstr1 = "system:name"
+ cmd_result1 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result1)
+
+ main.step("Sending command 'onos -w <onos-ip> onos:topology'")
+ cmdstr2 = "onos:topology"
+ cmd_result2 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result2)
+
+
+
+ def CASE4(self, main):
+ import re
+ import time
+ main.log.report("This testcase is testing the assignment of all the switches to all the controllers and discovering the hosts in reactive mode")
+ main.log.report("__________________________________")
+ main.case("Pingall Test")
+ main.step("Assigning switches to controllers")
+ for i in range(1,29):
+ if i ==1:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=2 and i<5:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=5 and i<8:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=8 and i<18:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=18 and i<28:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ else:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ Switch_Mastership = main.TRUE
+ for i in range (1,29):
+ if i==1:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=2 and i<5:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=5 and i<8:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=8 and i<18:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=18 and i<28:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ else:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is" + str(response))
+ if re.search("tcp:" +ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+
+ if Switch_Mastership == main.TRUE:
+ main.log.report("Controller assignmnet successful")
+ else:
+ main.log.report("Controller assignmnet failed")
+ utilities.assert_equals(expect = main.TRUE,actual=Switch_Mastership,
+ onpass="MasterControllers assigned correctly")
+ '''
+ for i in range (1,29):
+ main.Mininet1.assign_sw_controller(sw=str(i),count=5,
+ ip1=ONOS1_ip,port1=ONOS1_port,
+ ip2=ONOS2_ip,port2=ONOS2_port,
+ ip3=ONOS3_ip,port3=ONOS3_port,
+ ip4=ONOS4_ip,port4=ONOS4_port,
+ ip5=ONOS5_ip,port5=ONOS5_port)
+ '''
+ #REACTIVE FWD test
+
+ main.step("Get list of hosts from Mininet")
+ host_list = main.Mininet1.get_hosts()
+ main.log.info(host_list)
+
+ main.step("Get host list in ONOS format")
+ host_onos_list = main.ONOS2.get_hosts_id(host_list)
+ main.log.info(host_onos_list)
+ #time.sleep(5)
+
+ main.step("Pingall")
+ ping_result = main.FALSE
+ while ping_result == main.FALSE:
+ time1 = time.time()
+ ping_result = main.Mininet1.pingall()
+ time2 = time.time()
+ print "Time for pingall: %2f seconds" % (time2 - time1)
+
+ #Start onos cli again because u might have dropped out of onos prompt to the shell prompt
+ #if there was no activity
+ main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+
+ case4_result = Switch_Mastership and ping_result
+ if ping_result == main.TRUE:
+ main.log.report("Pingall Test in reactive mode to discover the hosts successful")
+ else:
+ main.log.report("Pingall Test in reactive mode to discover the hosts failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,onpass="Controller assignment and Pingall T est successful",onfail="Controller assignment and Pingall Test NOT successful")
+
+
+ def CASE6(self):
+ main.log.report("This testcase is testing the addition of host intents and then doing pingall")
+ main.log.report("__________________________________")
+ main.case("Uninstalling reactive forwarding app and addhost intents")
+ main.step("Get hosts")
+ main.ONOS2.handle.sendline("hosts")
+ main.ONOS2.handle.expect("onos>")
+ hosts = main.ONOS2.handle.before
+ main.log.info(hosts)
+
+ main.step("Get all devices id")
+ devices_id_list = main.ONOS2.get_all_devices_id()
+ main.log.info(devices_id_list)
+
+ #ONOS displays the hosts in hex format unlike mininet which does in decimal format
+ #So take care while adding intents
+
+ main.step("Add host-to-host intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1")
+
+
+
+ print "_____________________________________________________________________________________"
+
+ #Unistall onos-app-fwd app to disable reactive forwarding
+ appUninstall_result = main.ONOS2.feature_uninstall("onos-app-fwd")
+ main.log.info("onos-app-fwd uninstalled")
+
+ #After reactive forwarding is disabled, the reactive flows on switches timeout in 10-15s
+ #So sleep for 15s
+ time.sleep(15)
+
+ flowHandle = main.ONOS2.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flow:" +flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ #while i<10:
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Ping all test after Host intent addition failed. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Ping all test after Host intent addition successful")
+
+ case6_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,
+ onpass="Pingall Test after Host intents addition successful",
+ onfail="Pingall Test after Host intents addition failed")
+
+
+ def CASE5(self,main) :
+ import json
+ from subprocess import Popen, PIPE
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ #main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+ deviceResult = main.ONOS2.devices()
+ linksResult = main.ONOS2.links()
+ #portsResult = main.ONOS2.ports()
+ print "**************"
+
+ main.log.report("This testcase is testing if all ONOS nodes are in topology sync with mininet")
+ main.log.report("__________________________________")
+ main.case("Comparing Mininet topology with the topology of ONOS")
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+ devices_json = main.ONOS2.devices()
+ links_json = main.ONOS2.links()
+ #ports_json = main.ONOS2.ports()
+ print "devices_json= ", devices_json
+
+ result1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices_json))
+ result2 = main.Mininet1.compare_links(MNTopo, json.loads(links_json))
+ #result3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports_json))
+
+ #result = result1 and result2 and result3
+ result = result1 and result2
+
+ print "***********************"
+ if result == main.TRUE:
+ main.log.report("ONOS"+ " Topology matches MN Topology")
+ else:
+ main.log.report("ONOS"+ " Topology does not match MN Topology")
+
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="ONOS" + " Topology matches MN Topology",
+ onfail="ONOS" + " Topology does not match MN Topology")
+
+ Topology_Check = Topology_Check and result
+ utilities.assert_equals(expect=main.TRUE,actual=Topology_Check,
+ onpass="Topology checks passed", onfail="Topology checks failed")
+
+
+ def CASE7 (self,main):
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ link_sleep = int(main.params['timers']['LinkDiscovery'])
+
+ main.log.report("This testscase is killing a link to ensure that link discovery is consistent")
+ main.log.report("__________________________________")
+ main.log.report("Killing a link to ensure that link discovery is consistent")
+ main.case("Killing a link to Ensure that Link Discovery is Working Properly")
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+
+ main.step("Determine the current number of switches and links")
+ topology_output = main.ONOS2.topology()
+ topology_result = main.ONOS1.get_topology(topology_output)
+ activeSwitches = topology_result['devices']
+ links = topology_result['links']
+ print "activeSwitches = ", type(activeSwitches)
+ print "links = ", type(links)
+ main.log.info("Currently there are %s switches and %s links" %(str(activeSwitches), str(links)))
+
+ main.step("Kill Link between s3 and s28")
+ main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
+ time.sleep(link_sleep)
+ topology_output = main.ONOS2.topology()
+ Link_Down = main.ONOS1.check_status(topology_output,activeSwitches,str(int(links)-2))
+ if Link_Down == main.TRUE:
+ main.log.report("Link Down discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Down,
+ onpass="Link Down discovered properly",
+ onfail="Link down was not discovered in "+ str(link_sleep) + " seconds")
+
+ #Check ping result here..add code for it
+
+ main.step("Bring link between s3 and s28 back up")
+ Link_Up = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
+ time.sleep(link_sleep)
+ topology_output = main.ONOS2.topology()
+ Link_Up = main.ONOS1.check_status(topology_output,activeSwitches,str(links))
+ if Link_Up == main.TRUE:
+ main.log.report("Link up discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Up,
+ onpass="Link up discovered properly",
+ onfail="Link up was not discovered in "+ str(link_sleep) + " seconds")
+
+ #Check ping result here..add code for it
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Compare ONOS Topology to MN Topology")
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+ Topology_Check = main.TRUE
+
+ devices_json = main.ONOS2.devices()
+ links_json = main.ONOS2.links()
+ ports_json = main.ONOS2.ports()
+ print "devices_json= ", devices_json
+
+ result1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices_json))
+ result2 = main.Mininet1.compare_links(MNTopo, json.loads(links_json))
+ #result3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports_json))
+
+ #result = result1 and result2 and result3
+ result = result1 and result2
+ print "***********************"
+
+ if result == main.TRUE:
+ main.log.report("ONOS"+ " Topology matches MN Topology")
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="ONOS" + " Topology matches MN Topology",
+ onfail="ONOS" + " Topology does not match MN Topology")
+
+ Topology_Check = Topology_Check and result
+ utilities.assert_equals(expect=main.TRUE,actual=Topology_Check,
+ onpass="Topology checks passed", onfail="Topology checks failed")
+
+ result = Link_Down and Link_Up and Topology_Check
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="Link failure is discovered correctly",
+ onfail="Link Discovery failed")
+
+
+ def CASE8(self):
+ '''
+ Host intents removal
+ '''
+ main.log.report("This testcase removes host intents before adding the point intents")
+ main.log.report("__________________________________")
+ main.log.info("Host intents removal")
+ main.case("Removing host intents")
+ main.step("Obtain the intent id's")
+ intent_result = main.ONOS2.intents()
+ #print "intent_result = ",intent_result
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+ #for line in intent_linewise:
+ #print "line = ", line
+ intentids = []
+ for line in intent_linewise:
+ intentids.append(line.split(",")[0].split("=")[1])
+ for id in intentids:
+ print "id = ", id
+
+ main.step("Iterate through the intentids list and remove each intent")
+ for id in intentids:
+ main.ONOS2.remove_intent(intent_id = id)
+
+ intent_result = main.ONOS2.intents()
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+
+ intentState = {}
+ for id, line in zip(intentids, intent_linewise):
+ #print "line after removing intent = ", line
+ x = line.split(",")
+ state = x[1].split("=")[1]
+ intentState[id] = state
+
+ case8_result = main.TRUE
+ for key,value in intentState.iteritems():
+ print "key,value = ", key, value
+ if value == "WITHDRAWN":
+ case8_result = case8_result and main.TRUE
+ else:
+ case8_result = case8_result and main.FALSE
+
+ if case8_result == main.TRUE:
+ main.log.report("Intent removal successful")
+ else:
+ main.log.report("Intent removal failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Intent removal test successful",
+ onfail="Intent removal test failed")
+
+
+
+
+
+ def CASE9(self):
+ main.log.report("This testcase adds point intents and then does pingall")
+ main.log.report("__________________________________")
+ main.log.info("Adding point intents")
+ main.case("Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ main.step("Add point-to-point intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003008", 1, "of:0000000000006018", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006018", 1, "of:0000000000003008", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h9 and h19 or ONOS hosts h9 and h13")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003009", 1, "of:0000000000006019", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006019", 1, "of:0000000000003009", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h10 and h20 or ONOS hosts hA and h14")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003010", 1, "of:0000000000006020", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006020", 1, "of:0000000000003010", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h11 and h21 or ONOS hosts hB and h15")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003011", 1, "of:0000000000006021", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006021", 1, "of:0000000000003011", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h12 and h22 or ONOS hosts hC and h16")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003012", 1, "of:0000000000006022", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006022", 1, "of:0000000000003012", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h13 and h23 or ONOS hosts hD and h17")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003013", 1, "of:0000000000006023", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006023", 1, "of:0000000000003013", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h14 and h24 or ONOS hosts hE and h18")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003014", 1, "of:0000000000006024", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006024", 1, "of:0000000000003014", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h15 and h25 or ONOS hosts hF and h19")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003015", 1, "of:0000000000006025", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006025", 1, "of:0000000000003015", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h16 and h26 or ONOS hosts h10 and h1A")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003016", 1, "of:0000000000006026", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006026", 1, "of:0000000000003016", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+
+ main.step("Add point-to-point intents for mininet hosts h17 and h27 or ONOS hosts h11 and h1B")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003017", 1, "of:0000000000006027", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006027", 1, "of:0000000000003017", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ print("_______________________________________________________________________________________")
+
+ flowHandle = main.ONOS2.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows :" + flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+
+ if Ping_Result==main.FALSE:
+ main.log.report("Point intents have not ben installed correctly. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Point Intents have been installed correctly")
+
+ case9_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case9_result,
+ onpass="Point intents addition and Pingall Test successful",
+ onfail="Point intents addition and Pingall Test NOT successful")
+
+
diff --git a/TestON/tests/ProdFunc/ProdFunc.topo b/TestON/tests/ProdFunc/ProdFunc.topo
new file mode 100755
index 0000000..5d453a6
--- /dev/null
+++ b/TestON/tests/ProdFunc/ProdFunc.topo
@@ -0,0 +1,61 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <Mininet1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ <Mininet2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>RemoteMininetDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow10 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet2>
+ </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.params b/TestON/tests/ProdFunc13/ProdFunc13.params
new file mode 100755
index 0000000..9b44a53
--- /dev/null
+++ b/TestON/tests/ProdFunc13/ProdFunc13.params
@@ -0,0 +1,43 @@
+<PARAMS>
+
+ <testcases>1,4,5,6,7,8,9</testcases>
+
+ #Environment variables
+ <ENV>
+ <cellName>driver_test</cellName>
+ </ENV>
+
+ <CTRL>
+ <ip1>10.128.20.11</ip1>
+ <port1>6633</port1>
+ </CTRL>
+
+ <PING>
+ <source1>h8</source1>
+ <source2>h9</source2>
+ <source3>h10</source3>
+ <source4>h11</source4>
+ <source5>h12</source5>
+ <source6>h13</source6>
+ <source7>h14</source7>
+ <source8>h15</source8>
+ <source9>h16</source9>
+ <source10>h17</source10>
+ <target1>10.0.0.18</target1>
+ <target2>10.0.0.19</target2>
+ <target3>10.0.0.20</target3>
+ <target4>10.0.0.21</target4>
+ <target5>10.0.0.22</target5>
+ <target6>10.0.0.23</target6>
+ <target7>10.0.0.24</target7>
+ <target8>10.0.0.25</target8>
+ <target9>10.0.0.26</target9>
+ <target10>10.0.0.27</target10>
+ </PING>
+
+ <timers>
+ <LinkDiscovery>5</LinkDiscovery>
+ <SwitchDiscovery>31</SwitchDiscovery>
+ </timers>
+
+</PARAMS>
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.py b/TestON/tests/ProdFunc13/ProdFunc13.py
new file mode 100755
index 0000000..63a15cc
--- /dev/null
+++ b/TestON/tests/ProdFunc13/ProdFunc13.py
@@ -0,0 +1,766 @@
+
+#Testing the basic functionality of ONOS Next
+#For sanity and driver functionality excercises only.
+
+import time
+import sys
+import os
+import re
+import time
+import json
+
+time.sleep(1)
+class ProdFunc13:
+ def __init__(self):
+ self.default = ''
+
+ def CASE1(self, main):
+ '''
+ Startup sequence:
+ git pull
+ mvn clean install
+ onos-package
+ cell <name>
+ onos-verify-cell
+ onos-install -f
+ onos-wait-for-start
+ '''
+
+ cell_name = main.params['ENV']['cellName']
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS1_port = main.params['CTRL']['port1']
+
+ main.case("Setting up test environment")
+ main.log.report("This testcase is testing setting up test environment")
+ main.log.report("__________________________________")
+ main.step("Git checkout and pull master and get version")
+ main.ONOSbench.git_checkout("master")
+ git_pull_result = main.ONOSbench.git_pull()
+ print "git_pull_result = ", git_pull_result
+ version_result = main.ONOSbench.get_version(report=True)
+
+ if git_pull_result == 1:
+ main.step("Using mvn clean & install")
+ clean_install_result = main.ONOSbench.clean_install()
+ #clean_install_result = main.TRUE
+
+ main.step("Applying cell variable to environment")
+ cell_result1 = main.ONOSbench.set_cell(cell_name)
+ verify_result = main.ONOSbench.verify_cell()
+ cell_result2 = main.ONOS2.set_cell(cell_name)
+ #verify_result = main.ONOS2.verify_cell()
+ main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+
+ cell_result = cell_result1 and cell_result2
+
+ main.step("Creating ONOS package")
+ package_result = main.ONOSbench.onos_package()
+
+ #main.step("Creating a cell")
+ #cell_create_result = main.ONOSbench.create_cell_file(**************)
+
+ main.step("Installing ONOS package")
+ onos_install_result = main.ONOSbench.onos_install()
+ if onos_install_result == main.TRUE:
+ main.log.report("Installing ONOS package successful")
+ else:
+ main.log.report("Installing ONOS package failed")
+
+ onos1_isup = main.ONOSbench.isup()
+ if onos1_isup == main.TRUE:
+ main.log.report("ONOS instance is up and ready")
+ else:
+ main.log.report("ONOS instance may not be up")
+
+ main.step("Starting ONOS service")
+ start_result = main.ONOSbench.onos_start(ONOS1_ip)
+
+ case1_result = (package_result and\
+ cell_result and verify_result and onos_install_result and\
+ onos1_isup and start_result )
+ utilities.assert_equals(expect=main.TRUE, actual=case1_result,
+ onpass="Test startup successful",
+ onfail="Test startup NOT successful")
+
+ def CASE11(self, main):
+ '''
+ Cleanup sequence:
+ onos-service <node_ip> stop
+ onos-uninstall
+
+ TODO: Define rest of cleanup
+
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ main.case("Cleaning up test environment")
+
+ main.step("Testing ONOS kill function")
+ kill_result = main.ONOSbench.onos_kill(ONOS1_ip)
+
+ main.step("Stopping ONOS service")
+ stop_result = main.ONOSbench.onos_stop(ONOS1_ip)
+
+ main.step("Uninstalling ONOS service")
+ uninstall_result = main.ONOSbench.onos_uninstall()
+
+ def CASE3(self, main):
+ '''
+ Test 'onos' command and its functionality in driver
+ '''
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ main.case("Testing 'onos' command")
+
+ main.step("Sending command 'onos -w <onos-ip> system:name'")
+ cmdstr1 = "system:name"
+ cmd_result1 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr1)
+ main.log.info("onos command returned: "+cmd_result1)
+
+ main.step("Sending command 'onos -w <onos-ip> onos:topology'")
+ cmdstr2 = "onos:topology"
+ cmd_result2 = main.ONOSbench.onos_cli(ONOS1_ip, cmdstr2)
+ main.log.info("onos command returned: "+cmd_result2)
+
+
+
+ def CASE4(self, main):
+ import re
+ import time
+ main.log.report("This testcase is testing the assignment of all the switches to all the controllers and discovering the hosts in reactive mode")
+ main.log.report("__________________________________")
+ main.case("Pingall Test")
+ main.step("Assigning switches to controllers")
+ for i in range(1,29):
+ if i ==1:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=2 and i<5:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=5 and i<8:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=8 and i<18:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ elif i>=18 and i<28:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ else:
+ main.Mininet1.assign_sw_controller(sw=str(i),ip1=ONOS1_ip,port1=ONOS1_port)
+ Switch_Mastership = main.TRUE
+ for i in range (1,29):
+ if i==1:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=2 and i<5:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=5 and i<8:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=8 and i<18:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ elif i>=18 and i<28:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is " + str(response))
+ if re.search("tcp:"+ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+ else:
+ response = main.Mininet1.get_sw_controller("s"+str(i))
+ print("Response is" + str(response))
+ if re.search("tcp:" +ONOS1_ip,response):
+ Switch_Mastership = Switch_Mastership and main.TRUE
+ else:
+ Switch_Mastership = main.FALSE
+
+ if Switch_Mastership == main.TRUE:
+ main.log.report("Controller assignmnet successful")
+ else:
+ main.log.report("Controller assignmnet failed")
+ utilities.assert_equals(expect = main.TRUE,actual=Switch_Mastership,
+ onpass="MasterControllers assigned correctly")
+ '''
+ for i in range (1,29):
+ main.Mininet1.assign_sw_controller(sw=str(i),count=5,
+ ip1=ONOS1_ip,port1=ONOS1_port,
+ ip2=ONOS2_ip,port2=ONOS2_port,
+ ip3=ONOS3_ip,port3=ONOS3_port,
+ ip4=ONOS4_ip,port4=ONOS4_port,
+ ip5=ONOS5_ip,port5=ONOS5_port)
+ '''
+ #REACTIVE FWD test
+
+ main.step("Get list of hosts from Mininet")
+ host_list = main.Mininet1.get_hosts()
+ main.log.info(host_list)
+
+ main.step("Get host list in ONOS format")
+ host_onos_list = main.ONOS2.get_hosts_id(host_list)
+ main.log.info(host_onos_list)
+ #time.sleep(5)
+
+ main.step("Pingall")
+ ping_result = main.FALSE
+ while ping_result == main.FALSE:
+ time1 = time.time()
+ ping_result = main.Mininet1.pingall()
+ time2 = time.time()
+ print "Time for pingall: %2f seconds" % (time2 - time1)
+
+ #Start onos cli again because u might have dropped out of onos prompt to the shell prompt
+ #if there was no activity
+ main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+
+ case4_result = Switch_Mastership and ping_result
+ if ping_result == main.TRUE:
+ main.log.report("Pingall Test in reactive mode to discover the hosts successful")
+ else:
+ main.log.report("Pingall Test in reactive mode to discover the hosts failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,onpass="Controller assignment and Pingall T est successful",onfail="Controller assignment and Pingall Test NOT successful")
+
+
+ def CASE6(self):
+ main.log.report("This testcase is testing the addition of host intents and then doing pingall")
+ main.log.report("__________________________________")
+ main.case("Uninstalling reactive forwarding app and addhost intents")
+ main.step("Get hosts")
+ main.ONOS2.handle.sendline("hosts")
+ main.ONOS2.handle.expect("onos>")
+ hosts = main.ONOS2.handle.before
+ main.log.info(hosts)
+
+ main.step("Get all devices id")
+ devices_id_list = main.ONOS2.get_all_devices_id()
+ main.log.info(devices_id_list)
+
+ #ONOS displays the hosts in hex format unlike mininet which does in decimal format
+ #So take care while adding intents
+
+ main.step("Add host-to-host intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:08/-1", "00:00:00:00:00:12/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:09/-1", "00:00:00:00:00:13/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0A/-1", "00:00:00:00:00:14/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0B/-1", "00:00:00:00:00:15/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0C/-1", "00:00:00:00:00:16/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0D/-1", "00:00:00:00:00:17/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0E/-1", "00:00:00:00:00:18/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:0F/-1", "00:00:00:00:00:19/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:10/-1", "00:00:00:00:00:1A/-1")
+ hth_intent_result = main.ONOS2.add_host_intent("00:00:00:00:00:11/-1", "00:00:00:00:00:1B/-1")
+
+
+
+ print "_____________________________________________________________________________________"
+
+ #Unistall onos-app-fwd app to disable reactive forwarding
+ appUninstall_result = main.ONOS2.feature_uninstall("onos-app-fwd")
+ main.log.info("onos-app-fwd uninstalled")
+
+ #After reactive forwarding is disabled, the reactive flows on switches timeout in 10-15s
+ #So sleep for 15s
+ time.sleep(15)
+
+ flowHandle = main.ONOS2.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flow:" +flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ #while i<10:
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+ if Ping_Result==main.FALSE:
+ main.log.report("Ping all test after Host intent addition failed. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Ping all test after Host intent addition successful")
+
+ case6_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case4_result,
+ onpass="Pingall Test after Host intents addition successful",
+ onfail="Pingall Test after Host intents addition failed")
+
+
+ def CASE5(self,main) :
+ import json
+ from subprocess import Popen, PIPE
+ from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
+ #main.ONOS2.start_onos_cli(ONOS_ip=main.params['CTRL']['ip1'])
+ deviceResult = main.ONOS2.devices()
+ linksResult = main.ONOS2.links()
+ #portsResult = main.ONOS2.ports()
+ print "**************"
+
+ main.log.report("This testcase is testing if all ONOS nodes are in topology sync with mininet")
+ main.log.report("__________________________________")
+ main.case("Comparing Mininet topology with the topology of ONOS")
+ main.step("Start continuous pings")
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Create TestONTopology object")
+ global ctrls
+ ctrls = []
+ count = 1
+ while True:
+ temp = ()
+ if ('ip' + str(count)) in main.params['CTRL']:
+ temp = temp + (getattr(main,('ONOS' + str(count))),)
+ temp = temp + ("ONOS"+str(count),)
+ temp = temp + (main.params['CTRL']['ip'+str(count)],)
+ temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+ ctrls.append(temp)
+ count = count + 1
+ else:
+ break
+ global MNTopo
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+
+ Topology_Check = main.TRUE
+ main.step("Compare ONOS Topology to MN Topology")
+ devices_json = main.ONOS2.devices()
+ links_json = main.ONOS2.links()
+ #ports_json = main.ONOS2.ports()
+ print "devices_json= ", devices_json
+
+ result1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices_json))
+ result2 = main.Mininet1.compare_links(MNTopo, json.loads(links_json))
+ #result3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports_json))
+
+ #result = result1 and result2 and result3
+ result = result1 and result2
+
+ print "***********************"
+ if result == main.TRUE:
+ main.log.report("ONOS"+ " Topology matches MN Topology")
+ else:
+ main.log.report("ONOS"+ " Topology does not match MN Topology")
+
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="ONOS" + " Topology matches MN Topology",
+ onfail="ONOS" + " Topology does not match MN Topology")
+
+ Topology_Check = Topology_Check and result
+ utilities.assert_equals(expect=main.TRUE,actual=Topology_Check,
+ onpass="Topology checks passed", onfail="Topology checks failed")
+
+
+ def CASE7 (self,main):
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+
+ link_sleep = int(main.params['timers']['LinkDiscovery'])
+
+ main.log.report("This testscase is killing a link to ensure that link discovery is consistent")
+ main.log.report("__________________________________")
+ main.log.report("Killing a link to ensure that link discovery is consistent")
+ main.case("Killing a link to Ensure that Link Discovery is Working Properly")
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+
+ main.step("Determine the current number of switches and links")
+ topology_output = main.ONOS2.topology()
+ topology_result = main.ONOS1.get_topology(topology_output)
+ activeSwitches = topology_result['devices']
+ links = topology_result['links']
+ print "activeSwitches = ", type(activeSwitches)
+ print "links = ", type(links)
+ main.log.info("Currently there are %s switches and %s links" %(str(activeSwitches), str(links)))
+
+ main.step("Kill Link between s3 and s28")
+ main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
+ time.sleep(link_sleep)
+ topology_output = main.ONOS2.topology()
+ Link_Down = main.ONOS1.check_status(topology_output,activeSwitches,str(int(links)-2))
+ if Link_Down == main.TRUE:
+ main.log.report("Link Down discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Down,
+ onpass="Link Down discovered properly",
+ onfail="Link down was not discovered in "+ str(link_sleep) + " seconds")
+
+ #Check ping result here..add code for it
+
+ main.step("Bring link between s3 and s28 back up")
+ Link_Up = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
+ time.sleep(link_sleep)
+ topology_output = main.ONOS2.topology()
+ Link_Up = main.ONOS1.check_status(topology_output,activeSwitches,str(links))
+ if Link_Up == main.TRUE:
+ main.log.report("Link up discovered properly")
+ utilities.assert_equals(expect=main.TRUE,actual=Link_Up,
+ onpass="Link up discovered properly",
+ onfail="Link up was not discovered in "+ str(link_sleep) + " seconds")
+
+ #Check ping result here..add code for it
+ main.step("Start continuous pings")
+
+ main.Mininet2.pingLong(src=main.params['PING']['source1'],
+ target=main.params['PING']['target1'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source2'],
+ target=main.params['PING']['target2'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source3'],
+ target=main.params['PING']['target3'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source4'],
+ target=main.params['PING']['target4'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source5'],
+ target=main.params['PING']['target5'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source6'],
+ target=main.params['PING']['target6'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source7'],
+ target=main.params['PING']['target7'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source8'],
+ target=main.params['PING']['target8'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source9'],
+ target=main.params['PING']['target9'],pingTime=500)
+ main.Mininet2.pingLong(src=main.params['PING']['source10'],
+ target=main.params['PING']['target10'],pingTime=500)
+
+ main.step("Compare ONOS Topology to MN Topology")
+ Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+ MNTopo = Topo
+ Topology_Check = main.TRUE
+
+ devices_json = main.ONOS2.devices()
+ links_json = main.ONOS2.links()
+ ports_json = main.ONOS2.ports()
+ print "devices_json= ", devices_json
+
+ result1 = main.Mininet1.compare_switches(MNTopo, json.loads(devices_json))
+ result2 = main.Mininet1.compare_links(MNTopo, json.loads(links_json))
+ #result3 = main.Mininet1.compare_ports(MNTopo, json.loads(ports_json))
+
+ #result = result1 and result2 and result3
+ result = result1 and result2
+ print "***********************"
+
+ if result == main.TRUE:
+ main.log.report("ONOS"+ " Topology matches MN Topology")
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="ONOS" + " Topology matches MN Topology",
+ onfail="ONOS" + " Topology does not match MN Topology")
+
+ Topology_Check = Topology_Check and result
+ utilities.assert_equals(expect=main.TRUE,actual=Topology_Check,
+ onpass="Topology checks passed", onfail="Topology checks failed")
+
+ result = Link_Down and Link_Up and Topology_Check
+ utilities.assert_equals(expect=main.TRUE,actual=result,
+ onpass="Link failure is discovered correctly",
+ onfail="Link Discovery failed")
+
+
+ def CASE8(self):
+ '''
+ Host intents removal
+ '''
+ main.log.report("This testcase removes host intents before adding the point intents")
+ main.log.report("__________________________________")
+ main.log.info("Host intents removal")
+ main.case("Removing host intents")
+ main.step("Obtain the intent id's")
+ intent_result = main.ONOS2.intents()
+ #print "intent_result = ",intent_result
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+ #for line in intent_linewise:
+ #print "line = ", line
+ intentids = []
+ for line in intent_linewise:
+ intentids.append(line.split(",")[0].split("=")[1])
+ for id in intentids:
+ print "id = ", id
+
+ main.step("Iterate through the intentids list and remove each intent")
+ for id in intentids:
+ main.ONOS2.remove_intent(intent_id = id)
+
+ intent_result = main.ONOS2.intents()
+ intent_linewise = intent_result.split("\n")
+ intent_linewise = intent_linewise[1:-1] #ignore the first and last item of the list obtained from split
+
+ intentState = {}
+ for id, line in zip(intentids, intent_linewise):
+ #print "line after removing intent = ", line
+ x = line.split(",")
+ state = x[1].split("=")[1]
+ intentState[id] = state
+
+ case8_result = main.TRUE
+ for key,value in intentState.iteritems():
+ print "key,value = ", key, value
+ if value == "WITHDRAWN":
+ case8_result = case8_result and main.TRUE
+ else:
+ case8_result = case8_result and main.FALSE
+
+ if case8_result == main.TRUE:
+ main.log.report("Intent removal successful")
+ else:
+ main.log.report("Intent removal failed")
+
+ utilities.assert_equals(expect=main.TRUE, actual=case8_result,
+ onpass="Intent removal test successful",
+ onfail="Intent removal test failed")
+
+
+
+
+
+ def CASE9(self):
+ main.log.report("This testcase adds point intents and then does pingall")
+ main.log.report("__________________________________")
+ main.log.info("Adding point intents")
+ main.case("Adding bidirectional point for mn hosts(h8-h18,h9-h19,h10-h20,h11-h21,h12-h22,h13-h23,h14-h24,h15-h25,h16-h26,h17-h27)")
+ main.step("Add point-to-point intents for mininet hosts h8 and h18 or ONOS hosts h8 and h12")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003008", 1, "of:0000000000006018", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006018", 1, "of:0000000000003008", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h9 and h19 or ONOS hosts h9 and h13")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003009", 1, "of:0000000000006019", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006019", 1, "of:0000000000003009", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h10 and h20 or ONOS hosts hA and h14")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003010", 1, "of:0000000000006020", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006020", 1, "of:0000000000003010", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h11 and h21 or ONOS hosts hB and h15")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003011", 1, "of:0000000000006021", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006021", 1, "of:0000000000003011", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h12 and h22 or ONOS hosts hC and h16")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003012", 1, "of:0000000000006022", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006022", 1, "of:0000000000003012", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h13 and h23 or ONOS hosts hD and h17")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003013", 1, "of:0000000000006023", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006023", 1, "of:0000000000003013", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h14 and h24 or ONOS hosts hE and h18")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003014", 1, "of:0000000000006024", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006024", 1, "of:0000000000003014", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h15 and h25 or ONOS hosts hF and h19")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003015", 1, "of:0000000000006025", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006025", 1, "of:0000000000003015", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ main.step("Add point-to-point intents for mininet hosts h16 and h26 or ONOS hosts h10 and h1A")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003016", 1, "of:0000000000006026", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006026", 1, "of:0000000000003016", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+
+ main.step("Add point-to-point intents for mininet hosts h17 and h27 or ONOS hosts h11 and h1B")
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000003017", 1, "of:0000000000006027", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ ptp_intent_result = main.ONOS2.add_point_intent("of:0000000000006027", 1, "of:0000000000003017", 1)
+ if ptp_intent_result == main.TRUE:
+ get_intent_result = main.ONOS2.intents()
+ main.log.info("Point to point intent install successful")
+ main.log.info(get_intent_result)
+
+ print("_______________________________________________________________________________________")
+
+ flowHandle = main.ONOS2.flows()
+ #print "flowHandle = ", flowHandle
+ main.log.info("flows :" + flowHandle)
+
+ count = 1
+ i = 8
+ Ping_Result = main.TRUE
+ while i <18 :
+ main.log.info("\n\nh"+str(i)+" is Pinging h" + str(i+10))
+ ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+10))
+ if ping == main.FALSE and count <5:
+ count+=1
+ #i = 8
+ Ping_Result = main.FALSE
+ main.log.report("Ping between h" + str(i) + " and h" + str(i+10) + " failed. Making attempt number "+str(count) + " in 2 seconds")
+ time.sleep(2)
+ elif ping==main.FALSE:
+ main.log.report("All ping attempts between h" + str(i) + " and h" + str(i+10) +"have failed")
+ i=19
+ Ping_Result = main.FALSE
+ elif ping==main.TRUE:
+ main.log.info("Ping test between h" + str(i) + " and h" + str(i+10) + "passed!")
+ i+=1
+ Ping_Result = main.TRUE
+ else:
+ main.log.info("Unknown error")
+ Ping_Result = main.ERROR
+
+ if Ping_Result==main.FALSE:
+ main.log.report("Point intents have not ben installed correctly. Cleaning up")
+ #main.cleanup()
+ #main.exit()
+ if Ping_Result==main.TRUE:
+ main.log.report("Point Intents have been installed correctly")
+
+ case9_result = Ping_Result
+ utilities.assert_equals(expect=main.TRUE, actual=case9_result,
+ onpass="Point intents addition and Pingall Test successful",
+ onfail="Point intents addition and Pingall Test NOT successful")
+
+
diff --git a/TestON/tests/ProdFunc13/ProdFunc13.topo b/TestON/tests/ProdFunc13/ProdFunc13.topo
new file mode 100755
index 0000000..cf6ffac
--- /dev/null
+++ b/TestON/tests/ProdFunc13/ProdFunc13.topo
@@ -0,0 +1,61 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1>
+ <host>10.128.10.11</host>
+ <user>sdn</user>
+ <password>sdn</password>
+ <type>OnosDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <Mininet1>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ <Mininet2>
+ <host>10.128.10.11</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>RemoteMininetDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS>
+ #Specify the Option for mininet
+ <arg1> --custom ~/mininet/custom/topo-HA.py </arg1>
+ <arg2> --topo mytopo </arg2>
+ <arg3> --switch ovs,protocols=OpenFlow13 </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet2>
+ </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/TopoConvNext/TopoConvNext.params b/TestON/tests/TopoConvNext/TopoConvNext.params
new file mode 100644
index 0000000..0fa28fa
--- /dev/null
+++ b/TestON/tests/TopoConvNext/TopoConvNext.params
@@ -0,0 +1,59 @@
+<PARAMS>
+ <testcases>1,2,3,2</testcases>
+
+ <ENV>
+ <cellName>topo_conv_test</cellName>
+ </ENV>
+
+ <GIT>
+ #autoPull 'on' or 'off'
+ <autoPull>off</autoPull>
+ <checkout>master</checkout>
+ </GIT>
+
+ <CTRL>
+ <user>admin</user>
+ <ip1>10.128.174.1</ip1>
+ <port1>6633</port1>
+ <ip2>10.128.174.2</ip2>
+ <port2>6633</port2>
+ <ip3>10.128.174.3</ip3>
+ <port3>6633</port3>
+ <ip4>10.128.174.4</ip4>
+ <port4>6633</port4>
+ <ip5>10.128.174.5</ip5>
+ <port5>6633</port5>
+ <ip6>10.128.174.6</ip6>
+ <port6>6633</port6>
+ <ip7>10.128.174.7</ip7>
+ <port7>6633</port7>
+ </CTRL>
+
+ <MN>
+ <ip1>10.128.10.90</ip1>
+ <ip2>10.128.10.91</ip2>
+ </MN>
+
+ <BENCH>
+ <ip>10.128.174.10</ip>
+ </BENCH>
+
+ <TEST>
+ <onosLogFile>/opt/onos/log/karaf*</onosLogFile>
+
+ #Number of times to iterate each case
+ <numIter>5</numIter>
+ <numSwitch>100</numSwitch>
+ #Number of iterations to ignore initially
+ <iterIgnore>2</iterIgnore>
+
+ <swDisc100Threshold>0,100000</swDisc100Threshold>
+ </TEST>
+
+ <JSON>
+ <deviceTimestamp>topologyDeviceEventTimestamp</deviceTimestamp>
+ <hostTimestamp>topologyHostEventTimestamp</hostTimestamp>
+ <linkTimestamp>topologyLinkEventTimestamp</linkTimestamp>
+ <graphTimestamp>topologyGraphEventTimestamp</graphTimestamp>
+ </JSON>
+</PARAMS>
diff --git a/TestON/tests/TopoConvNext/TopoConvNext.py b/TestON/tests/TopoConvNext/TopoConvNext.py
new file mode 100644
index 0000000..a2bb6e8
--- /dev/null
+++ b/TestON/tests/TopoConvNext/TopoConvNext.py
@@ -0,0 +1,821 @@
+#TopoPerfNext
+#
+#Topology Convergence scale-out test for ONOS-next
+#NOTE: This test supports up to 7 nodes scale-out scenario
+#
+#andrew@onlab.us
+
+import time
+import sys
+import os
+import re
+
+class TopoConvNext:
+ def __init__(self):
+ self.default = ''
+
+ def CASE1(self, main):
+ '''
+ ONOS startup sequence
+ '''
+ import time
+
+ #******
+ #Global cluster count for scale-out purposes
+ global cluster_count
+ cluster_count = 1
+ #******
+ cell_name = main.params['ENV']['cellName']
+
+ git_pull = main.params['GIT']['autoPull']
+ checkout_branch = main.params['GIT']['checkout']
+
+ ONOS1_ip = main.params['CTRL']['ip1']
+ ONOS2_ip = main.params['CTRL']['ip2']
+ ONOS3_ip = main.params['CTRL']['ip3']
+ ONOS4_ip = main.params['CTRL']['ip4']
+ ONOS5_ip = main.params['CTRL']['ip5']
+ ONOS6_ip = main.params['CTRL']['ip6']
+ ONOS7_ip = main.params['CTRL']['ip7']
+ MN1_ip = main.params['MN']['ip1']
+ BENCH_ip = main.params['BENCH']['ip']
+
+ main.case("Setting up test environment")
+ main.log.report("Setting up test environment")
+
+ main.step("Creating cell file")
+ cell_file_result = main.ONOSbench.create_cell_file(
+ BENCH_ip, cell_name, MN1_ip, "onos-core",
+ ONOS1_ip, ONOS2_ip, ONOS3_ip, ONOS4_ip,
+ ONOS5_ip, ONOS6_ip, ONOS7_ip)
+
+ main.step("Applying cell file to environment")
+ cell_apply_result = main.ONOSbench.set_cell(cell_name)
+ verify_cell_result = main.ONOSbench.verify_cell()
+
+ main.step("Git checkout and pull "+checkout_branch)
+ if git_pull == 'on':
+ checkout_result = \
+ main.ONOSbench.git_checkout(checkout_branch)
+ pull_result = main.ONOSbench.git_pull()
+ else:
+ checkout_result = main.TRUE
+ pull_result = main.TRUE
+ main.log.info("Skipped git checkout and pull")
+
+ main.step("Using mvn clean & install")
+ #mvn_result = main.ONOSbench.clean_install()
+ mvn_result = main.TRUE
+
+ main.step("Set cell for ONOS cli env")
+ main.ONOS1cli.set_cell(cell_name)
+ main.ONOS2cli.set_cell(cell_name)
+ main.ONOS3cli.set_cell(cell_name)
+ main.ONOS4cli.set_cell(cell_name)
+ main.ONOS5cli.set_cell(cell_name)
+ main.ONOS6cli.set_cell(cell_name)
+ main.ONOS7cli.set_cell(cell_name)
+
+ main.step("Creating ONOS package")
+ package_result = main.ONOSbench.onos_package()
+
+ #Start test with single node only
+ main.step("Installing ONOS package")
+ install1_result = main.ONOSbench.onos_install(node=ONOS1_ip)
+
+ time.sleep(10)
+
+ main.step("Start onos cli")
+ cli1 = main.ONOS1cli.start_onos_cli(ONOS1_ip)
+
+ main.step("Enable metrics feature")
+ main.ONOS1cli.feature_install("onos-app-metrics")
+
+ utilities.assert_equals(expect=main.TRUE,
+ actual= cell_file_result and cell_apply_result and\
+ verify_cell_result and checkout_result and\
+ pull_result and mvn_result and\
+ install1_result,
+ onpass="Test Environment setup successful",
+ onfail="Failed to setup test environment")
+
+ def CASE2(self, main):
+ '''
+ 100 Switch discovery latency
+
+ Important:
+ This test case can be potentially dangerous if
+ your machine has previously set iptables rules.
+ One of the steps of the test case will flush
+ all existing iptables rules.
+ Note:
+ You can specify the number of switches in the
+ params file to adjust the switch discovery size
+ (and specify the corresponding topology in Mininet1
+ .topo file)
+ '''
+ import time
+ import subprocess
+ import os
+ import requests
+ import json
+ import numpy
+
+ ONOS_ip_list = []
+ ONOS_ip_list.append('0')
+ ONOS_ip_list.append(main.params['CTRL']['ip1'])
+ ONOS_ip_list.append(main.params['CTRL']['ip2'])
+ ONOS_ip_list.append(main.params['CTRL']['ip3'])
+ ONOS_ip_list.append(main.params['CTRL']['ip4'])
+ ONOS_ip_list.append(main.params['CTRL']['ip5'])
+ ONOS_ip_list.append(main.params['CTRL']['ip6'])
+ ONOS_ip_list.append(main.params['CTRL']['ip7'])
+ MN1_ip = main.params['MN']['ip1']
+ ONOS_user = main.params['CTRL']['user']
+
+ default_sw_port = main.params['CTRL']['port1']
+
+ #Number of iterations of case
+ num_iter = main.params['TEST']['numIter']
+ num_sw = main.params['TEST']['numSwitch']
+
+ #Timestamp 'keys' for json metrics output.
+ #These are subject to change, hence moved into params
+ deviceTimestamp = main.params['JSON']['deviceTimestamp']
+ graphTimestamp = main.params['JSON']['graphTimestamp']
+
+ #Threshold for this test case
+ sw_disc_threshold_str = main.params['TEST']['swDisc100Threshold']
+ sw_disc_threshold_obj = sw_disc_threshold_str.split(",")
+ sw_disc_threshold_min = int(sw_disc_threshold_obj[0])
+ sw_disc_threshold_max = int(sw_disc_threshold_obj[1])
+
+ assertion = main.TRUE
+ sw_discovery_lat_list = []
+
+ main.case(str(num_sw)+" switch per "+str(cluster_count)+
+ " nodes convergence latency")
+
+ main.log.report("Currently active ONOS node(s): ")
+ report_str = "Node "
+ for node in range(1, cluster_count+1):
+ report_str += (str(node) + " ")
+ main.log.report(report_str)
+
+ main.step("Assigning "+num_sw+" switches to each ONOS")
+ index = 1
+ for node in range(1, cluster_count+1):
+ for i in range(index, int(num_sw)+index):
+ main.Mininet1.assign_sw_controller(
+ sw=str(i),
+ ip1=ONOS_ip_list[node],
+ port1=default_sw_port)
+ index = i+1
+
+ main.log.info("Please check ptpd configuration to ensure "+\
+ "all nodes' system times are in sync")
+
+ time.sleep(10)
+
+ for i in range(0, int(num_iter)):
+ main.step("Set iptables rule to block sw connections")
+
+ #INPUT rules
+ main.ONOS1.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS2.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS3.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS4.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS5.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS6.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS7.handle.sendline(
+ "sudo iptables -A INPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+
+ #OUTPUT rules
+ main.ONOS1.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS2.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS3.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS4.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS5.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS6.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+ main.ONOS7.handle.sendline(
+ "sudo iptables -A OUTPUT -p tcp -s "+
+ MN1_ip+" --dport "+default_sw_port+" -j DROP")
+
+ main.log.info("Please wait for switch connection to timeout")
+ time.sleep(60)
+
+ main.step("Flushing iptables and obtaining t0")
+ t0_system = time.time()*1000
+ main.ONOS1.handle.sendline("sudo iptables -F")
+ main.ONOS2.handle.sendline("sudo iptables -F")
+ main.ONOS3.handle.sendline("sudo iptables -F")
+ main.ONOS4.handle.sendline("sudo iptables -F")
+ main.ONOS5.handle.sendline("sudo iptables -F")
+ main.ONOS6.handle.sendline("sudo iptables -F")
+ main.ONOS7.handle.sendline("sudo iptables -F")
+
+ counter_loop = 0
+ counter_avail1 = 0
+ counter_avail2 = 0
+ counter_avail3 = 0
+ counter_avail4 = 0
+ counter_avail5 = 0
+ counter_avail6 = 0
+ counter_avail7 = 0
+ onos1_dev = False
+ onos2_dev = False
+ onos3_dev = False
+ onos4_dev = False
+ onos5_dev = False
+ onos6_dev = False
+ onos7_dev = False
+
+ #TODO: Think of a more elegant way to check all
+ # switches across all nodes
+ #Goodluck debugging this loop
+ while counter_loop < 60:
+ for node in range(1, cluster_count+1):
+ if node == 1 and not onos1_dev:
+ device_str_obj1 = main.ONOS1cli.devices()
+ device_json1 = json.loads(device_str_obj1)
+ for device1 in device_json1:
+ if device1['available'] == True:
+ counter_avail1 += 1
+ if counter_avail1 == int(num_sw):
+ onos1_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS1")
+ else:
+ counter_avail1 = 0
+ if node == 2 and not onos2_dev:
+ device_str_obj2 = main.ONOS2cli.devices()
+ device_json2 = json.loads(device_str_obj2)
+ for device2 in device_json2:
+ if device2['available'] == True:
+ counter_avail2 += 1
+ if counter_avail2 == int(num_sw):
+ onos2_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS2")
+ else:
+ counter_avail2 = 0
+ if node == 3 and not onos3_dev:
+ device_str_obj3 = main.ONOS3cli.devices()
+ device_json3 = json.loads(device_str_obj3)
+ for device3 in device_json3:
+ if device3['available'] == True:
+ counter_avail3 += 1
+ if counter_avail3 == int(num_sw):
+ onos3_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS3")
+ else:
+ counter_avail3 = 0
+ if node == 4 and not onos4_dev:
+ device_str_obj4 = main.ONOS4cli.devices()
+ device_json4 = json.loads(device_str_obj4)
+ for device4 in device_json4:
+ if device4['available'] == True:
+ counter_avail4 += 1
+ if counter_avail4 == int(num_sw):
+ onos4_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS4")
+ else:
+ counter_avail4 = 0
+ if node == 5 and not onos5_dev:
+ device_str_obj5 = main.ONOS5cli.devices()
+ device_json5 = json.loads(device_str_obj5)
+ for device5 in device_json5:
+ if device5['available'] == True:
+ counter_avail5 += 1
+ if counter_avail5 == int(num_sw):
+ onos5_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS5")
+ else:
+ counter_avail5 = 0
+ if node == 6 and not onos6_dev:
+ device_str_obj6 = main.ONOS6cli.devices()
+ device_json6 = json.loads(device_str_obj6)
+ for device6 in device_json6:
+ if device6['available'] == True:
+ counter_avail6 += 1
+ if counter_avail6 == int(num_sw):
+ onos6_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS6")
+ else:
+ counter_avail6 = 0
+ if node == 7 and not onos7_dev:
+ device_str_obj7 = main.ONOS7cli.devices()
+ device_json7 = json.loads(device_str_obj7)
+ for device7 in device_json7:
+ if device7['available'] == True:
+ counter_avail7 += 1
+ if counter_avail7 == int(num_sw):
+ onos7_dev = True
+ main.log.info("All devices have been"+
+ " discovered on ONOS7")
+ else:
+ counter_avail7 = 0
+ #END node loop
+
+ #TODO: clean up this mess of an if statements if possible
+ #Treat each if as a separate test case with the given
+ # cluster count. Hence when the cluster count changes
+ # the desired calculations will be made
+ if cluster_count == 1:
+ if onos1_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+
+ if graph_lat_1 > sw_disc_threshold_min\
+ and graph_lat_1 < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ graph_lat_1)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(graph_lat_1)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ #Break while loop
+ break
+ if cluster_count == 2:
+ if onos1_dev and onos2_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2)) / 2
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+ if cluster_count == 3:
+ if onos1_dev and onos2_dev and onos3_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_str_metrics_3 =\
+ main.ONOS3cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ json_obj_3 = json.loads(json_str_metrics_3)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+ graph_timestamp_3 =\
+ json_obj_3[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+ graph_lat_3 = \
+ int(graph_timestamp_3) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2) +\
+ int(graph_lat_3)) / 3
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+ if cluster_count == 4:
+ if onos1_dev and onos2_dev and onos3_dev and\
+ onos4_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_str_metrics_3 =\
+ main.ONOS3cli.topology_events_metrics()
+ json_str_metrics_4 =\
+ main.ONOS4cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ json_obj_3 = json.loads(json_str_metrics_3)
+ json_obj_4 = json.loads(json_str_metrics_4)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+ graph_timestamp_3 =\
+ json_obj_3[graphTimestamp]['value']
+ graph_timestamp_4 =\
+ json_obj_4[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+ graph_lat_3 = \
+ int(graph_timestamp_3) - int(t0_system)
+ graph_lat_4 = \
+ int(graph_timestamp_4) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2) +\
+ int(graph_lat_3) +\
+ int(graph_lat_4)) / 4
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+ if cluster_count == 5:
+ if onos1_dev and onos2_dev and onos3_dev and\
+ onos4_dev and onos5_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_str_metrics_3 =\
+ main.ONOS3cli.topology_events_metrics()
+ json_str_metrics_4 =\
+ main.ONOS4cli.topology_events_metrics()
+ json_str_metrics_5 =\
+ main.ONOS5cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ json_obj_3 = json.loads(json_str_metrics_3)
+ json_obj_4 = json.loads(json_str_metrics_4)
+ json_obj_5 = json.loads(json_str_metrics_5)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+ graph_timestamp_3 =\
+ json_obj_3[graphTimestamp]['value']
+ graph_timestamp_4 =\
+ json_obj_4[graphTimestamp]['value']
+ graph_timestamp_5 =\
+ json_obj_5[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+ graph_lat_3 = \
+ int(graph_timestamp_3) - int(t0_system)
+ graph_lat_4 = \
+ int(graph_timestamp_4) - int(t0_system)
+ graph_lat_5 = \
+ int(graph_timestamp_5) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2) +\
+ int(graph_lat_3) +\
+ int(graph_lat_4) +\
+ int(graph_lat_5)) / 5
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+ if cluster_count == 6:
+ if onos1_dev and onos2_dev and onos3_dev and\
+ onos4_dev and onos5_dev and onos6_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_str_metrics_3 =\
+ main.ONOS3cli.topology_events_metrics()
+ json_str_metrics_4 =\
+ main.ONOS4cli.topology_events_metrics()
+ json_str_metrics_5 =\
+ main.ONOS5cli.topology_events_metrics()
+ json_str_metrics_6 =\
+ main.ONOS6cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ json_obj_3 = json.loads(json_str_metrics_3)
+ json_obj_4 = json.loads(json_str_metrics_4)
+ json_obj_5 = json.loads(json_str_metrics_5)
+ json_obj_6 = json.loads(json_str_metrics_6)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+ graph_timestamp_3 =\
+ json_obj_3[graphTimestamp]['value']
+ graph_timestamp_4 =\
+ json_obj_4[graphTimestamp]['value']
+ graph_timestamp_5 =\
+ json_obj_5[graphTimestamp]['value']
+ graph_timestamp_6 =\
+ json_obj_6[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+ graph_lat_3 = \
+ int(graph_timestamp_3) - int(t0_system)
+ graph_lat_4 = \
+ int(graph_timestamp_4) - int(t0_system)
+ graph_lat_5 = \
+ int(graph_timestamp_5) - int(t0_system)
+ graph_lat_6 = \
+ int(graph_timestamp_6) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2) +\
+ int(graph_lat_3) +\
+ int(graph_lat_4) +\
+ int(graph_lat_5) +\
+ int(graph_lat_6)) / 6
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+ if cluster_count == 7:
+ if onos1_dev and onos2_dev and onos3_dev and\
+ onos4_dev and onos5_dev and onos6_dev and\
+ onos7_dev:
+ main.log.info("All devices have been discovered"+
+ " on all ONOS instances")
+ json_str_metrics_1 =\
+ main.ONOS1cli.topology_events_metrics()
+ json_str_metrics_2 =\
+ main.ONOS2cli.topology_events_metrics()
+ json_str_metrics_3 =\
+ main.ONOS3cli.topology_events_metrics()
+ json_str_metrics_4 =\
+ main.ONOS4cli.topology_events_metrics()
+ json_str_metrics_5 =\
+ main.ONOS5cli.topology_events_metrics()
+ json_str_metrics_6 =\
+ main.ONOS6cli.topology_events_metrics()
+ json_str_metrics_7 =\
+ main.ONOS7cli.topology_events_metrics()
+ json_obj_1 = json.loads(json_str_metrics_1)
+ json_obj_2 = json.loads(json_str_metrics_2)
+ json_obj_3 = json.loads(json_str_metrics_3)
+ json_obj_4 = json.loads(json_str_metrics_4)
+ json_obj_5 = json.loads(json_str_metrics_5)
+ json_obj_6 = json.loads(json_str_metrics_6)
+ json_obj_7 = json.loads(json_str_metrics_7)
+ graph_timestamp_1 =\
+ json_obj_1[graphTimestamp]['value']
+ graph_timestamp_2 =\
+ json_obj_2[graphTimestamp]['value']
+ graph_timestamp_3 =\
+ json_obj_3[graphTimestamp]['value']
+ graph_timestamp_4 =\
+ json_obj_4[graphTimestamp]['value']
+ graph_timestamp_5 =\
+ json_obj_5[graphTimestamp]['value']
+ graph_timestamp_6 =\
+ json_obj_6[graphTimestamp]['value']
+ graph_timestamp_7 =\
+ json_obj_7[graphTimestamp]['value']
+
+ graph_lat_1 = \
+ int(graph_timestamp_1) - int(t0_system)
+ graph_lat_2 = \
+ int(graph_timestamp_2) - int(t0_system)
+ graph_lat_3 = \
+ int(graph_timestamp_3) - int(t0_system)
+ graph_lat_4 = \
+ int(graph_timestamp_4) - int(t0_system)
+ graph_lat_5 = \
+ int(graph_timestamp_5) - int(t0_system)
+ graph_lat_6 = \
+ int(graph_timestamp_6) - int(t0_system)
+ graph_lat_7 = \
+ int(graph_timestamp_7) - int(t0_system)
+
+ avg_graph_lat = \
+ (int(graph_lat_1) +\
+ int(graph_lat_2) +\
+ int(graph_lat_3) +\
+ int(graph_lat_4) +\
+ int(graph_lat_5) +\
+ int(graph_lat_6) +\
+ int(graph_lat_7)) / 7
+
+ if avg_graph_lat > sw_disc_threshold_min\
+ and avg_graph_lat < sw_disc_threshold_max:
+ sw_discovery_lat_list.append(
+ avg_graph_lat)
+ main.log.info("Sw discovery latency of "+
+ str(cluster_count)+" node(s): "+
+ str(avg_graph_lat)+" ms")
+ else:
+ main.log.info("Switch discovery latency "+
+ "exceeded the threshold.")
+
+ break
+
+ counter_loop += 1
+ time.sleep(3)
+ #END WHILE LOOP
+ #END ITERATION LOOP
+ #REPORT HERE
+
+ if len(sw_discovery_lat_list) > 0:
+ sw_lat_avg = sum(sw_discovery_lat_list) / \
+ len(sw_discovery_lat_list)
+ sw_lat_dev = numpy.std(sw_discovery_lat_list)
+ else:
+ assertion = main.FALSE
+
+ main.log.report("Switch discovery lat for "+\
+ str(cluster_count)+" instances, 100 sw each: ")
+ main.log.report("Avg: "+str(sw_lat_avg)+" ms")
+ main.log.report("Std Deviation: "+str(sw_lat_dev)+" ms")
+
+ utilities.assert_equals(expect=main.TRUE, actual=assertion,
+ onpass="Switch discovery convergence latency" +\
+ " for "+str(cluster_count)+" nodes successful",
+ onfail="Switch discovery convergence latency" +\
+ " test failed")
+
+
+ def CASE3(self, main):
+ '''
+ Increase number of nodes and initiate CLI
+ '''
+ import time
+ import subprocess
+ import os
+ import requests
+ import json
+
+ ONOS_ip_list = []
+ ONOS_ip_list.append('0') #Append 0 for index 0
+ ONOS_ip_list.append(main.params['CTRL']['ip1'])
+ ONOS_ip_list.append(main.params['CTRL']['ip2'])
+ ONOS_ip_list.append(main.params['CTRL']['ip3'])
+ ONOS_ip_list.append(main.params['CTRL']['ip4'])
+ ONOS_ip_list.append(main.params['CTRL']['ip5'])
+ ONOS_ip_list.append(main.params['CTRL']['ip6'])
+ ONOS_ip_list.append(main.params['CTRL']['ip7'])
+
+ MN1_ip = main.params['MN']['ip1']
+ BENCH_ip = main.params['BENCH']['ip']
+
+ #NOTE:We start with cluster_count at 1. The first
+ #case already initialized ONOS1. Increase the
+ #cluster count and start from 2.
+ #You can optionally change the increment to
+ #test steps of node sizes, such as 1,3,5,7
+
+ global cluster_count
+ cluster_count += 2
+
+ #Supports up to 7 node configuration
+ for node in range(1, cluster_count+1):
+ if node == 2:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS2cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS2cli.feature_install("onos-app-metrics")
+ elif node == 3:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS3cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS3cli.feature_install("onos-app-metrics")
+ elif node == 4:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS4cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS4cli.feature_install("onos-app-metrics")
+ elif node == 5:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS5cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS5cli.feature_install("onos-app-metrics")
+ elif node == 6:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS6cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS6cli.feature_install("onos-app-metrics")
+ elif node == 7:
+ main.log.info("Starting CLI for instance "+
+ ONOS_ip_list[node])
+ main.ONOS7cli.start_onos_cli(ONOS_ip_list[node])
+ main.log.info("Installing metrics feature")
+ main.ONOS7cli.feature_install("onos-app-metrics")
+ time.sleep(5)
+
+
+
+
+
diff --git a/TestON/tests/TopoConvNext/TopoConvNext.topo b/TestON/tests/TopoConvNext/TopoConvNext.topo
new file mode 100644
index 0000000..855e688
--- /dev/null
+++ b/TestON/tests/TopoConvNext/TopoConvNext.topo
@@ -0,0 +1,163 @@
+<TOPOLOGY>
+ <COMPONENT>
+
+ <ONOSbench>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>1</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOSbench>
+
+ <ONOS1cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>2</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1cli>
+
+ <ONOS2cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>3</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2cli>
+
+ <ONOS3cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>4</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3cli>
+
+ <ONOS4cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>5</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4cli>
+
+ <ONOS5cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>6</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5cli>
+
+ <ONOS6cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>7</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6cli>
+
+ <ONOS7cli>
+ <host>10.128.174.10</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosCliDriver</type>
+ <connect_order>8</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7cli>
+
+ <ONOS1>
+ <host>10.128.174.1</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>9</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS1>
+
+ <ONOS2>
+ <host>10.128.174.2</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>10</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS2>
+
+ <ONOS3>
+ <host>10.128.174.3</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>11</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS3>
+
+ <ONOS4>
+ <host>10.128.174.4</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>12</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS4>
+
+ <ONOS5>
+ <host>10.128.174.5</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>13</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS5>
+
+ <ONOS6>
+ <host>10.128.174.6</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>14</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS6>
+
+ <ONOS7>
+ <host>10.128.174.7</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>OnosDriver</type>
+ <connect_order>15</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </ONOS7>
+
+ <Mininet1>
+ <host>10.128.10.90</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>MininetCliDriver</type>
+ <connect_order>16</connect_order>
+ <COMPONENTS>
+ <arg1> --custom topo-700sw.py </arg1>
+ <arg2> --arp --mac --topo mytopo</arg2>
+ <arg3> </arg3>
+ <controller> remote </controller>
+ </COMPONENTS>
+ </Mininet1>
+
+ <Mininet2>
+ <host>10.128.10.90</host>
+ <user>admin</user>
+ <password>onos_test</password>
+ <type>RemoteMininetDriver</type>
+ <connect_order>17</connect_order>
+ <COMPONENTS> </COMPONENTS>
+ </Mininet2>
+
+ </COMPONENT>
+</TOPOLOGY>