adding TestON
diff --git a/TestON/tests/CassandraCheck/.OnosSanity.py.swp b/TestON/tests/CassandraCheck/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/CassandraCheck/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/CassandraCheck/CassandraCheck.params b/TestON/tests/CassandraCheck/CassandraCheck.params
new file mode 100644
index 0000000..ef3c9ba
--- /dev/null
+++ b/TestON/tests/CassandraCheck/CassandraCheck.params
@@ -0,0 +1,9 @@
+<PARAMS>
+    <testcases>3</testcases>
+    <Iterations>2</Iterations>
+    <WaitTime>20</WaitTime>
+    <TargetTime>20</TargetTime>
+    <RestIP>10.128.4.11</RestIP>
+    <NR_Switches>405</NR_Switches>
+    <NR_Links>802</NR_Links>
+</PARAMS>      
diff --git a/TestON/tests/CassandraCheck/CassandraCheck.py b/TestON/tests/CassandraCheck/CassandraCheck.py
new file mode 100644
index 0000000..a05662c
--- /dev/null
+++ b/TestON/tests/CassandraCheck/CassandraCheck.py
@@ -0,0 +1,71 @@
+
+class CassandraCheck:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")
+        main.ONOS1.start()
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS5.start()
+        main.ONOS6.start()
+        main.ONOS7.start()
+        main.ONOS8.start()
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        topoview = main.TRUE
+        if topoview == main.TRUE & data == main.TRUE :
+            data = main.TRUE
+        else:
+            data = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running and has full view of topology",onfail="ONOS didn't start or has fragmented view of topology...")
+
+    def CASE2(self,main) :
+        '''
+        Second case is to stress adding and removing flows to see if it can crash any cassandras
+        '''
+        import time
+        main.case("Adding and deleting flows")
+        main.step("Adding 1008 flows") 
+        #main.ONOS1.add_flow("~/flowdef_files/flowdef_3node_1008.txt")
+        main.ONOS1.add_flow("~/flowdef_files/flowdef_3node_1008.txt")
+        time.sleep(30)
+        main.ONOS1.delete_flow("all") 
+        main.ONOS1.check_for_no_exceptions()
+        test = main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="Cassandra is still good",onfail="Something broke on Cassandra")
+ 
+    def CASE3(self,main) :
+        '''
+        Merely testing if a specific driver call works
+        '''
+        main.case("Checking for exceptions") 
+        main.step("Step 1") 
+        test = main.ONOS1.check_for_no_exceptions()
+        utilities.assert_equals(expect=main.TRUE,actual=test)
+
diff --git a/TestON/tests/CassandraCheck/CassandraCheck.topo b/TestON/tests/CassandraCheck/CassandraCheck.topo
new file mode 100644
index 0000000..41e5854
--- /dev/null
+++ b/TestON/tests/CassandraCheck/CassandraCheck.topo
@@ -0,0 +1,133 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOS1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>4</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>5</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>6</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS4>
+        <ONOS5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS5>
+        <ONOS6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS6>
+        <ONOS7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+        </ONOS7>
+        <ONOS8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+        </ONOS8>
+
+
+        <Zookeeper1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Mininet2>
+            <host>10.128.6.2</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet2>
+        <Mininet3>
+            <host>10.128.6.3</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet3>
+        <Mininet4>
+            <host>10.128.6.4</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet4>
+        <Mininet5>
+            <host>10.128.6.5</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet5>
+        <Mininet6>
+            <host>10.128.6.6</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet6>
+        <Mininet7>
+            <host>10.128.6.7</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet7>
+        <Mininet8>
+            <host>10.128.6.8</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet8>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/CassandraCheck/__init__.py b/TestON/tests/CassandraCheck/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/CassandraCheck/__init__.py
diff --git a/TestON/tests/DpctlTest/.svn/entries b/TestON/tests/DpctlTest/.svn/entries
new file mode 100644
index 0000000..f53a109
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/entries
@@ -0,0 +1,171 @@
+9
+
+dir
+65
+svn://192.168.150.61/OpenFlow/tests/DpctlTest
+svn://192.168.150.61/OpenFlow
+
+
+
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+8b1d8634-a80c-44fc-ab7b-cc53e6f68013
+
+
+
+
+
+
+0
+
+DpctlTest.params
+file
+
+
+
+
+2012-12-05T16:07:55.000000Z
+f26374a423ae2d318acb7462c3887802
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+1079
+
+DpctlTest.py
+file
+
+
+
+
+2012-12-05T16:50:35.000000Z
+f646c2327db5ac1937b062abb72b7943
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+2966
+
+DpctlTest.topo
+file
+
+
+
+
+2012-12-05T16:07:55.000000Z
+39ca1852c671338b5e06a86718cb6e66
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+728
+
+__init__.py
+file
+
+
+
+
+2012-12-05T16:07:55.000000Z
+d41d8cd98f00b204e9800998ecf8427e
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0
+
diff --git a/TestON/tests/DpctlTest/.svn/format b/TestON/tests/DpctlTest/.svn/format
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/format
@@ -0,0 +1 @@
+9
diff --git a/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.params.svn-base b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.params.svn-base
new file mode 100644
index 0000000..bfd1819
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.params.svn-base
@@ -0,0 +1,37 @@
+[PARAMS]
+    'testcases' = '[1,2]'
+    'mail' = 'anilkumar.s@paxterrasolutions.com,paxweb@paxterrasolutions.com'
+    #'log_dir' = '/home/user/Desktop/openflow_logs/'
+    [[CASE1]]
+        'tcpip' = '127.0.0.1'
+        'tcpport' = '6634'
+        'destination' = 'h2'
+        [[[STEP1]]]
+            'tcpip' = '127.0.0.1'
+            'tcpport' = '6634'
+            'inport' = '1'
+            'timeout' = '360'
+            'action' = 'output:2'
+        [[[STEP2]]]
+            'tcpip' = '127.0.0.1'
+            'tcpport' = '6634'
+            'inport' = '2'
+            'timeout' = '360'
+            'action' = 'output:3'
+    [[CASE2]]
+        'tcpip' = '127.0.0.1'
+        'tcpport' = '6634'
+        'destination' = 'h2'
+        [[[STEP1]]]
+            'tcpip' = '127.0.0.1'
+            'tcpport' = '6634'
+            'inport' = '1'
+            'timeout' = '360'
+            'action' = 'output:2'
+        [[[STEP2]]]
+            'tcpip' = '127.0.0.1'
+            'tcpport' = '6634'
+            'inport' = '2'
+            'timeout' = '360'
+            'action' = 'output:3'
+        
diff --git a/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.py.svn-base b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.py.svn-base
new file mode 100644
index 0000000..f5e7cde
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.py.svn-base
@@ -0,0 +1,55 @@
+class DpctlTest:
+    '''
+    Testing of the some basic Dpctl functions included here
+    '''
+    
+    def __init__(self):
+        self.default = ""
+                
+    def CASE1(self,main):
+        '''
+        Test to add the flow configuration by using dpctl and ping the host 
+        '''
+        main.case("DPCTL ping host ")
+        main.step("adding flow for host2 ")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE1']['STEP1']['tcpip'],
+                            tcpport=main.params['CASE1']['STEP1']['tcpport'],
+                            inport=main.params['CASE1']['STEP1']['inport'],
+                            timeout=main.params['CASE1']['STEP1']['timeout'],
+                            action=main.params['CASE1']['STEP1']['action'])
+        main.step("adding another flow for host3")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE1']['STEP2']['tcpip'],
+                            tcpport=main.params['CASE1']['STEP2']['tcpport'],
+                            inport=main.params['CASE1']['STEP2']['inport'],
+                            timeout=main.params['CASE1']['STEP2']['timeout'],
+                            action=main.params['CASE1']['STEP2']['action'])
+        main.step("Ping from h2 to h3")
+        result = main.Mininet1.pingHost(src=main.componentDictionary['DPCTL1']['src'],
+                                        target=main.componentDictionary['DPCTL1']['target'],
+                                        controller=main.componentDictionary['DPCTL1']['controller'])
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Show flow executed",onfail="Show flow execution Failed")
+
+
+    def CASE2(self,main):
+        '''
+        Test to add the flow configuration by using dpctl and show the flow using dpctl  
+        '''
+        main.case("DPCTL show flow ")
+        main.step("adding flow for host2")
+
+        main.DPCTL1.addFlow(tcpip=main.params['CASE2']['STEP1']['tcpip'],
+                            tcpport=main.params['CASE2']['STEP1']['tcpport'],
+                            inport=main.params['CASE2']['STEP1']['inport'],
+                            timeout=main.params['CASE2']['STEP1']['timeout'],
+                            action=main.params['CASE2']['STEP1']['action'])
+        main.step("adding flow for host3")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE2']['STEP2']['tcpip'],
+                            tcpport=main.params['CASE2']['STEP2']['tcpport'],
+                            inport=main.params['CASE2']['STEP2']['inport'],
+                            timeout=main.params['CASE2']['STEP2']['timeout'],
+                            action=main.params['CASE2']['STEP2']['action'])
+        main.step("Execute Show flow ")
+        result = main.DPCTL1.showFlow(tcpip=main.params['CASE2']['tcpip'],tcpport=main.params['CASE2']['tcpport'])
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Show flow executed",onfail="Show flow execution Failed")
+            
+
diff --git a/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.topo.svn-base b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.topo.svn-base
new file mode 100644
index 0000000..77e2591
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/text-base/DpctlTest.topo.svn-base
@@ -0,0 +1,24 @@
+[TOPOLOGY]    
+
+    [[COMPONENT]]
+        [[["Mininet1"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'type' = "Mininet"
+            [[[["COMPONENTS"]]]]
+                # Specify the Option for mininet
+                'topo' = 'single'
+                'topocount' = '3'
+                'switch' = 'ovsk'
+                'controller' = 'remote'
+        [[["DPCTL1"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'test_target' = '1'
+            'type' = 'DPCTL'
+            'src' = 'h2'
+            'target' = 'h3'
+            'controller' = 'c1'
+            [[[["COMPONENTS"]]]]
diff --git a/TestON/tests/DpctlTest/.svn/text-base/__init__.py.svn-base b/TestON/tests/DpctlTest/.svn/text-base/__init__.py.svn-base
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/DpctlTest/.svn/text-base/__init__.py.svn-base
diff --git a/TestON/tests/DpctlTest/DpctlTest.ospk b/TestON/tests/DpctlTest/DpctlTest.ospk
new file mode 100644
index 0000000..c0fd5ff
--- /dev/null
+++ b/TestON/tests/DpctlTest/DpctlTest.ospk
@@ -0,0 +1,19 @@
+CASE 1
+    NAME "DPCTL Ping Host"
+    STEP "Adding flow for host2"
+    ON DPCTL1 DO addFlow USING tcpip AS STEP["tcpip"], tcpport AS STEP["tcpport"], inport AS STEP["inport"] , timeout AS STEP["timeout"], action AS STEP["action"]
+    STEP "Adding Another Flow for Host3"
+    ON DPCTL1 DO addFlow USING tcpip AS STEP["tcpip"], tcpport AS STEP["tcpport"], inport AS STEP["inport"] , timeout AS STEP["timeout"], action AS STEP["action"]
+    STEP "Ping From h2 to h3"
+    ON Mininet1 DO pingHost USING src AS TOPO["DPCTL1"]["src"], target AS TOPO["DPCTL1"]["target"], controller AS TOPO["DPCTL1"]["controller"] AND STORE LAST_RESULT IN result 
+    ASSERT result EQUALS main.TRUE ONPASS "Ping Successful" ONFAIL "Ping failed"
+
+CASE 2
+    NAME "DPCTL Show Flow"
+    STEP "Adding flow for host2"
+    ON DPCTL1 DO addFlow USING tcpip AS STEP["tcpip"], tcpport AS STEP["tcpport"], inport AS STEP["inport"] , timeout AS STEP["timeout"], action AS STEP["action"]
+    STEP "Adding Another Flow for Host3"
+    ON DPCTL1 DO addFlow USING tcpip AS STEP["tcpip"], tcpport AS STEP["tcpport"], inport AS STEP["inport"] , timeout AS STEP["timeout"], action AS STEP["action"]
+    STEP "Execute Show Flow"
+    ON DPCTL1 DO showFlow USING tcpip AS CASE["tcpip"], tcpport AS CASE["tcpport"] AND STORE LAST_RESULT IN result
+    ASSERT result EQUALS main.TRUE ONPASS "SHOW FLOW IS EXECUTED" ONFAIL "Show Flow Execution failed"    
diff --git a/TestON/tests/DpctlTest/DpctlTest.params b/TestON/tests/DpctlTest/DpctlTest.params
new file mode 100644
index 0000000..0cf79e8
--- /dev/null
+++ b/TestON/tests/DpctlTest/DpctlTest.params
@@ -0,0 +1,42 @@
+<PARAMS>
+    <testcases> [1,2] </testcases>
+    <mail> paxweb@paxterrasolutions.com </mail>
+    <CASE1>
+        <tcpip> 127.0.0.1</tcpip>
+        <tcpport> 6634 </tcpport>
+        <destination> h2 </destination>
+        <STEP1>
+            <tcpip> 127.0.0.1 </tcpip>
+            <tcpport> 6634 </tcpport>
+            <inport> 1 </inport>
+            <timeout> 360 </timeout>
+            <action> output:2 </action>
+        </STEP1>
+        <STEP2>
+            <tcpip> 127.0.0.1 </tcpip>
+            <tcpport> 6634 </tcpport>
+            <inport> 2 </inport>
+            <timeout> 360 </timeout>
+            <action> output:3 </action>
+        </STEP2>     
+    </CASE1>
+    <CASE2>
+        <tcpip> 127.0.0.1</tcpip>
+        <tcpport> 6634 </tcpport>
+        <destination> h2 </destination>
+        <STEP1>
+            <tcpip> 127.0.0.1 </tcpip>
+            <tcpport> 6634 </tcpport>
+            <inport> 1 </inport>
+            <timeout> 360 </timeout>
+            <action> output:2 </action>
+        </STEP1>
+        <STEP2>
+            <tcpip> 127.0.0.1 </tcpip>
+            <tcpport> 6634 </tcpport>
+            <inport> 2 </inport>
+            <timeout> 360 </timeout>
+            <action> output:3 </action>
+        </STEP2>     
+    </CASE2>
+</PARAMS>        
\ No newline at end of file
diff --git a/TestON/tests/DpctlTest/DpctlTest.py b/TestON/tests/DpctlTest/DpctlTest.py
new file mode 100644
index 0000000..6a8403a
--- /dev/null
+++ b/TestON/tests/DpctlTest/DpctlTest.py
@@ -0,0 +1,42 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+class DpctlTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("DPCTL Ping Host")
+        main.step("Adding flow for host2")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE1']['STEP1']['tcpip'], tcpport=main.params['CASE1']['STEP1']['tcpport'], inport=main.params['CASE1']['STEP1']['inport'], timeout=main.params['CASE1']['STEP1']['timeout'], action=main.params['CASE1']['STEP1']['action'])
+        main.step("Adding Another Flow for Host3")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE1']['STEP2']['tcpip'], tcpport=main.params['CASE1']['STEP2']['tcpport'], inport=main.params['CASE1']['STEP2']['inport'], timeout=main.params['CASE1']['STEP2']['timeout'], action=main.params['CASE1']['STEP2']['action'])
+        main.step("Ping From h2 to h3")
+        main.Mininet1.pingHost(src=main.componentDictionary['DPCTL1']['src'], target=main.componentDictionary['DPCTL1']['target'], controller=main.componentDictionary['DPCTL1']['controller'])
+        result  = main.last_result
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Ping Successful",onfail="Ping failed")
+    
+    def CASE2(self,main) :
+
+        main.case("DPCTL Show Flow")
+        main.step("Adding flow for host2")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE2']['STEP1']['tcpip'], tcpport=main.params['CASE2']['STEP1']['tcpport'], inport=main.params['CASE2']['STEP1']['inport'], timeout=main.params['CASE2']['STEP1']['timeout'], action=main.params['CASE2']['STEP1']['action'])
+        main.step("Adding Another Flow for Host3")
+        main.DPCTL1.addFlow(tcpip=main.params['CASE2']['STEP2']['tcpip'], tcpport=main.params['CASE2']['STEP2']['tcpport'], inport=main.params['CASE2']['STEP2']['inport'], timeout=main.params['CASE2']['STEP2']['timeout'], action=main.params['CASE2']['STEP2']['action'])
+        main.step("Execute Show Flow")
+        main.DPCTL1.showFlow(tcpip=main.params['CASE2']['tcpip'], tcpport=main.params['CASE2']['tcpport'])
+        result = main.last_result
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="SHOW FLOW IS EXECUTED",onfail="Show Flow Execution failed")
diff --git a/TestON/tests/DpctlTest/DpctlTest.topo b/TestON/tests/DpctlTest/DpctlTest.topo
new file mode 100644
index 0000000..565a71a
--- /dev/null
+++ b/TestON/tests/DpctlTest/DpctlTest.topo
@@ -0,0 +1,30 @@
+<TOPOLOGY>    
+
+    <COMPONENT>
+        <Mininet1>
+            <host> 192.168.56.101 </host>
+            <user> openflow </user>
+            <password> openflow </password>
+            <type> MininetCliDriver </type>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <topo> single </topo>
+                <topocount> 3 </topocount>
+                <switch> ovsk </switch>
+                <controller> remote </controller>
+            </COMPONENTS>
+        </Mininet1>
+        <DPCTL1>
+            <host> 192.168.56.101 </host>
+            <user> openflow </user>
+            <password> openflow </password>
+            <test_target> 1</test_target>
+            <type> DpctlCliDriver </type>
+            <src> h2 </src>
+            <target> h3 </target>
+            <controller> c1 </controller>
+            <COMPONENTS>
+            </COMPONENTS>
+        </DPCTL1>
+    </COMPONENT>
+</TOPOLOGY>
\ No newline at end of file
diff --git a/TestON/tests/DpctlTest/__init__.py b/TestON/tests/DpctlTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/DpctlTest/__init__.py
diff --git a/TestON/tests/FVProtoSlicing/FVProtoSlicing.ospk b/TestON/tests/FVProtoSlicing/FVProtoSlicing.ospk
new file mode 100644
index 0000000..5ac413f
--- /dev/null
+++ b/TestON/tests/FVProtoSlicing/FVProtoSlicing.ospk
@@ -0,0 +1,43 @@
+CASE 1
+    NAME "Verifying SSH protocol based slicing" 
+    
+    STEP "Deleting the flowspace by using 'removeFlowSpace'"
+    STORE ON FlowVisor DO removeFlowSpace USING "all" IN removeflowspace_result
+    ASSERT removeflowspace_result EQUALS main.TRUE ONPASS "Removed FlowSpace Successfully" ONFAIL "Failed to remove FlowSpace" 
+    
+    STEP "Showing the connected devices by USING 'listDevices'"
+    STORE ON FlowVisor DO listDevices IN listdevices_result
+    ASSERT listdevices_result EQUALS main.TRUE ONPASS "Listed devices Successfully" ONFAIL "Failed to list the devices" 
+    
+    STEP "Adding FlowSpace"
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x806,dl_src=9e:f5:8b:78:c3:93,nw_dst=10.128.4.6 Slice:SSH=4" IN addflowspace_result_1
+    ASSERT addflowspace_result_1 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x806,dl_src=d2:df:f1:53:d4:49,nw_dst=10.128.4.5 Slice:SSH=4" IN addflowspace_result_2
+    ASSERT addflowspace_result_2 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.6,tp_dst=22 Slice:SSH=4" IN addflowspace_result_3
+    ASSERT addflowspace_result_3 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.5,tp_dst=22 Slice:SSH=4" IN addflowspace_result_4
+    ASSERT addflowspace_result_4 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.6,tp_src=22 Slice:SSH=4" IN addflowspace_result_5
+    ASSERT addflowspace_result_5 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor DO addFlowSpace USING "any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.5,tp_src=22 Slice:SSH=4" IN addflowspace_result_6
+    ASSERT addflowspace_result_6 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+        
+    STEP "Showing the flowSpace USING 'listFlowSpace'"
+    STORE ON FlowVisor DO listFlowSpace IN listflowspace_result
+    ASSERT listflowspace_result EQUALS main.TRUE ONPASS "FlowSpace Listed successfully" ONFAIL "Failed to listthe FlowSpace"
+     
+    STEP "Verifying the Slice, by checking SSH is happening to the destination or not"
+    STORE ON Pax_DPVM1 DO SSH USING user_name AS CASE['destination_username'],ip_address AS CASE['destination_host'], pwd AS CASE['destination_password'], port AS CASE['destination_port'], options AS TOPO['Pax_DPVM1']['COMPONENTS'] IN ssh_result
+    ASSERT ssh_result EQUALS main.TRUE ONPASS "Remote host connected throgh SSH " ONFAIL "Failed to connect remote host throgh SSH" 
+    
+    STEP " Showcasing the Parsing the response in required format"
+    STORE "<ipaddress>10.128.4.2</ipaddress><username>paxterra</username><password>paxterra</password><port>22</port><location>Bangalore</location>" IN myOutput 
+    PARSE myOutput AS table INTO myVar
+    INFO <myVar>
+    
\ No newline at end of file
diff --git a/TestON/tests/FVProtoSlicing/FVProtoSlicing.params b/TestON/tests/FVProtoSlicing/FVProtoSlicing.params
new file mode 100644
index 0000000..cb5cb60
--- /dev/null
+++ b/TestON/tests/FVProtoSlicing/FVProtoSlicing.params
@@ -0,0 +1,18 @@
+<PARAMS>
+    <testcases> [1]</testcases>
+    <mail> anil4haart@gmail.com,paxweb@paxterrasolutions.com</mail>
+    <CASE1>
+    
+        <dl_type> 0x800 </dl_type> 
+        <nw_proto> 6 </nw_proto>
+        <nw_src> 10.0.0.2 </nw_src>
+        <tp_dst> 22 </tp_dst>
+        <slice> SSH </slice> 
+        <permissions> 4 </permissions>
+        
+        <destination_host> 10.128.4.6 </destination_host>
+        <destination_username> paxterra </destination_username>
+        <destination_password> 0nLab_gu3st </destination_password>
+        <destination_port> 22 </destination_port>
+    </CASE1>
+</PARAMS>
diff --git a/TestON/tests/FVProtoSlicing/FVProtoSlicing.py b/TestON/tests/FVProtoSlicing/FVProtoSlicing.py
new file mode 100644
index 0000000..db94822
--- /dev/null
+++ b/TestON/tests/FVProtoSlicing/FVProtoSlicing.py
@@ -0,0 +1,63 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+class FVProtoSlicing :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("Verifying SSH protocol based slicing")
+    
+        main.step("Deleting the flowspace by using 'removeFlowSpace'")
+        removeflowspace_result = main.FlowVisor.removeFlowSpace("all")
+        utilities.assert_equals(expect=main.TRUE,actual=removeflowspace_result,onpass="Removed FlowSpace Successfully",onfail="Failed to remove FlowSpace")
+    
+        main.step("Showing the connected devices by USING 'listDevices'")
+        listdevices_result = main.FlowVisor.listDevices()
+        utilities.assert_equals(expect=main.TRUE,actual=listdevices_result,onpass="Listed devices Successfully",onfail="Failed to list the devices")
+    
+        main.step("Adding FlowSpace")
+        addflowspace_result_1 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x806,dl_src=9e:f5:8b:78:c3:93,nw_dst=10.128.4.6 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_1,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_2 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x806,dl_src=d2:df:f1:53:d4:49,nw_dst=10.128.4.5 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_2,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_3 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.6,tp_dst=22 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_3,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_4 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.5,tp_dst=22 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_4,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_5 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.6,tp_src=22 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_5,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_6 = main.FlowVisor.addFlowSpace("any 100 dl_type=0x800,nw_proto=6,nw_src=10.128.4.5,tp_src=22 Slice:SSH=4")
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_6,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        main.step("Showing the flowSpace USING 'listFlowSpace'")
+        listflowspace_result = main.FlowVisor.listFlowSpace()
+        utilities.assert_equals(expect=main.TRUE,actual=listflowspace_result,onpass="FlowSpace Listed successfully",onfail="Failed to listthe FlowSpace")
+    
+        main.step("Verifying the Slice, by checking SSH is happening to the destination or not")
+        ssh_result = main.Pax_DPVM1.SSH(user_name=main.params['CASE1']['destination_username'],ip_address=main.params['CASE1']['destination_host'], pwd=main.params['CASE1']['destination_password'], port=main.params['CASE1']['destination_port'], options=main.componentDictionary['Pax_DPVM1']['COMPONENTS'])
+        utilities.assert_equals(expect=main.TRUE,actual=ssh_result,onpass="Remote host connected throgh SSH ",onfail="Failed to connect remote host throgh SSH")
+    
+        main.step(" Showcasing the Parsing the response in required format")
+        myOutput  = "<ipaddress>10.128.4.2</ipaddress><username>paxterra</username><password>paxterra</password><port>22</port><location>Bangalore</location>"
+        myVar= main.response_parser(myOutput,"table")
+        main.log.info(myVar)
+    
diff --git a/TestON/tests/FVProtoSlicing/FVProtoSlicing.topo b/TestON/tests/FVProtoSlicing/FVProtoSlicing.topo
new file mode 100644
index 0000000..69cf9c2
--- /dev/null
+++ b/TestON/tests/FVProtoSlicing/FVProtoSlicing.topo
@@ -0,0 +1,98 @@
+<TOPOLOGY>
+    <COMPONENT>
+              
+        <HPSwitch1>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>
+            
+            <host>10.254.1.253</host>
+            <user> Paxterra </user>
+            <password>0nLab_gu3st</password>
+            <type>HPSwitchCliDriver</type>
+            <COMPONENTS>
+            <console_port> 5 </console_port>
+            </COMPONENTS>
+               
+        </HPSwitch1> 
+           
+        <HPSwitch2>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>
+            
+            <host>10.254.1.253</host>
+            <user> Paxterra </user>
+            <password>0nLab_gu3st</password>
+            <type>HPSwitchCliDriver</type>
+            <COMPONENTS>
+            <console_port> 2 </console_port>
+            </COMPONENTS>
+               
+        </HPSwitch2> 
+ 
+        <FlowVisor>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>
+            <host>10.128.4.2</host>
+            <user> paxterra </user>
+            <fvadmin_pwd></fvadmin_pwd>
+            <password>0nLab_gu3st</password>
+            <type>FlowVisorCliDriver</type>
+            <COMPONENTS>
+            </COMPONENTS>
+               
+        </FlowVisor>   
+        
+        <POX2>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>           
+            <host> 10.128.4.3 </host>
+            <user>  paxterra </user>
+            <password> 0nLab_gu3st </password>
+            <type> RemotePoxDriver </type>
+            <COMPONENTS>
+                <pox_lib_location> /home/paxterra/pox/  </pox_lib_location>
+                <samples.of_tutorial></samples.of_tutorial>
+            </COMPONENTS>
+        </POX2>
+        
+        <Pax_DPVM1>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>
+            <host>10.128.4.5</host>
+            <user> paxterra </user>
+            <password>0nLab_gu3st</password>
+            <type>RemoteVMDriver</type>
+            <COMPONENTS>
+            <name> Pax_DPVM2 </name>
+            </COMPONENTS>
+               
+        </Pax_DPVM1>
+        
+        <Pax_DPVM2>
+            <remote_user_name> Paxterra </remote_user_name>
+            <remote_ip_address>24.6.49.222</remote_ip_address>
+            <remote_port>6500</remote_port>
+            <remote_pwd>0nLab_gu3st</remote_pwd>
+            <host>10.128.4.6</host>
+            <user> paxterra </user>
+            <password>0nLab_gu3st</password>
+            <type>RemoteVMDriver</type>
+            <COMPONENTS>
+            <name> Pax_DPVM2 </name>
+            </COMPONENTS>
+               
+        </Pax_DPVM2>
+               
+    </COMPONENT>
+    
+</TOPOLOGY>
diff --git a/TestON/tests/FVProtoSlicing/__init__.py b/TestON/tests/FVProtoSlicing/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FVProtoSlicing/__init__.py
diff --git a/TestON/tests/FvtTest/.svn/entries b/TestON/tests/FvtTest/.svn/entries
new file mode 100644
index 0000000..b51d7ac
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/entries
@@ -0,0 +1,171 @@
+9
+
+dir
+65
+svn://192.168.150.61/OpenFlow/tests/PoxTest
+svn://192.168.150.61/OpenFlow
+
+
+
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+8b1d8634-a80c-44fc-ab7b-cc53e6f68013
+
+
+
+
+
+
+0
+
+PoxTest.params
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+e79bef68fc6f00acd8bf2028a7e2cab0
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+326
+
+PoxTest.py
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+4a2b2aaeb2a2eeed4b70f1adebca7231
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+637
+
+PoxTest.topo
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+827eb99b5a13c33d371ffc6aca740464
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+805
+
+__init__.py
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+d41d8cd98f00b204e9800998ecf8427e
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0
+
diff --git a/TestON/tests/FvtTest/.svn/format b/TestON/tests/FvtTest/.svn/format
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/format
@@ -0,0 +1 @@
+9
diff --git a/TestON/tests/FvtTest/.svn/text-base/PoxTest.params.svn-base b/TestON/tests/FvtTest/.svn/text-base/PoxTest.params.svn-base
new file mode 100644
index 0000000..bbadcaa
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/text-base/PoxTest.params.svn-base
@@ -0,0 +1,12 @@
+[PARAMS]
+    'testcases' = '[1]'
+    'mail' = 'anilkumar.s@paxterrasolutions.com,paxweb@paxterrasolutions.com'
+    #'log_dir' = '/home/user/Desktop/openflow_logs/'
+    [[CASE1]]
+        'destination' = 'h2'
+        'src' = 'h2'
+        'target'= 'h3'
+        'controller' = 'c1'
+        [[[STEP1]]]
+            'host' = 'h2'
+
diff --git a/TestON/tests/FvtTest/.svn/text-base/PoxTest.py.svn-base b/TestON/tests/FvtTest/.svn/text-base/PoxTest.py.svn-base
new file mode 100644
index 0000000..49e63af
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/text-base/PoxTest.py.svn-base
@@ -0,0 +1,15 @@
+class PoxTest:
+    '''
+    Testing Basic Pox Functionalities
+    '''
+    def __init__(self):
+        self.default = ""
+
+    def CASE1(self,main):
+        main.case("Checking the control flow of POX")
+        main.step("Checking the host reachability using pingHost ")
+        
+        result = main.Mininet1.pingHost(src=main.params['CASE1']['src'],
+                                        target=main.params['CASE1']['target'],
+                                        controller=main.params['CASE1']['controller'])
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Ping executed successfully",onfail="Ping Failed")
diff --git a/TestON/tests/FvtTest/.svn/text-base/PoxTest.topo.svn-base b/TestON/tests/FvtTest/.svn/text-base/PoxTest.topo.svn-base
new file mode 100644
index 0000000..b4560cb
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/text-base/PoxTest.topo.svn-base
@@ -0,0 +1,25 @@
+[TOPOLOGY]
+
+    [[COMPONENT]]
+        [[["Mininet1"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'type' = "Mininet"
+            [[[["COMPONENTS"]]]]
+                # Specify the Option for mininet
+                'topo' = 'single'
+                'topocount' = '3'
+                'switch' = 'ovsk'
+                'controller' = 'remote'
+        [[["POX2"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'type' = 'POX'
+            'test_target' = '1'
+            'no-cli' = '1' #or '0' if want to run in cli mode
+            [[[["COMPONENTS"]]]]
+                'pox_lib_location' = "/home/openflow/pox/"
+                [[[[["samples.of_tutorial"]]]]]
+
diff --git a/TestON/tests/FvtTest/.svn/text-base/__init__.py.svn-base b/TestON/tests/FvtTest/.svn/text-base/__init__.py.svn-base
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FvtTest/.svn/text-base/__init__.py.svn-base
diff --git a/TestON/tests/FvtTest/FvtTest.ospk b/TestON/tests/FvtTest/FvtTest.ospk
new file mode 100644
index 0000000..36af331
--- /dev/null
+++ b/TestON/tests/FvtTest/FvtTest.ospk
@@ -0,0 +1,20 @@
+CASE 1
+
+    NAME "Checking FVT"
+    STEP "Checking the FVT"
+    STORE ON FVT DO simplePacket USING "SRC_MAC_FOR_CTL0_0" IN pkt
+    in_port = 3
+    STORE ON FVT DO genPacketIn USING in_port AS in_port, pkt AS pkt IN msg
+    snd_list = ["switch", 0, msg]
+    exp_list = [["controller", 0, msg]]
+    STORE ON FVT DO ofmsgSndCmp USING snd_list , exp_list , xid_ignore AS True, hdr_only AS True IN res
+    ASSERT res EQUALS True ONPASS "Received expected message" ONFAIL "Received unexpected message"
+
+    COMMENT "Packet_in for controller1"
+    STORE ON FVT DO simplePacket USING "SRC_MAC_FOR_CTL1_0" IN pkt
+    in_port = 3
+    STORE ON FVT DO genPacketIn USING in_port AS in_port, pkt AS pkt IN msg
+    snd_list = ["switch", 0, msg]
+    exp_list = [["controller", 1, msg]]
+    STORE ON FVT DO ofmsgSndCmp USING snd_list , exp_list , xid_ignore AS True IN res
+    ASSERT res EQUALS True ONPASS "Received expected message" ONFAIL "Received unexpected message"
diff --git a/TestON/tests/FvtTest/FvtTest.params b/TestON/tests/FvtTest/FvtTest.params
new file mode 100644
index 0000000..dfff20e
--- /dev/null
+++ b/TestON/tests/FvtTest/FvtTest.params
@@ -0,0 +1,13 @@
+<PARAMS>
+    <testcases> [1]</testcases>
+    <mail> anil4haart@gmail.com,paxweb@paxterrasolutions.com</mail>
+    <CASE1>
+        <destination> h2</destination>
+        <src>h2</src>
+        <target> h3 </target>
+        <controller> c1 </controller>
+        <STEP1>
+            <host> h2</host>
+        </STEP1> 
+    </CASE1>
+</PARAMS>
diff --git a/TestON/tests/FvtTest/FvtTest.py b/TestON/tests/FvtTest/FvtTest.py
new file mode 100644
index 0000000..678cdaa
--- /dev/null
+++ b/TestON/tests/FvtTest/FvtTest.py
@@ -0,0 +1,40 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+class FvtTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+    
+        main.case("Checking FVT")
+        main.step("Checking the FVT")
+        pkt = main.FVT.simplePacket("SRC_MAC_FOR_CTL0_0")
+        in_port = 3
+        msg = main.FVT.genPacketIn(in_port=in_port, pkt=pkt)
+        snd_list = ["switch", 0, msg]
+        exp_list = [["controller", 0, msg]]
+        res = main.FVT.ofmsgSndCmp(snd_list , exp_list , xid_ignore=True, hdr_only=True)
+        utilities.assert_equals(expect=True,actual=res,onpass="Received expected message",onfail="Received unexpected message")
+    
+        #Packet_in for controller1
+        pkt = main.FVT.simplePacket("SRC_MAC_FOR_CTL1_0")
+        in_port = 3
+        msg = main.FVT.genPacketIn(in_port=in_port, pkt=pkt)
+        snd_list = ["switch", 0, msg]
+        exp_list = [["controller", 1, msg]]
+        res = main.FVT.ofmsgSndCmp(snd_list , exp_list , xid_ignore=True)
+        utilities.assert_equals(expect=True,actual=res,onpass="Received expected message",onfail="Received unexpected message")
diff --git a/TestON/tests/FvtTest/FvtTest.topo b/TestON/tests/FvtTest/FvtTest.topo
new file mode 100644
index 0000000..aa440e4
--- /dev/null
+++ b/TestON/tests/FvtTest/FvtTest.topo
@@ -0,0 +1,13 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <FVT>
+            <host>192.168.56.101</host>
+            <user> openflow</user>
+            <password> openflow</password>
+            <type>FvtApiDriver</type>
+            <COMPONENTS>
+            </COMPONENTS>   
+        </FVT>        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/FvtTest/__init__.py b/TestON/tests/FvtTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/FvtTest/__init__.py
diff --git a/TestON/tests/HPSwitchTest/HPSwitchTest.params b/TestON/tests/HPSwitchTest/HPSwitchTest.params
new file mode 100644
index 0000000..92a5b20
--- /dev/null
+++ b/TestON/tests/HPSwitchTest/HPSwitchTest.params
@@ -0,0 +1,4 @@
+<PARAMS>
+    <testcases> [1]</testcases>
+    <mail> anil4haart@gmail.com,paxweb@paxterrasolutions.com</mail>
+</PARAMS>
\ No newline at end of file
diff --git a/TestON/tests/HPSwitchTest/HPSwitchTest.py b/TestON/tests/HPSwitchTest/HPSwitchTest.py
new file mode 100644
index 0000000..9e2e4e7
--- /dev/null
+++ b/TestON/tests/HPSwitchTest/HPSwitchTest.py
@@ -0,0 +1,23 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+class HPSwitchTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("HPSwitchTest Sample Test")
+        main.step("HPSwitchTest Sample Test")
diff --git a/TestON/tests/HPSwitchTest/HPSwitchTest.topo b/TestON/tests/HPSwitchTest/HPSwitchTest.topo
new file mode 100644
index 0000000..5576839
--- /dev/null
+++ b/TestON/tests/HPSwitchTest/HPSwitchTest.topo
@@ -0,0 +1,14 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <HPSwitch>
+            <host>24.6.49.222</host>
+            <user> Paxterra </user>
+            <port> 6500 </port>
+            <password>0nLab_gu3st</password>
+            <type>RemoteSysDriver</type>
+            <COMPONENTS>
+            </COMPONENTS>   
+        </HPSwitch>        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/HPSwitchTest/__init__.py b/TestON/tests/HPSwitchTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/HPSwitchTest/__init__.py
diff --git a/TestON/tests/MininetSlicing/MininetSlicing.ospk b/TestON/tests/MininetSlicing/MininetSlicing.ospk
new file mode 100644
index 0000000..8e2f32f
--- /dev/null
+++ b/TestON/tests/MininetSlicing/MininetSlicing.ospk
@@ -0,0 +1,64 @@
+CASE 1
+    NAME "Verifying 'SSH protocol' based slicing" 
+    
+    STEP "Deleting flowspace using 'removeFlowSpace'"
+    STORE ON FlowVisor1 DO removeFlowSpace USING "all" IN removeflowspace_result
+    ASSERT removeflowspace_result EQUALS main.TRUE ONPASS "Removed FlowSpace Successfully" ONFAIL "Failed to remove FlowSpace" 
+    
+    STEP "Showing connected devices using 'listDevices'"
+    STORE ON FlowVisor1 DO listDevices IN listdevices_result
+    ASSERT listdevices_result EQUALS main.TRUE ONPASS "Listed devices Successfully" ONFAIL "Failed to list the devices"
+
+    STEP "Verifying hosts reachability through ICMP traffic"
+    STORE ON Mininet1 DO pingHost USING src AS 'h1',target AS 'h4' IN ping_result
+    ASSERT ping_result EQUALS main.TRUE ONPASS "NO PACKET LOSS, HOST IS REACHABLE" ONFAIL "PACKET LOST, HOST IS NOT REACHABLE"  
+    
+    STEP "Showing the flowSpace USING 'listFlowSpace'"
+    STORE ON FlowVisor1 DO listFlowSpace IN listflowspace_result
+    STORE ON Mininet1 DO pingHost USING src AS 'h1',target AS 'h4' IN ping_result
+    ASSERT main.TRUE EQUALS main.TRUE ONPASS "Listed FlowSpace" ONFAIL "Failed to list the FlowSpace"
+   
+    STEP "Adding FlowSpace to create the slice of the Network"
+    INFO " Geeting the IP-Addresses of Hosts"
+    STORE ON Mininet1 DO getIPAddress USING 'h1' IN h1_ipaddress
+    STORE ON Mininet1 DO getIPAddress USING 'h4' IN h4_ipaddress 
+    
+    INFO " Geeting the MAC-Addresses of Hosts"  
+    STORE ON Mininet1 DO getMacAddress USING 'h1' IN h1_macaddress
+    STORE ON Mininet1 DO getMacAddress USING 'h4' IN h4_macaddress
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING dl_src AS h1_macaddress,nw_dst AS h4_ipaddress IN addflowspace_result_1
+    ASSERT addflowspace_result_1 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING dl_src AS h4_macaddress,nw_dst AS h1_ipaddress IN addflowspace_result_2 
+    ASSERT addflowspace_result_2 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h1_ipaddress IN addflowspace_result_3
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h4_ipaddress IN addflowspace_result_3
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h1_ipaddress, tp_dst AS '22' IN addflowspace_result_3
+    ASSERT addflowspace_result_3 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace"
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h4_ipaddress,tp_dst AS '22' IN addflowspace_result_4
+    ASSERT addflowspace_result_4 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h1_ipaddress,tp_src AS '22' IN addflowspace_result_5
+    ASSERT addflowspace_result_5 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace" 
+    
+    STORE ON FlowVisor1 DO addFlowSpace USING nw_src AS h4_ipaddress,tp_src AS '22' IN addflowspace_result_6
+    ASSERT addflowspace_result_6 EQUALS main.TRUE ONPASS "Added FlowSpace Successfully" ONFAIL "Failed to add FlowSpace"
+      
+    INFO "Showing the flowSpace USING 'listFlowSpace'"
+    STORE ON FlowVisor1 DO listFlowSpace IN listflowspace_result    
+
+    STEP "Verifying hosts reachability through ICMP traffic and Connectivity through SSH service"
+    STORE ON Mininet1 DO pingHost USING src AS 'h1',target AS 'h4' IN ping_result
+    ASSERT ping_result EQUALS main.TRUE ONPASS "NO PACKET LOSS, HOST IS REACHABLE" ONFAIL "PACKET LOST, HOST IS NOT REACHABLE"  
+
+    STORE ON Mininet1 DO verifySSH USING user_name AS CASE['destination_username'],ip_address AS CASE['destination_host'], pwd AS CASE['destination_password'], port AS CASE['destination_port'] IN ssh_result
+    ASSERT ssh_result EQUALS main.TRUE ONPASS "Failed to connect remote host throgh SSH" ONFAIL "Remote host connected throgh SSH "  
+     
+
+
+
+
diff --git a/TestON/tests/MininetSlicing/MininetSlicing.params b/TestON/tests/MininetSlicing/MininetSlicing.params
new file mode 100644
index 0000000..c18e650
--- /dev/null
+++ b/TestON/tests/MininetSlicing/MininetSlicing.params
@@ -0,0 +1,18 @@
+<PARAMS>
+    <testcases> 1</testcases>
+    <mail> paxweb@paxterrasolutions.com</mail>
+    <CASE1>
+    
+        <dl_type> 0x800 </dl_type> 
+        <nw_proto> 6 </nw_proto>
+        <nw_src> 10.0.0.2 </nw_src>
+        <tp_dst> 22 </tp_dst>
+        <slice> SSH </slice> 
+        <permissions> 4 </permissions>
+        
+        <destination_host> 10.0.0.4 </destination_host>
+        <destination_username> openflow </destination_username>
+        <destination_password> openflow </destination_password>
+        <destination_port> 22 </destination_port>
+    </CASE1>
+</PARAMS>
\ No newline at end of file
diff --git a/TestON/tests/MininetSlicing/MininetSlicing.py b/TestON/tests/MininetSlicing/MininetSlicing.py
new file mode 100644
index 0000000..ac723fb
--- /dev/null
+++ b/TestON/tests/MininetSlicing/MininetSlicing.py
@@ -0,0 +1,85 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+class MininetSlicing :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("Verifying 'SSH protocol' based slicing")
+    
+        main.step("Deleting flowspace using 'removeFlowSpace'")
+        removeflowspace_result = main.FlowVisor1.removeFlowSpace("all")
+        utilities.assert_equals(expect=main.TRUE,actual=removeflowspace_result,onpass="Removed FlowSpace Successfully",onfail="Failed to remove FlowSpace")
+    
+        main.step("Showing connected devices using 'listDevices'")
+        listdevices_result = main.FlowVisor1.listDevices()
+        utilities.assert_equals(expect=main.TRUE,actual=listdevices_result,onpass="Listed devices Successfully",onfail="Failed to list the devices")
+    
+        main.step("Verifying hosts reachability through ICMP traffic")
+        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
+        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+    
+        main.step("Showing the flowSpace USING 'listFlowSpace'")
+        listflowspace_result = main.FlowVisor1.listFlowSpace()
+        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
+    
+    
+        main.step("Adding FlowSpace to create the slice of the Network")
+        main.log.info(" Geeting the IP-Addresses of Hosts")
+        h1_ipaddress = main.Mininet1.getIPAddress('h1')
+        h4_ipaddress  = main.Mininet1.getIPAddress('h4')
+    
+        main.log.info(" Geeting the MAC-Addresses of Hosts"  )
+        h1_macaddress = main.Mininet1.getMacAddress('h1')
+        h4_macaddress = main.Mininet1.getMacAddress('h4')
+    
+        addflowspace_result_1 = main.FlowVisor1.addFlowSpace(dl_src=h1_macaddress,nw_dst=h4_ipaddress)
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_1,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_2  = main.FlowVisor1.addFlowSpace(dl_src=h4_macaddress,nw_dst=h1_ipaddress)
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_2,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress)
+        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress)
+    
+        addflowspace_result_3 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress, tp_dst='22')
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_3,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_4 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress,tp_dst='22')
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_4,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_5 = main.FlowVisor1.addFlowSpace(nw_src=h1_ipaddress,tp_src='22')
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_5,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        addflowspace_result_6 = main.FlowVisor1.addFlowSpace(nw_src=h4_ipaddress,tp_src='22')
+        utilities.assert_equals(expect=main.TRUE,actual=addflowspace_result_6,onpass="Added FlowSpace Successfully",onfail="Failed to add FlowSpace")
+    
+        main.log.info("Showing the flowSpace USING 'listFlowSpace'")
+        listflowspace_result     = main.FlowVisor1.listFlowSpace()
+    
+        main.step("Verifying hosts reachability through ICMP traffic and Connectivity through SSH service")
+        ping_result = main.Mininet1.pingHost(src='h1',target='h4')
+        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+    
+        ssh_result = main.Mininet1.verifySSH(user_name=main.params['CASE1']['destination_username'],ip_address=main.params['CASE1']['destination_host'], pwd=main.params['CASE1']['destination_password'], port=main.params['CASE1']['destination_port'])
+        utilities.assert_equals(expect=main.TRUE,actual=ssh_result,onpass="Failed to connect remote host throgh SSH",onfail="Remote host connected throgh SSH ")
+    
+    
+    
+    
+    
+    
diff --git a/TestON/tests/MininetSlicing/MininetSlicing.topo b/TestON/tests/MininetSlicing/MininetSlicing.topo
new file mode 100644
index 0000000..7a181d7
--- /dev/null
+++ b/TestON/tests/MininetSlicing/MininetSlicing.topo
@@ -0,0 +1,43 @@
+<TOPOLOGY>
+    <COMPONENT>          
+        <FlowVisor1>
+            <host>192.168.56.101</host>
+            <user> openflow </user>
+            <fvadmin_pwd></fvadmin_pwd>
+            <password>openflow</password>
+            <type>FlowVisorDriver</type>
+            <COMPONENTS>
+            </COMPONENTS>
+               
+        </FlowVisor1>   
+        
+        <Mininet1>
+            <host>192.168.56.101</host>
+            <user> openflow</user>
+            <password> openflow</password>
+            <type>MininetCliDriver</type>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <topo> single</topo>
+                <topocount>3</topocount>
+                <switch> ovsk </switch>
+                <controller> remote </controller>
+             </COMPONENTS>   
+        </Mininet1>        
+        
+        <POX2>
+            <host> 192.168.56.102 </host>
+            <user>  openflow </user>
+            <password> openflow </password>
+            <type> PoxCliDriver </type>
+            <test_target> 1 </test_target>
+            <COMPONENTS>
+                <pox_lib_location> /home/openflow/pox/  </pox_lib_location>
+                <samples.of_tutorial></samples.of_tutorial>
+            </COMPONENTS>
+        </POX2>
+    
+               
+    </COMPONENT>
+    
+</TOPOLOGY>
\ No newline at end of file
diff --git a/TestON/tests/MininetSlicing/__init__.py b/TestON/tests/MininetSlicing/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/MininetSlicing/__init__.py
diff --git a/TestON/tests/MininetTest/MininetTest.params b/TestON/tests/MininetTest/MininetTest.params
new file mode 100644
index 0000000..0f798b1
--- /dev/null
+++ b/TestON/tests/MininetTest/MininetTest.params
@@ -0,0 +1,23 @@
+<PARAMS>
+    <testcases>[1,2]</testcases>
+    <mail>anilkumar.s@paxterrasolutions.com,raghavkashyap@paxterrasolutions.com</mail>
+    <CASE1> 
+        <destination> h2</destination>
+        <STEP1>
+            <host> h2 </host>
+        </STEP1>
+    </CASE1>
+    <SET1>
+        <begin>
+            <one>s1</one>
+            <two>s1</two>
+            <three>s3</three> 
+        </begin>
+        <end>
+            <one>s2</one>
+            <two>s3</two>
+            <three>s4</three> 
+        </end>
+    </SET1>
+        
+</PARAMS>      
diff --git a/TestON/tests/MininetTest/MininetTest.py b/TestON/tests/MininetTest/MininetTest.py
new file mode 100644
index 0000000..28850a4
--- /dev/null
+++ b/TestON/tests/MininetTest/MininetTest.py
@@ -0,0 +1,23 @@
+
+class MininetTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("Testing the configuration of the host")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host h2 IP address configured",onfail="Host h2 IP address didn't configured")
+    
+    def CASE2(self,main) :
+
+        main.case("Testing Reachabilty of all the hosts")
+        main.step("Checking Hosts reachability by using pingall")
+        result = main.Mininet1.pingall()
+        main.step("Verifying the result")
+        for source in  main.params['SET1']['begin']:
+            main.log.info(str(main.params['SET1']['begin'][source]))
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="All hosts are reacchable",onfail="Hosts are not reachable")
diff --git a/TestON/tests/MininetTest/MininetTest.topo b/TestON/tests/MininetTest/MininetTest.topo
new file mode 100644
index 0000000..645a8cb
--- /dev/null
+++ b/TestON/tests/MininetTest/MininetTest.topo
@@ -0,0 +1,17 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Mininet1>
+            <host>10.128.7.7</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> </arg1>
+                <arg2> </arg2>
+                <controller> none  </controller>
+             </COMPONENTS>
+        </Mininet1>
+   </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/MininetTest/__init__.py b/TestON/tests/MininetTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/MininetTest/__init__.py
diff --git a/TestON/tests/OnosCHO4nodes/.OnosSanity.topo.swp b/TestON/tests/OnosCHO4nodes/.OnosSanity.topo.swp
new file mode 100644
index 0000000..c2a0aff
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/.OnosSanity.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.params.swp b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.params.swp
new file mode 100644
index 0000000..127ce94
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.params.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swn b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swn
new file mode 100644
index 0000000..cb578ac
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swn
Binary files differ
diff --git a/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swo b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swo
new file mode 100644
index 0000000..5389b47
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.py.swo
Binary files differ
diff --git a/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.topo.swp b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.topo.swp
new file mode 100644
index 0000000..1500dc4
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/.OnosSanity4nodes.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.params b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.params
new file mode 100644
index 0000000..e9ddee1
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.params
@@ -0,0 +1,27 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7</testcases>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <CTRL>
+        <ip1>10.128.100.3</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.100.4</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.100.5</ip3>
+        <port3>6633</port3>
+        <ip4>10.128.100.6</ip4>
+        <port4>6633</port4>
+    </CTRL>
+</PARAMS>      
diff --git a/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.py b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.py
new file mode 100644
index 0000000..13c8905
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.py
@@ -0,0 +1,268 @@
+
+class OnosCHO4nodes :
+
+    def __init__(self) :
+        self.default = ''
+
+#**********************************************************************************************************************************************************************************************
+#Test startup
+#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
+    def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
+        main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
+        import time
+        main.case("Checking if the startup was clean...") 
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.report("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        main.log.report("\n\n\t\t\t\t ONOS VERSION")
+        main.ONOS1.get_version()
+        main.log.info("\n\n")
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+           
+#**********************************************************************************************************************************************************************************************
+#Assign Controllers
+#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
+#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
+#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
+#      the controllers already assigned to the switch are not specified.
+
+    def CASE2(self,main) :    #Make sure mininet exists, then assign controllers to switches
+        import time
+        main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        main.step("assigning ONOS controllers to switches")
+        for i in range(25): 
+            if i < 3:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+            elif i >= 3 and i < 5:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+            elif i >= 5 and i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+        main.Mininet1.get_sw_controller("s1")       
+ 
+# **********************************************************************************************************************************************************************************************
+#Add Flows
+#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
+#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
+
+    def CASE3(self,main) :    #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
+        main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        tmp = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while tmp == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            tmp = main.ONOS1.check_flow()
+            if tmp == main.FALSE and count < 6:
+                count = count + 1
+                main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif tmp == main.FALSE and count == 6:
+                result = main.FALSE
+                break
+            else:
+                result = main.TRUE
+                break
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tFlows failed check")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+
+#**********************************************************************************************************************************************************************************************
+#This test case removes Controllers 2,3, and 4 then performs a ping test.
+#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
+#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 10 seconds before trying again.
+#If the ping test fails 6 times, then the test case will return false
+
+    def CASE4(self,main) :
+        main.log.report("Remove ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])  #Assigning a single controller removes all other controllers
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(3)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time() 
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAIL")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#This test case restores the controllers removed by Case 4 then performs a ping test.
+
+    def CASE5(self,main) :
+        main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(3)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
+
+    def CASE6(self,main) :
+        main.log.report("Bring Link between s1 and s2 down, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings the link that Case 6 took down  back up, then runs a ping test to view reroute time
+
+    def CASE7(self,main) :
+        main.log.report("Bring Link between S1 and S2 up, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link back up... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TESTS FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo
new file mode 100644
index 0000000..5e72388
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo
@@ -0,0 +1,139 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.100.3</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Zookeeper2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper2>
+
+        <Zookeeper3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper3>
+       
+        <Zookeeper4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper4>
+
+        <Cassandra1>
+            <host>10.128.100.3</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra2>
+       
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra3>
+       
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra4>
+
+        <ONOS1>
+            <host>10.128.100.3</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS3>
+       
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>12</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS4>
+
+        <Mininet1>
+            <host>10.128.100.3</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>13</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo.back b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo.back
new file mode 100644
index 0000000..9561597
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/OnosCHO4nodes.topo.back
@@ -0,0 +1,42 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <COMPONENTS>
+            
+             </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.26:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosCHO4nodes/__init__.py b/TestON/tests/OnosCHO4nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosCHO4nodes/__init__.py
diff --git a/TestON/tests/OnosCHO8nodes/.OnosSanity.topo.swp b/TestON/tests/OnosCHO8nodes/.OnosSanity.topo.swp
new file mode 100644
index 0000000..c2a0aff
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/.OnosSanity.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.params.swp b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.params.swp
new file mode 100644
index 0000000..127ce94
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.params.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swn b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swn
new file mode 100644
index 0000000..cb578ac
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swn
Binary files differ
diff --git a/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swo b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swo
new file mode 100644
index 0000000..5389b47
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.py.swo
Binary files differ
diff --git a/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.topo.swp b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.topo.swp
new file mode 100644
index 0000000..1500dc4
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/.OnosSanity4nodes.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.params b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.params
new file mode 100644
index 0000000..003af0d
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.params
@@ -0,0 +1,35 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7,4,5,6,7</testcases>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <CTRL>
+        <ip1>10.128.4.11</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.4.12</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.4.13</ip3>
+        <port3>6633</port3>
+        <ip4>10.128.4.14</ip4>
+        <port4>6633</port4>
+        <ip5>10.128.4.15</ip5>
+        <port5>6633</port5>
+        <ip6>10.128.4.16</ip6>
+        <port6>6633</port6>
+        <ip7>10.128.4.17</ip7>
+        <port7>6633</port7>
+        <ip8>10.128.4.18</ip8>
+        <port8>6633</port8>
+    </CTRL>
+</PARAMS>      
diff --git a/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.py b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.py
new file mode 100644
index 0000000..a183aa3
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.py
@@ -0,0 +1,268 @@
+
+class OnosCHO8nodes :
+
+    def __init__(self) :
+        self.default = ''
+
+#**********************************************************************************************************************************************************************************************
+#Test startup
+#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
+    def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
+        main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
+        import time
+        main.case("Checking if the startup was clean...") 
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.report("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        main.log.report("\n\n\t\t\t\t ONOS VERSION")
+        main.ONOS1.get_version()
+        main.log.info("\n\n")
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+           
+#**********************************************************************************************************************************************************************************************
+#Assign Controllers
+#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
+#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
+#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
+#      the controllers already assigned to the switch are not specified.
+
+    def CASE2(self,main) :    #Make sure mininet exists, then assign controllers to switches
+        import time
+        main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        main.step("assigning ONOS controllers to switches")
+        for i in range(25): 
+            if i < 3:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+            elif i >= 3 and i < 5:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+            elif i >= 5 and i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+                time.sleep(3)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+        main.Mininet1.get_sw_controller("s1")       
+ 
+# **********************************************************************************************************************************************************************************************
+#Add Flows
+#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
+#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
+
+    def CASE3(self,main) :    #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
+        main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        tmp = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while tmp == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            tmp = main.ONOS1.check_flow()
+            if tmp == main.FALSE and count < 6:
+                count = count + 1
+                main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif tmp == main.FALSE and count == 6:
+                result = main.FALSE
+                break
+            else:
+                result = main.TRUE
+                break
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tFlows failed check")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+
+#**********************************************************************************************************************************************************************************************
+#This test case removes Controllers 2,3, and 4 then performs a ping test.
+#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
+#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 10 seconds before trying again.
+#If the ping test fails 6 times, then the test case will return false
+
+    def CASE4(self,main) :
+        main.log.report("Remove ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])  #Assigning a single controller removes all other controllers
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(3)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time() 
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAIL")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#This test case restores the controllers removed by Case 4 then performs a ping test.
+
+    def CASE5(self,main) :
+        main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(3)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
+
+    def CASE6(self,main) :
+        main.log.report("Bring Link between s1 and s2 down, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings the link that Case 6 took down  back up, then runs a ping test to view reroute time
+
+    def CASE7(self,main) :
+        main.log.report("Bring Link between S1 and S2 up, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link back up... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TESTS FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo
new file mode 100644
index 0000000..f9c4696
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo
@@ -0,0 +1,259 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Zookeeper2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper2>
+
+        <Zookeeper3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper3>
+       
+        <Zookeeper4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper4>
+
+        <Zookeeper5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper5>
+
+        <Zookeeper6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper6>
+
+        <Zookeeper7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper7>
+
+        <Zookeeper8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper8>
+
+        <Cassandra1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Cassandra2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra2>
+       
+        <Cassandra3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>11</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra3>
+       
+        <Cassandra4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>12</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra4>
+
+        <Cassandra5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>13</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra5>
+
+        <Cassandra6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>14</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra6>
+
+        <Cassandra7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>15</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra7>
+
+        <Cassandra8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>16</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra8>
+
+        <ONOS1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>17</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>18</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>19</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS3>
+       
+        <ONOS4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>20</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS4>
+
+        <ONOS5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>21</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS5>
+
+        <ONOS6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>22</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS6>
+
+        <ONOS7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>23</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS7>
+
+        <ONOS8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>24</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS8>
+
+        <Mininet1>
+            <host>10.128.6.2</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>25</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo.back b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo.back
new file mode 100644
index 0000000..9561597
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/OnosCHO8nodes.topo.back
@@ -0,0 +1,42 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <COMPONENTS>
+            
+             </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.26:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosCHO8nodes/__init__.py b/TestON/tests/OnosCHO8nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosCHO8nodes/__init__.py
diff --git a/TestON/tests/OnosDD_PARP/.OnosSanity.topo.swp b/TestON/tests/OnosDD_PARP/.OnosSanity.topo.swp
new file mode 100644
index 0000000..c2a0aff
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/.OnosSanity.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swn b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swn
new file mode 100644
index 0000000..cb578ac
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swn
Binary files differ
diff --git a/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swo b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swo
new file mode 100644
index 0000000..5389b47
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.py.swo
Binary files differ
diff --git a/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.topo.swp b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.topo.swp
new file mode 100644
index 0000000..1500dc4
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/.OnosSanity4nodes.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosDD_PARP/OnosDD_PARP.params b/TestON/tests/OnosDD_PARP/OnosDD_PARP.params
new file mode 100644
index 0000000..6fdbea5
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/OnosDD_PARP.params
@@ -0,0 +1,27 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7</testcases>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <CTRL>
+        <ip1>10.128.100.1</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.100.4</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.100.5</ip3>
+        <port3>6633</port3>
+        <ip4>10.128.100.6</ip4>
+        <port4>6633</port4>
+    </CTRL>
+</PARAMS>      
diff --git a/TestON/tests/OnosDD_PARP/OnosDD_PARP.py b/TestON/tests/OnosDD_PARP/OnosDD_PARP.py
new file mode 100644
index 0000000..ef3b47a
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/OnosDD_PARP.py
@@ -0,0 +1,278 @@
+
+class OnosSanity4nodes :
+
+    def __init__(self) :
+        self.default = ''
+
+#**********************************************************************************************************************************************************************************************
+#Test startup
+#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
+    def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
+        import time
+        main.log.report("Pulling latest code from github to all nodes")
+        main.ONOS1.git_pull()
+        main.ONOS2.git_pull()
+        main.ONOS3.git_pull()
+        main.ONOS4.git_pull()
+        main.ONOS1.drop_keyspace()
+        main.ONOS1.start()
+        time.sleep(10)
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.start_rest()
+        main.ONOS1.get_version()
+        main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.report("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+           
+#**********************************************************************************************************************************************************************************************
+#Assign Controllers
+#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
+#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
+#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
+#      the controllers already assigned to the switch are not specified.
+
+    def CASE2(self,main) :    #Make sure mininet exists, then assign controllers to switches
+        import time
+        main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        main.step("assigning ONOS controllers to switches")
+        for i in range(25): 
+            if i < 3:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            elif i >= 3 and i < 5:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            elif i >= 5 and i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+        main.Mininet1.get_sw_controller("s1")       
+ 
+# **********************************************************************************************************************************************************************************************
+#Add Flows
+#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
+#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
+
+    def CASE3(self,main) :    #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
+        main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        tmp = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while tmp == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            tmp = main.ONOS1.check_flow()
+            if tmp == main.FALSE and count < 6:
+                count = count + 1
+                main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif tmp == main.FALSE and count == 6:
+                result = main.FALSE
+                break
+            else:
+                result = main.TRUE
+                break
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tFlows failed check")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+
+#**********************************************************************************************************************************************************************************************
+#This test case removes Controllers 2,3, and 4 then performs a ping test.
+#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
+#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 10 seconds before trying again.
+#If the ping test fails 6 times, then the test case will return false
+
+    def CASE4(self,main) :
+        main.log.report("Remove ONOS 2,3,4 then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])  #Assigning a single controller removes all other controllers
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time() 
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAIL")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#This test case restores the controllers removed by Case 4 then performs a ping test.
+
+    def CASE5(self,main) :
+        main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
+
+    def CASE6(self,main) :
+        main.log.report("Bring Link between s1 and s2 down, wait 20 seconds, then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(20)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                i = 6
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings the link that Case 6 took down  back up, then runs a ping test to view reroute time
+
+    def CASE7(self,main) :
+        main.log.report("Bring Link between s1 and s2 up, wait 20 seconds, then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        main.case("Bringing Link up... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
+        time.sleep(20)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link UP!",onfail="Link not brought up...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                i = 6
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TESTS FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosDD_PARP/OnosDD_PARP.topo b/TestON/tests/OnosDD_PARP/OnosDD_PARP.topo
new file mode 100644
index 0000000..9086c16
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/OnosDD_PARP.topo
@@ -0,0 +1,139 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Zookeeper2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper2>
+
+        <Zookeeper3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper3>
+       
+        <Zookeeper4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper4>
+
+        <Cassandra1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra2>
+       
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra3>
+       
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra4>
+
+        <ONOS1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS3>
+       
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>12</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS4>
+
+        <Mininet1>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>13</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosDD_PARP/__init__.py b/TestON/tests/OnosDD_PARP/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosDD_PARP/__init__.py
diff --git a/TestON/tests/OnosPerf/.OnosSanity.py.swp b/TestON/tests/OnosPerf/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/OnosPerf/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/OnosPerf/OnosPerf.params b/TestON/tests/OnosPerf/OnosPerf.params
new file mode 100644
index 0000000..0616eec
--- /dev/null
+++ b/TestON/tests/OnosPerf/OnosPerf.params
@@ -0,0 +1,42 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7</testcases>
+    <Iterations>1</Iterations>
+    <WaitTime>30</WaitTime>
+    <RestIP>10.128.4.11</RestIP>
+    <NR_Switches>4</NR_Switches>
+    <NR_Links>6</NR_Links>
+    <MN_size>57</MN_size>
+    <TargetTime>20</TargetTime>
+    <FLOWDEF>~/flowdef_files/8N_DEMO/flowdef_test_30.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h1</destination>
+    </CASE1>       
+    <LINK1>
+        <dpid1>00:00:00:00:ba:5e:ba:13</dpid1>
+        <port1>22</port1>
+        <dpid2>00:00:20:4e:7f:51:8a:35</dpid2>
+        <port2>22</port2>
+    </LINK1>
+    <PING>
+        <source1>g4h02</source1>
+        <source2>g4h03</source2>
+        <source3>g4h04</source3>
+        <source4>g4h05</source4>
+        <source5>g4h06</source5>
+        <source6>g4h07</source6>
+        <source7>g4h08</source7>
+        <source8>g4h09</source8>
+        <source9>g4h10</source9>
+        <source10>g4h11</source10>
+        <target1>192.168.8.2</target1>
+        <target2>192.168.8.3</target2>
+        <target3>192.168.8.4</target3>
+        <target4>192.168.8.5</target4>
+        <target5>192.168.8.6</target5>
+        <target6>192.168.8.7</target6>
+        <target7>192.168.8.8</target7>
+        <target8>192.168.8.9</target8>
+        <target9>192.168.8.10</target9>
+        <target10>192.168.8.11</target10>
+    </PING>
+</PARAMS>      
diff --git a/TestON/tests/OnosPerf/OnosPerf.py b/TestON/tests/OnosPerf/OnosPerf.py
new file mode 100644
index 0000000..3225de1
--- /dev/null
+++ b/TestON/tests/OnosPerf/OnosPerf.py
@@ -0,0 +1,183 @@
+
+class OnosPerf:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        #main.step("Pulling and Compiling ONOS Repo")
+        #main.ONOS1.git_pull()
+        main.ONOS1.drop_keyspace()
+        time.sleep(5) 
+        main.ONOS1.start()
+        time.sleep(5)
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS5.start()
+        main.ONOS6.start()
+        main.ONOS7.start()
+        main.ONOS8.start()
+        main.step("Testing startup ONOS")
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running ",onfail="ONOS didn't start ...")
+
+    def CASE2(self,main) :
+        '''
+        Makes sure that the HW links are all up
+        Verifies that at least one mininet host exists.
+        Proves that there is actually a mininet that we are working with
+        '''
+        import time
+        main.case("Bringing Link up... ")
+        main.ONOS1.link_up(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
+        main.log.info( "Waiting 10 seconds.... " )
+        time.sleep(10)
+        main.step("Checking if MN switches exist")
+        result = main.TRUE
+        result = result & main.Mininet2.checknum(main.params['MN_size'])
+        result = result & main.Mininet3.checknum(main.params['MN_size'])
+        result = result & main.Mininet4.checknum(main.params['MN_size'])
+        result = result & main.Mininet5.checknum(main.params['MN_size'])
+        result = result & main.Mininet6.checknum(main.params['MN_size'])
+        result = result & main.Mininet7.checknum(main.params['MN_size'])
+        result = result & main.Mininet8.checknum(main.params['MN_size'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches")
+
+
+    def CASE3(self,main) :
+        '''
+        This Test case: 
+            - Clears out any leftover flows
+            - Adds new flows into ONOS
+            - Checks flows up to 10 times waiting for each flow to be caluculated and no "NOT" statements inte get_flow
+        '''
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.log.info("deleting...")
+        main.ONOS1.delete_flow("all")
+        main.log.info("adding...")
+        t1 = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])   
+        main.log.info("Checking...")
+        for i in range(15):
+            result = main.ONOS1.check_flow()
+            if result == main.TRUE: 
+                t2 = time.time()
+                main.log.info( 'Adding flows took %0.3f ms' % ((t2-t1)*1000.0))
+                break
+            time.sleep(2)
+            main.log.info("Checking Flows again...")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="flows are good",onfail="FLOWS not correct") 
+
+
+    def CASE4(self,main) :
+        '''
+        Tests a single ping 
+        '''
+        main.case("Testing ping...")
+        ping_result = main.Mininet4.pingHost(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
+        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE") 
+
+
+    def CASE5(self,main) :
+        '''
+        Starts continuous pings on the Mininet nodes
+        '''
+        import time
+        main.case("Starting long ping... ") 
+        main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
+        main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
+        main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
+        main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
+        main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
+        main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
+        main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
+        main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
+        main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
+        main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
+        time.sleep(5) 
+        result = main.Mininet4.pingstatus()
+        utilities.assert_equals(expect=main.TRUE,actual=result) 
+
+
+    def CASE6(self,main) : 
+        '''
+        Brings the defined link down and up a certain number of iterations
+        Stops the continuous pings that are running on the mininet machines from CASE 5
+        '''
+        import time
+        import os
+        main.log.case( "Link down number of iterations: " +  main.params['Iterations'] )
+        os.popen("echo "" > ~/tools/downtimes.log")
+        for i in range(int(main.params['Iterations'])):
+            main.log.info("Bringing Link down... ")
+            main.ONOS1.link_down(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
+            os.popen("echo `date +%s` >> ~/tools/downtimes.log")
+            main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
+            time.sleep( int(main.params['WaitTime']) )
+            #main.log.info("Checking...")
+            #t1 = time.time()
+            #for i in range(15):
+            #    result = main.ONOS1.check_flow()
+            #    if result == main.TRUE:
+            #        t2 = time.time()
+            #        main.log.info( 'Adding flows took %0.3f ms' % ((t2-t1)*1000.0))
+            #        break
+            #time.sleep(2)
+            #main.log.info("Checking Flows again...")
+            main.log.info("Bringing Link up... ")
+            main.ONOS1.link_up(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
+            main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
+            time.sleep( int(main.params['WaitTime']) )
+        main.case("Killing remote ping processes ") 
+        result = main.Mininet4.pingKill() 
+        utilities.assert_equals(expect=main.TRUE,actual=result) 
+       
+
+    def CASE7(self,main) :
+        '''
+        Processes all of the ping data and outputs raw data and an overall average
+        '''
+        import os
+        import time
+        main.case("Processing Ping data") 
+        time.sleep(3) 
+        result=os.popen("~/tools/shell.sh " + main.params['Iterations']).read()
+        average=result.split(":")[1] 
+        main.log.info( "Reroute times are... " ) 
+        main.log.report( result ) 
+        try:
+            if float(average) < float(main.params['TargetTime']) :
+                test=main.TRUE
+            else:
+                test=main.FALSE
+        except ValueError: 
+            main.log.error("Data is corrupted")
+            test=main.FALSE
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="Average is less then the target time!",onfail="Average is worse then target time... ")
diff --git a/TestON/tests/OnosPerf/OnosPerf.topo b/TestON/tests/OnosPerf/OnosPerf.topo
new file mode 100644
index 0000000..8e49fa3
--- /dev/null
+++ b/TestON/tests/OnosPerf/OnosPerf.topo
@@ -0,0 +1,132 @@
+<TOPOLOGY>
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+ 
+        <ONOS1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>3</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>5</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>6</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS4>
+        <ONOS5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS5>
+        <ONOS6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS6>
+        <ONOS7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+        </ONOS7>
+        <ONOS8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+        </ONOS8>
+
+
+        <Mininet2>
+            <host>10.128.6.2</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet2>
+        <Mininet3>
+            <host>10.128.6.3</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>5</connect_order>
+        </Mininet3>
+        <Mininet4>
+            <host>10.128.6.4</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>6</connect_order>
+        </Mininet4>
+        <Mininet5>
+            <host>10.128.6.5</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>7</connect_order>
+        </Mininet5>
+        <Mininet6>
+            <host>10.128.6.6</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>8</connect_order>
+        </Mininet6>
+        <Mininet7>
+            <host>10.128.6.7</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>9</connect_order>
+        </Mininet7>
+        <Mininet8>
+            <host>10.128.6.8</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>10</connect_order>
+        </Mininet8>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosPerf/__init__.py b/TestON/tests/OnosPerf/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosPerf/__init__.py
diff --git a/TestON/tests/OnosPerf4nodes/.OnosSanity.py.swp b/TestON/tests/OnosPerf4nodes/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/OnosPerf4nodes/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.params b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.params
new file mode 100644
index 0000000..90a751c
--- /dev/null
+++ b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.params
@@ -0,0 +1,40 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7</testcases>
+    <Iterations>1</Iterations>
+    <WaitTime>60</WaitTime>
+    <RestIP>10.128.100.4</RestIP>
+    <MN_size>57</MN_size>
+    <TargetTime>20</TargetTime>
+    <NR_Switches>25</NR_Switches>
+    <NR_Links>50</NR_Links>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h1</destination>
+    </CASE1>       
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <PING>
+        <source1>h6</source1>
+        <source2>h7</source2>
+        <source3>h8</source3>
+        <source4>h9</source4>
+        <source5>h10</source5>
+        <source6>h11</source6>
+        <source7>h12</source7>
+        <source8>h13</source8>
+        <source9>h14</source9>
+        <source10>h15</source10>
+        <target1>10.0.0.16</target1>
+        <target2>10.0.0.17</target2>
+        <target3>10.0.0.18</target3>
+        <target4>10.0.0.19</target4>
+        <target5>10.0.0.20</target5>
+        <target6>10.0.0.21</target6>
+        <target7>10.0.0.22</target7>
+        <target8>10.0.0.23</target8>
+        <target9>10.0.0.24</target9>
+        <target10>10.0.0.25</target10>
+    </PING>
+</PARAMS>      
diff --git a/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.py b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.py
new file mode 100644
index 0000000..8d65f35
--- /dev/null
+++ b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.py
@@ -0,0 +1,185 @@
+
+class OnosPerf4nodes:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.log.report("Checking if the startup was clean") 
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        main.ONOS1.get_version()
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5) 
+        main.ONOS1.start()
+        time.sleep(5)
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.step("Testing startup ONOS")
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        data = data & main.ONOS2.isup()
+        data = data & main.ONOS3.isup()
+        data = data & main.ONOS4.isup()
+        main.ONOS1.start_rest()
+        #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running ",onfail="ONOS didn't start ...")
+
+    def CASE2(self,main) :
+        '''
+        Makes sure that the HW links are all up
+        Verifies that at least one mininet host exists.
+        Proves that there is actually a mininet that we are working with
+        '''
+        import time
+        main.step("Checking if MN switches exist")
+        main.log.report("Check if MN switches exist")
+        result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        for i in range(2):
+            if result == main.FALSE: 
+                time.sleep(5)
+                result = main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+            else: 
+                break
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="MN switches exist",onfail="MN is missing switches and or links...")
+
+
+    def CASE3(self,main) :
+        '''
+        This Test case: 
+            - Clears out any leftover flows
+            - Adds new flows into ONOS
+            - Checks flows up to 10 times waiting for each flow to be caluculated and no "NOT" statements inte get_flow
+        '''
+        import time
+        main.log.report("Deleting and adding flows")
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.log.info("deleting...")
+        main.ONOS1.delete_flow("all")
+        main.log.info("adding...")
+        t1 = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])   
+        main.log.info("Checking...")
+        for i in range(15):
+            result = main.ONOS1.check_flow()
+            if result == main.TRUE: 
+                t2 = time.time()
+                main.log.info( 'Adding flows took %0.3f ms' % ((t2-t1)*1000.0))
+                break
+            time.sleep(5)
+            main.log.info("Checking Flows again...")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="flows are good",onfail="FLOWS not correct") 
+
+
+    def CASE4(self,main) :
+        '''
+        Tests a single ping 
+        '''
+        main.log.report("Testing a single ping")
+        main.case("Testing ping...")
+        ping_result = main.Mininet4.pingHost(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
+        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE") 
+
+
+    def CASE5(self,main) :
+        '''
+        Starts continuous pings on the Mininet nodes
+        '''
+        main.log.report("Starting continuous ping")
+        import time
+        main.case("Starting long ping... ") 
+        main.Mininet4.pingLong(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
+        main.Mininet4.pingLong(src=main.params['PING']['source2'],target=main.params['PING']['target2'])
+        main.Mininet4.pingLong(src=main.params['PING']['source3'],target=main.params['PING']['target3'])
+        main.Mininet4.pingLong(src=main.params['PING']['source4'],target=main.params['PING']['target4'])
+        main.Mininet4.pingLong(src=main.params['PING']['source5'],target=main.params['PING']['target5'])
+        main.Mininet4.pingLong(src=main.params['PING']['source6'],target=main.params['PING']['target6'])
+        main.Mininet4.pingLong(src=main.params['PING']['source7'],target=main.params['PING']['target7'])
+        main.Mininet4.pingLong(src=main.params['PING']['source8'],target=main.params['PING']['target8'])
+        main.Mininet4.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'])
+        main.Mininet4.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'])
+        time.sleep(5) 
+        result = main.Mininet4.pingstatus(src=main.params['PING']['source1'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source2'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source3'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source4'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source5'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source6'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source7'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source8'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source9'])
+        result = result & main.Mininet4.pingstatus(src=main.params['PING']['source10'])
+        utilities.assert_equals(expect=main.TRUE,actual=result) 
+
+
+    def CASE6(self,main) : 
+        '''
+        Brings the defined link down and up a certain number of iterations
+        Stops the continuous pings that are running on the mininet machines from CASE 5
+        '''
+        import time
+        import os
+        main.log.report("Links UP/DOWN and stop ping")
+        main.log.case( "Link down number of iterations: " +  main.params['Iterations'] )
+        os.popen("echo "" > ~/tools/downtimes.log")
+        for i in range(int(main.params['Iterations'])):
+            main.log.info("Bringing Link down... ")
+            #main.ONOS1.link_down(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
+            main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+            os.popen("echo `date +%s` >> ~/tools/downtimes.log")
+            main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
+            time.sleep( int(main.params['WaitTime']) )
+            main.log.info("Bringing Link up... ")
+            #main.ONOS1.link_up(SDPID=main.params['LINK1']['dpid1'],SPORT=main.params['LINK1']['port1'],DDPID=main.params['LINK1']['dpid2'],DPORT=main.params['LINK1']['port2'])
+            main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
+            main.log.info( "Waiting " + main.params['WaitTime'] + " seconds.... " )
+            time.sleep( int(main.params['WaitTime']) )
+        main.case("Killing remote ping processes ") 
+        result = main.Mininet4.pingKill() 
+        utilities.assert_equals(expect=main.TRUE,actual=result) 
+       
+
+    def CASE7(self,main) :
+        '''
+        Processes all of the ping data and outputs raw data and an overall average
+        '''
+        import os
+        import time
+        main.log.report("Process ping data")
+        main.case("Processing Ping data") 
+        time.sleep(3) 
+        result=os.popen("/home/admin/tools/shell.sh " + main.params['Iterations']).read()
+        average=result.split(":")[1] 
+        main.log.info( "Reroute times are... " ) 
+        main.log.report( result ) 
+        try:
+            if float(average) < float(main.params['TargetTime']) :
+                test=main.TRUE
+            else:
+                test=main.FALSE
+        except ValueError: 
+            main.log.error("Data is corrupted")
+            test=main.FALSE
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="Average is less then the target time!",onfail="Average is worse then target time... ")
diff --git a/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.topo b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.topo
new file mode 100644
index 0000000..5f35b09
--- /dev/null
+++ b/TestON/tests/OnosPerf4nodes/OnosPerf4nodes.topo
@@ -0,0 +1,99 @@
+<TOPOLOGY>
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>2</connect_order>
+        </Cassandra1>
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>3</connect_order>
+        </Cassandra2>
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>4</connect_order>
+        </Cassandra3>
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+        </Cassandra4>
+ 
+        <ONOS1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>6</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS4>
+
+        <Mininet1>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+        <Mininet4>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>11</connect_order>
+        </Mininet4>
+        <Mininet8>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>12</connect_order>
+        </Mininet8>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosPerf4nodes/__init__.py b/TestON/tests/OnosPerf4nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosPerf4nodes/__init__.py
diff --git a/TestON/tests/OnosSanity/OnosSanity.params b/TestON/tests/OnosSanity/OnosSanity.params
new file mode 100644
index 0000000..85b626a
--- /dev/null
+++ b/TestON/tests/OnosSanity/OnosSanity.params
@@ -0,0 +1,17 @@
+<PARAMS>
+    <testcases>1</testcases>
+    <FLOWDEF>~/tmp</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+</PARAMS>      
diff --git a/TestON/tests/OnosSanity/OnosSanity.py b/TestON/tests/OnosSanity/OnosSanity.py
new file mode 100644
index 0000000..baaec06
--- /dev/null
+++ b/TestON/tests/OnosSanity/OnosSanity.py
@@ -0,0 +1,130 @@
+
+class OnosSanity :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        import time
+        main.case("Checking if the startup was clean...") 
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        main.log.info("\n\n\t\t\t\t ONOS VERSION")
+        main.ONOS1.get_version()
+        main.log.info("\n\n")
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+            
+    def CASE2(self,main) :
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        
+    def CASE3(self,main) :
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        result = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while result == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            result = main.ONOS1.check_flow()
+            if result== main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif result == main.FALSE and count == 6:
+                success = main.FALSE
+                break
+            else:
+                success = main.TRUE
+                break
+        endTime = time.time()
+        main.log.info("\n\t\t\t\tTime to add flows: "+str(endTime-strtTime)+" seconds")
+        utilities.assert_equals(expect=main.TRUE,actual=success,onpass="Flow check PASS",onfail="Flow check FAIL")
+        #time.sleep(10)
+        #data = main.ONOS1.get_flow("all")   
+
+    def CASE4(self,main) :
+        main.case("Testing ping...")
+        ping_result = main.Mininet1.pingHost(src=main.params['PING']['source1'],target=main.params['PING']['target1'])
+        utilities.assert_equals(expect=main.TRUE,actual=ping_result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE") 
+
+    def CASE5(self,main) :
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        time.sleep(10)
+
+    def CASE6(self,main) :
+        import time
+        main.case("Checking flows")
+        result = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while result == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            result = main.ONOS1.check_flow()
+            if result== main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif result == main.FALSE and count == 6:
+                success = main.FALSE
+                break
+            else:
+                success = main.TRUE
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=success,onpass="Flow check PASS",onfail="Flow check FAIL")
+   
+    def CASE7(self,main) :
+        main.case("Pinging EVERYTHINGGG!!!")
+        import time
+        strtTime = time.time()
+        result = main.TRUE
+        exit = main.FALSE
+        count = 1
+        while 1:
+            for i in range(6, 16) :
+                main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+                ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+                if ping == main.FALSE and count < 6:
+                    count = count + 1
+                    main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                    time.sleep(10)
+                    break
+                elif ping == main.FALSE and count ==6:
+                    main.log.error("Ping test failed")
+                    exit = main.TRUE
+                    break
+                elif ping == main.TRUE:
+                    exit = main.TRUE
+            if exit == main.TRUE:
+               endTime = time.time() 
+               break
+        main.log.info("\n\t\t\t\tTime to complete ping test: "+str(endTime-strtTime)+" seconds")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosSanity/OnosSanity.topo b/TestON/tests/OnosSanity/OnosSanity.topo
new file mode 100644
index 0000000..f55162c
--- /dev/null
+++ b/TestON/tests/OnosSanity/OnosSanity.topo
@@ -0,0 +1,50 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+
+             </COMPONENTS>
+        </ONOS1>
+
+        <Mininet1>
+            <host>10.128.4.26</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-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity/OnosSanity.topo.back b/TestON/tests/OnosSanity/OnosSanity.topo.back
new file mode 100644
index 0000000..9561597
--- /dev/null
+++ b/TestON/tests/OnosSanity/OnosSanity.topo.back
@@ -0,0 +1,42 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <COMPONENTS>
+            
+             </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.26:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity/__init__.py b/TestON/tests/OnosSanity/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosSanity/__init__.py
diff --git a/TestON/tests/OnosSanity4nodes/.OnosSanity.topo.swp b/TestON/tests/OnosSanity4nodes/.OnosSanity.topo.swp
new file mode 100644
index 0000000..c2a0aff
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/.OnosSanity.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swn b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swn
new file mode 100644
index 0000000..cb578ac
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swn
Binary files differ
diff --git a/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swo b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swo
new file mode 100644
index 0000000..5389b47
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.py.swo
Binary files differ
diff --git a/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.topo.swp b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.topo.swp
new file mode 100644
index 0000000..1500dc4
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/.OnosSanity4nodes.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.params b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.params
new file mode 100644
index 0000000..6fdbea5
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.params
@@ -0,0 +1,27 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7</testcases>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <CTRL>
+        <ip1>10.128.100.1</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.100.4</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.100.5</ip3>
+        <port3>6633</port3>
+        <ip4>10.128.100.6</ip4>
+        <port4>6633</port4>
+    </CTRL>
+</PARAMS>      
diff --git a/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.py b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.py
new file mode 100644
index 0000000..ef3b47a
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.py
@@ -0,0 +1,278 @@
+
+class OnosSanity4nodes :
+
+    def __init__(self) :
+        self.default = ''
+
+#**********************************************************************************************************************************************************************************************
+#Test startup
+#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
+    def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
+        import time
+        main.log.report("Pulling latest code from github to all nodes")
+        main.ONOS1.git_pull()
+        main.ONOS2.git_pull()
+        main.ONOS3.git_pull()
+        main.ONOS4.git_pull()
+        main.ONOS1.drop_keyspace()
+        main.ONOS1.start()
+        time.sleep(10)
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.start_rest()
+        main.ONOS1.get_version()
+        main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.report("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+           
+#**********************************************************************************************************************************************************************************************
+#Assign Controllers
+#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
+#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
+#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
+#      the controllers already assigned to the switch are not specified.
+
+    def CASE2(self,main) :    #Make sure mininet exists, then assign controllers to switches
+        import time
+        main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        main.step("assigning ONOS controllers to switches")
+        for i in range(25): 
+            if i < 3:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            elif i >= 3 and i < 5:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            elif i >= 5 and i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+        main.Mininet1.get_sw_controller("s1")       
+ 
+# **********************************************************************************************************************************************************************************************
+#Add Flows
+#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
+#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
+
+    def CASE3(self,main) :    #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
+        main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        tmp = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while tmp == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            tmp = main.ONOS1.check_flow()
+            if tmp == main.FALSE and count < 6:
+                count = count + 1
+                main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif tmp == main.FALSE and count == 6:
+                result = main.FALSE
+                break
+            else:
+                result = main.TRUE
+                break
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tFlows failed check")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+
+#**********************************************************************************************************************************************************************************************
+#This test case removes Controllers 2,3, and 4 then performs a ping test.
+#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
+#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 10 seconds before trying again.
+#If the ping test fails 6 times, then the test case will return false
+
+    def CASE4(self,main) :
+        main.log.report("Remove ONOS 2,3,4 then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])  #Assigning a single controller removes all other controllers
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time() 
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAIL")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#This test case restores the controllers removed by Case 4 then performs a ping test.
+
+    def CASE5(self,main) :
+        main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
+
+    def CASE6(self,main) :
+        main.log.report("Bring Link between s1 and s2 down, wait 20 seconds, then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(20)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                i = 6
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings the link that Case 6 took down  back up, then runs a ping test to view reroute time
+
+    def CASE7(self,main) :
+        main.log.report("Bring Link between s1 and s2 up, wait 20 seconds, then ping until all hosts are reachable or fail after 3 attempts")
+        import time
+        main.case("Bringing Link up... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="up")
+        time.sleep(20)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link UP!",onfail="Link not brought up...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 3:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 10 seconds")
+                i = 6
+                time.sleep(10)
+            elif ping == main.FALSE and count ==3:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TESTS FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo
new file mode 100644
index 0000000..9086c16
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo
@@ -0,0 +1,139 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Zookeeper2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper2>
+
+        <Zookeeper3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper3>
+       
+        <Zookeeper4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper4>
+
+        <Cassandra1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra2>
+       
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra3>
+       
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra4>
+
+        <ONOS1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS3>
+       
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>12</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS4>
+
+        <Mininet1>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>13</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo.back b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo.back
new file mode 100644
index 0000000..9561597
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/OnosSanity4nodes.topo.back
@@ -0,0 +1,42 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <COMPONENTS>
+            
+             </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.26:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity4nodes/__init__.py b/TestON/tests/OnosSanity4nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosSanity4nodes/__init__.py
diff --git a/TestON/tests/OnosSanity8nodes/.OnosSanity.topo.swp b/TestON/tests/OnosSanity8nodes/.OnosSanity.topo.swp
new file mode 100644
index 0000000..c2a0aff
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/.OnosSanity.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.params.swp b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.params.swp
new file mode 100644
index 0000000..127ce94
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.params.swp
Binary files differ
diff --git a/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swn b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swn
new file mode 100644
index 0000000..cb578ac
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swn
Binary files differ
diff --git a/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swo b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swo
new file mode 100644
index 0000000..5389b47
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.py.swo
Binary files differ
diff --git a/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.topo.swp b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.topo.swp
new file mode 100644
index 0000000..1500dc4
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/.OnosSanity4nodes.topo.swp
Binary files differ
diff --git a/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.params b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.params
new file mode 100644
index 0000000..2e98b7d
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.params
@@ -0,0 +1,35 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7</testcases>
+    <FLOWDEF>~/flowdef_files/Center_Triangle/flowdef_20.txt</FLOWDEF>
+    <CASE1>       
+        <destination>h6</destination>
+    </CASE1>       
+    <PING>
+        <source1>h6</source1>
+        <target1>h31</target1>
+        <source2>h8</source2>
+        <target2>h33</target2>
+    </PING>
+    <LINK>
+        <begin>s1</begin>
+        <end>s2</end>
+    </LINK>
+    <CTRL>
+        <ip1>10.128.4.11</ip1>
+        <port1>6633</port1>
+        <ip2>10.128.4.12</ip2>
+        <port2>6633</port2>
+        <ip3>10.128.4.13</ip3>
+        <port3>6633</port3>
+        <ip4>10.128.4.14</ip4>
+        <port4>6633</port4>
+        <ip5>10.128.4.15</ip5>
+        <port5>6633</port5>
+        <ip6>10.128.4.16</ip6>
+        <port6>6633</port6>
+        <ip7>10.128.4.17</ip7>
+        <port7>6633</port7>
+        <ip8>10.128.4.18</ip8>
+        <port8>6633</port8>
+    </CTRL>
+</PARAMS>      
diff --git a/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.py b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.py
new file mode 100644
index 0000000..f849aaf
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.py
@@ -0,0 +1,268 @@
+
+class OnosSanity8nodes :
+
+    def __init__(self) :
+        self.default = ''
+
+#**********************************************************************************************************************************************************************************************
+#Test startup
+#Tests the startup of Zookeeper1, Cassandra1, and ONOS1 to be certain that all started up successfully
+    def CASE1(self,main) :  #Check to be sure ZK, Cass, and ONOS are up, then get ONOS version
+        main.log.report("Startup check Zookeeper1, Cassandra1, and ONOS1 connections")
+        import time
+        main.case("Checking if the startup was clean...") 
+        main.step("Testing startup Zookeeper")   
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")   
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")   
+        data = main.ONOS1.isup()
+        if data == main.FALSE: 
+            main.log.report("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5) 
+            data = main.ONOS1.isup()
+        main.log.report("\n\n\t\t\t\t ONOS VERSION")
+        main.ONOS1.get_version()
+        main.log.info("\n\n")
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+           
+#**********************************************************************************************************************************************************************************************
+#Assign Controllers
+#This test first checks the ip of a mininet host, to be certain that the mininet exists(Host is defined in Params as <CASE1><destination>).
+#Then the program assignes each ONOS instance a single controller to a switch(To be the initial master), then assigns all controllers.
+#NOTE: The reason why all four controllers are assigned although one was already assigned as the master is due to the 'ovs-vsctl set-controller' command erases all present controllers if
+#      the controllers already assigned to the switch are not specified.
+
+    def CASE2(self,main) :    #Make sure mininet exists, then assign controllers to switches
+        import time
+        main.log.report("Check if mininet started properly, then assign controllers ONOS 1,2,3 and 4")
+        main.case("Checking if one MN host exists")
+        main.step("Host IP Checking using checkIP")
+        result = main.Mininet1.checkIP(main.params['CASE1']['destination'])
+        main.step("Verifying the result")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Host IP address configured",onfail="Host IP address not configured")
+        main.step("assigning ONOS controllers to switches")
+        for i in range(25): 
+            if i < 3:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+            elif i >= 3 and i < 5:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip2'],port1=main.params['CTRL']['port2'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+            elif i >= 5 and i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip3'],port1=main.params['CTRL']['port3'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip4'],port1=main.params['CTRL']['port4'])
+                time.sleep(1)
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+        main.Mininet1.get_sw_controller("s1")       
+ 
+# **********************************************************************************************************************************************************************************************
+#Add Flows
+#Deletes any remnant flows from any previous test, add flows from the file labeled <FLOWDEF>, then runs the check flow test
+#NOTE: THE FLOWDEF FILE MUST BE PRESENT ON TESTON VM!!! TestON will copy the file from its home machine into /tmp/flowtmp on the machine the ONOS instance is present on
+
+    def CASE3(self,main) :    #Delete any remnant flows, then add flows, and time how long it takes flow tables to update
+        main.log.report("Delete any flows from previous tests, then add flows from FLOWDEF file, then wait for switch flow tables to update")
+        import time
+        main.case("Taking care of these flows!") 
+        main.step("Cleaning out any leftover flows...")
+        main.ONOS1.delete_flow("all")
+        time.sleep(5)
+        strtTime = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.case("Checking flows")
+        tmp = main.FALSE
+        count = 1
+        main.log.info("Wait for flows to settle, then check")
+        while tmp == main.FALSE:
+            main.step("Waiting")
+            time.sleep(10)
+            main.step("Checking")
+            tmp = main.ONOS1.check_flow()
+            if tmp == main.FALSE and count < 6:
+                count = count + 1
+                main.log.report("Flow failed, waiting 10 seconds then making attempt number "+str(count))
+            elif tmp == main.FALSE and count == 6:
+                result = main.FALSE
+                break
+            else:
+                result = main.TRUE
+                break
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\n\t\t\t\tTime to add flows: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tFlows failed check")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Flow check PASS",onfail="Flow check FAIL")
+
+#**********************************************************************************************************************************************************************************************
+#This test case removes Controllers 2,3, and 4 then performs a ping test.
+#The assign controller is used because the ovs-vsctl module deletes all current controllers when a new controller is assigned.
+#The ping test performs single pings on hosts from opposite sides of the topology. If one ping fails, the test waits 10 seconds before trying again.
+#If the ping test fails 6 times, then the test case will return false
+
+    def CASE4(self,main) :
+        main.log.report("Remove ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])  #Assigning a single controller removes all other controllers
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time() 
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAIL")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#This test case restores the controllers removed by Case 4 then performs a ping test.
+
+    def CASE5(self,main) :
+        main.log.report("Restore ONOS 2,3,4 then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        for i in range(25):
+            if i < 15:
+                j=i+1
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+            else:
+                j=i+16
+                main.Mininet1.assign_sw_controller(sw="s"+str(j),ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'],ip2=main.params['CTRL']['ip2'],port2=main.params['CTRL']['port2'],ip3=main.params['CTRL']['ip3'],port3=main.params['CTRL']['port3'],ip4=main.params['CTRL']['ip4'],port4=main.params['CTRL']['port4'],ip5=main.params['CTRL']['ip5'],port5=main.params['CTRL']['port5'],ip6=main.params['CTRL']['ip6'],port6=main.params['CTRL']['port6'],ip7=main.params['CTRL']['ip7'],port7=main.params['CTRL']['port7'],ip8=main.params['CTRL']['ip8'],port8=main.params['CTRL']['port8'])
+                time.sleep(1)
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                i = 6
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings a link that all flows pass through in the mininet down, then runs a ping test to view reroute time
+
+    def CASE6(self,main) :
+        main.log.report("Bring Link between s1 and s2 down, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link down... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TEST FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
+# **********************************************************************************************************************************************************************************************
+#Brings the link that Case 6 took down  back up, then runs a ping test to view reroute time
+
+    def CASE7(self,main) :
+        main.log.report("Bring Link between S1 and S2 up, then ping until all hosts are reachable or fail after 6 attempts")
+        import time
+        main.case("Bringing Link back up... ")
+        result = main.Mininet1.link(END1=main.params['LINK']['begin'],END2=main.params['LINK']['end'],OPTION="down")
+        time.sleep(3)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link DOWN!",onfail="Link not brought down...")
+        strtTime = time.time()
+        count = 1
+        i = 6
+        while i < 16 :
+            main.log.info("\n\t\t\t\th"+str(i)+" IS PINGING h"+str(i+25) )
+            ping = main.Mininet1.pingHost(src="h"+str(i),target="h"+str(i+25))
+            if ping == main.FALSE and count < 6:
+                count = count + 1
+                main.log.info("Ping failed, making attempt number "+str(count)+" in 15 seconds")
+                i = 6
+                time.sleep(15)
+            elif ping == main.FALSE and count ==6:
+                main.log.error("Ping test failed")
+                i = 17
+                result = main.FALSE
+            elif ping == main.TRUE:
+                i = i + 1
+                result = main.TRUE
+        endTime = time.time()
+        if result == main.TRUE:
+            main.log.report("\tTime to complete ping test: "+str(round(endTime-strtTime,2))+" seconds")
+        else:
+            main.log.report("\tPING TESTS FAILED")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="NO PACKET LOSS, HOST IS REACHABLE",onfail="PACKET LOST, HOST IS NOT REACHABLE")
+
diff --git a/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo
new file mode 100644
index 0000000..6fd87d8
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo
@@ -0,0 +1,259 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Zookeeper2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper2>
+
+        <Zookeeper3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper3>
+       
+        <Zookeeper4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>4</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper4>
+
+        <Zookeeper5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>5</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper5>
+
+        <Zookeeper6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>6</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper6>
+
+        <Zookeeper7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>7</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper7>
+
+        <Zookeeper8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>8</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper8>
+
+        <Cassandra1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>9</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Cassandra2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>10</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra2>
+       
+        <Cassandra3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>11</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra3>
+       
+        <Cassandra4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>12</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra4>
+
+        <Cassandra5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>13</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra5>
+
+        <Cassandra6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>14</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra6>
+
+        <Cassandra7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>15</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra7>
+
+        <Cassandra8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>16</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra8>
+
+        <ONOS1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>17</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS1>
+
+        <ONOS2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>18</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS2>
+
+        <ONOS3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>19</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS3>
+       
+        <ONOS4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>20</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS4>
+
+        <ONOS5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>21</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS5>
+
+        <ONOS6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>22</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS6>
+
+        <ONOS7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>23</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS7>
+
+        <ONOS8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>24</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </ONOS8>
+
+        <Mininet1>
+            <host>10.128.7.7</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>25</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/topo-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo.back b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo.back
new file mode 100644
index 0000000..9561597
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/OnosSanity8nodes.topo.back
@@ -0,0 +1,42 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <COMPONENTS>
+            
+             </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.26:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosSanity8nodes/__init__.py b/TestON/tests/OnosSanity8nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosSanity8nodes/__init__.py
diff --git a/TestON/tests/OnosScale/.OnosSanity.py.swp b/TestON/tests/OnosScale/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/OnosScale/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/OnosScale/OnosScale.params b/TestON/tests/OnosScale/OnosScale.params
new file mode 100644
index 0000000..68dabe7
--- /dev/null
+++ b/TestON/tests/OnosScale/OnosScale.params
@@ -0,0 +1,9 @@
+<PARAMS>
+    <testcases>1,2</testcases>
+    <Iterations>2</Iterations>
+    <WaitTime>20</WaitTime>
+    <TargetTime>20</TargetTime>
+    <RestIP>10.128.4.11</RestIP>
+    <NR_Switches>405</NR_Switches>
+    <NR_Links>802</NR_Links>
+</PARAMS>      
diff --git a/TestON/tests/OnosScale/OnosScale.py b/TestON/tests/OnosScale/OnosScale.py
new file mode 100644
index 0000000..2655089
--- /dev/null
+++ b/TestON/tests/OnosScale/OnosScale.py
@@ -0,0 +1,133 @@
+
+class OnosScale:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")
+        main.ONOS1.start()
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS5.start()
+        main.ONOS6.start()
+        main.ONOS7.start()
+        main.ONOS8.start()
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        topoview = main.TRUE
+        if topoview == main.TRUE & data == main.TRUE :
+            data = main.TRUE
+        else:
+            data = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running and has full view of topology",onfail="ONOS didn't start or has fragmented view of topology...")
+
+    def CASE2(self,main) :
+        '''
+        Second case is to time the convergence time of a topology for ONOS. 
+        It shuts down the ONOS, drops keyspace, starts ONOS...
+        Then it points all the mininet switches at the ONOS node and times how long it take for the ONOS rest call to reflect the correct count of switches and links.
+        '''
+        import time
+        main.case("Timing Onos Convergence for switch -> ONOS1")
+        main.step("Bringing ONOS down...") 
+        main.log.info("all switch no controllers") 
+        main.Mininet2.ctrl_none()
+        main.Mininet3.ctrl_none()
+        main.Mininet4.ctrl_none()
+        main.Mininet5.ctrl_none()
+        main.Mininet6.ctrl_none()
+        main.Mininet7.ctrl_none()
+        main.Mininet8.ctrl_none()
+        main.log.info("bringing ONOS down") 
+        main.ONOS1.stop()
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        main.ONOS5.stop()
+        main.ONOS6.stop()
+        main.ONOS7.stop()
+        main.ONOS8.stop()
+        main.log.info("Dropping keyspace...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5)
+        main.log.info("Bringing ONOS up")
+        main.ONOS1.start()
+        time.sleep(5) 
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS5.start()
+        main.ONOS6.start()
+        main.ONOS7.start()
+        main.ONOS8.start()
+        main.ONOS1.isup()
+        main.ONOS2.isup()
+        main.ONOS3.isup()
+        main.ONOS4.isup()
+        main.ONOS5.isup()
+        main.ONOS6.isup()
+        main.ONOS7.isup()
+        main.ONOS8.isup()
+        main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        main.log.info("Pointing the Switches at controller... then BEGIN time") 
+        main.Mininet2.ctrl_local()
+        main.Mininet3.ctrl_local()
+        main.Mininet4.ctrl_local()
+        main.Mininet5.ctrl_local()
+        main.Mininet6.ctrl_local()
+        main.Mininet7.ctrl_local()
+        main.Mininet8.ctrl_local()
+        #main.Mininet2.ctrl_one(main.params['RestIP'])
+        #main.Mininet3.ctrl_one(main.params['RestIP'])
+        #main.Mininet4.ctrl_one(main.params['RestIP'])
+        #main.Mininet5.ctrl_one(main.params['RestIP'])
+        #main.Mininet6.ctrl_one(main.params['RestIP'])
+        #main.Mininet7.ctrl_one(main.params['RestIP'])
+        #main.Mininet8.ctrl_one(main.params['RestIP'])
+        t1 = time.time()
+        for i in range(4) : 
+            result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+            if result == 1 : 
+                break
+            else : 
+                time.sleep(1)
+        t2 = time.time()
+        conv_time = t2 - t1
+        if result == 1 : 
+            main.log.info( "Convergence time of : %f seconds" % conv_time ) 
+            if float(conv_time) < float(main.params['TargetTime']) :
+                test=main.TRUE
+                main.log.info("Time is less then supplied target time")
+            else:
+                test=main.FALSE
+                main.log.info("Time is greater then supplied target time")
+        else : 
+            main.log.info( "ONOS did NOT converge over : %f seconds" % conv_time ) 
+            test=main.FALSE
+ 
+        utilities.assert_equals(expect=main.TRUE,actual=test)
+
diff --git a/TestON/tests/OnosScale/OnosScale.topo b/TestON/tests/OnosScale/OnosScale.topo
new file mode 100644
index 0000000..41e5854
--- /dev/null
+++ b/TestON/tests/OnosScale/OnosScale.topo
@@ -0,0 +1,133 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOS1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>4</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.4.12</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>5</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.4.13</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>6</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.4.14</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS4>
+        <ONOS5>
+            <host>10.128.4.15</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS5>
+        <ONOS6>
+            <host>10.128.4.16</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS6>
+        <ONOS7>
+            <host>10.128.4.17</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+        </ONOS7>
+        <ONOS8>
+            <host>10.128.4.18</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>11</connect_order>
+        </ONOS8>
+
+
+        <Zookeeper1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.4.11</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Mininet2>
+            <host>10.128.6.2</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet2>
+        <Mininet3>
+            <host>10.128.6.3</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet3>
+        <Mininet4>
+            <host>10.128.6.4</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet4>
+        <Mininet5>
+            <host>10.128.6.5</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet5>
+        <Mininet6>
+            <host>10.128.6.6</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet6>
+        <Mininet7>
+            <host>10.128.6.7</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet7>
+        <Mininet8>
+            <host>10.128.6.8</host>
+            <user>miniuser</user>
+            <password>onos_test</password>
+            <type>RemoteMininetDriver</type>
+            <connect_order>4</connect_order>
+        </Mininet8>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosScale/OnosScale.topo.back b/TestON/tests/OnosScale/OnosScale.topo.back
new file mode 100644
index 0000000..a17ae48
--- /dev/null
+++ b/TestON/tests/OnosScale/OnosScale.topo.back
@@ -0,0 +1,52 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOS1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>3</connect_order>
+            <COMPONENTS>
+
+             </COMPONENTS>
+        </ONOS1>
+
+        <!--
+        <Zookeeper1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>1</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.4.26</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Cassandra1>
+
+        <Mininet1>
+            <host>10.128.4.26</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-2sw-2host.py </arg1>
+                <arg2> --topo mytopo</arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+        -->
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosScale/__init__.py b/TestON/tests/OnosScale/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosScale/__init__.py
diff --git a/TestON/tests/OnosScale/check_status.py b/TestON/tests/OnosScale/check_status.py
new file mode 100755
index 0000000..c725cec
--- /dev/null
+++ b/TestON/tests/OnosScale/check_status.py
@@ -0,0 +1,111 @@
+#! /usr/bin/env python
+import json
+import os
+import sys
+
+# http://localhost:8080/wm/core/topology/switches/all/json
+# http://localhost:8080/wm/core/topology/links/json
+# http://localhost:8080/wm/registry/controllers/json
+# http://localhost:8080/wm/registry/switches/json"
+
+def get_json(url):
+  try:
+    command = "curl -s %s" % (url)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)
+  except:
+    print "REST IF %s has issue" % command
+    parsedResult = ""
+
+  if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+    print "REST %s returned code %s" % (command, parsedResult['code'])
+    parsedResult = ""
+
+  return parsedResult 
+
+def check_switch(RestIP,correct_nr_switch ):
+  buf = ""
+  retcode = 0
+  RestPort="8080"
+
+  url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+  registry = get_json(url)
+
+  if registry == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+
+  buf += "switch: total %d switches\n" % len(parsedResult)
+  cnt = 0
+  active = 0
+
+  for s in parsedResult:
+    cnt += 1
+
+    if s['state']  == "ACTIVE":
+      active += 1
+
+    if not s['dpid'] in registry:
+      buf += "switch:  dpid %s lost controller\n" % (s['dpid'])
+
+  buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
+  if correct_nr_switch != cnt:
+    buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
+    retcode = 1
+
+  if correct_nr_switch != active:
+    buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
+    retcode = 1
+
+  return (retcode, buf)
+
+def check_link(RestIP, nr_links):
+  RestPort = "8080"
+  buf = ""
+  retcode = 0
+
+  url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
+  intra = 0
+  interlink=0
+
+  for s in parsedResult:
+    intra = intra + 1 
+
+  if intra != nr_links:
+    buf += "link fail: network %d should have %d intra links but has %d\n" % (1, nr_links, intra)
+    retcode = 1
+
+  return (retcode, buf)
+
+#if __name__ == "__main__":
+def check_status(ip, numoswitch, numolink):
+
+  switch = check_switch(ip, numoswitch)
+  link = check_link(ip, numolink)
+  value = switch[0]
+  value += link[0]
+  if value != 0:
+    print "FAIL"
+    return 0
+  else: 
+    print "PASS"
+    return 1
+  print "%s" % switch[1]
+  print "%s" % link[1]
+ # print "%s" % check_switch_local()[1]
+ # print "%s" % check_controllers(8)[1]
diff --git a/TestON/tests/OnosScale4nodes/.OnosSanity.py.swp b/TestON/tests/OnosScale4nodes/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/OnosScale4nodes/OnosScale4nodes.params b/TestON/tests/OnosScale4nodes/OnosScale4nodes.params
new file mode 100644
index 0000000..dff7284
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/OnosScale4nodes.params
@@ -0,0 +1,9 @@
+<PARAMS>
+    <testcases>1,2,3,4</testcases>
+    <Iterations>2</Iterations>
+    <WaitTime>50</WaitTime>
+    <TargetTime>50</TargetTime>
+    <RestIP>10.128.100.4</RestIP>
+    <NR_Switches>100</NR_Switches>
+    <NR_Links>198</NR_Links>
+</PARAMS>      
diff --git a/TestON/tests/OnosScale4nodes/OnosScale4nodes.py b/TestON/tests/OnosScale4nodes/OnosScale4nodes.py
new file mode 100644
index 0000000..a054088
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/OnosScale4nodes.py
@@ -0,0 +1,217 @@
+
+class OnosScale4nodes:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.log.report("Checking is startup was clean")
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        main.ONOS1.get_version()
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")
+        main.ONOS1.start()
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        #topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        topoview = main.TRUE
+        if topoview == main.TRUE & data == main.TRUE :
+            data = main.TRUE
+        else:
+            data = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running and has full view of topology",onfail="ONOS didn't start or has fragmented view of topology...")
+
+    def CASE2(self,main) :
+        '''
+        Second case is to time the convergence time of a topology for ONOS. 
+        It shuts down the ONOS, drops keyspace, starts ONOS...
+        Then it points all the mininet switches at the ONOS node and times how long it take for the ONOS rest call to reflect the correct count of switches and links.
+        '''
+        import time
+        main.log.report("Time convergence for switches -> single ONOS node in cluster")
+        main.case("Timing Onos Convergence for switch -> a single ONOS node in the cluster")
+        main.step("Bringing ONOS down...") 
+        main.log.info("all switch no controllers") 
+        main.Mininet1.ctrl_none()
+        main.log.info("bringing ONOS down") 
+        main.ONOS1.stop()
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        main.log.info("Dropping keyspace...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5)
+        main.log.info("Bringing ONOS up")
+        main.ONOS1.start()
+        time.sleep(5) 
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.isup()
+        main.ONOS2.isup()
+        main.ONOS3.isup()
+        main.ONOS4.isup()
+        main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        main.log.info("Pointing the Switches at ONE controller... then BEGIN time") 
+        main.Mininet1.ctrl_local()
+        t1 = time.time()
+        for i in range(9) : 
+            result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+            if result == 1 : 
+                break
+            else : 
+                time.sleep(1)
+        t2 = time.time()
+        conv_time = t2 - t1
+        main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            main.log.report( "Convergence time of : %f seconds" % conv_time ) 
+            if float(conv_time) < float(main.params['TargetTime']) :
+                test=main.TRUE
+                main.log.info("Time is less then supplied target time")
+            else:
+                test=main.FALSE
+                main.log.info("Time is greater then supplied target time")
+        else : 
+            main.log.report( "ONOS did NOT converge over : %f seconds" % conv_time ) 
+            test=main.FALSE
+ 
+        utilities.assert_equals(expect=main.TRUE,actual=test)
+
+    def CASE3(self,main) :
+        '''
+        Second case is to time the convergence time of a topology for ONOS. 
+        It shuts down the ONOS, drops keyspace, starts ONOS...
+        Then it points all the mininet switches at all ONOS nodes and times how long it take for the ONOS rest call to reflect the correct count of switches and links.
+        '''
+        import time
+        main.log.report("Time convergence for switches -> all ONOS nodes in cluster")
+        main.case("Timing Onos Convergence for switch -> all ONOS nodes in cluster")
+        main.step("Bringing ONOS down...") 
+        main.log.info("all switch no controllers") 
+        main.Mininet1.ctrl_none()
+        main.log.info("bringing ONOS down") 
+        main.ONOS1.stop()
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        main.log.info("Dropping keyspace...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5)
+        main.log.info("Bringing ONOS up")
+        main.ONOS1.start()
+        time.sleep(5) 
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.isup()
+        main.ONOS2.isup()
+        main.ONOS3.isup()
+        main.ONOS4.isup()
+        main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        main.log.info("Pointing the Switches at ALL controllers... then BEGIN time") 
+        main.Mininet1.ctrl_all()
+        t1 = time.time()
+        for i in range(9) : 
+            result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+            if result == 1 : 
+                break
+            else : 
+                time.sleep(1)
+        t2 = time.time()
+        conv_time = t2 - t1
+        main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            main.log.report( "Convergence time of : %f seconds" % conv_time ) 
+            if float(conv_time) < float(main.params['TargetTime']) :
+                test=main.TRUE
+                main.log.info("Time is less then supplied target time")
+            else:
+                test=main.FALSE
+                main.log.info("Time is greater then supplied target time")
+        else : 
+            main.log.report( "ONOS did NOT converge over : %f seconds" % conv_time ) 
+            test=main.FALSE
+ 
+        utilities.assert_equals(expect=main.TRUE,actual=test)
+
+    def CASE4(self,main) :
+        '''
+        Second case is to time the convergence time of a topology for ONOS. 
+        It shuts down the ONOS, drops keyspace, starts ONOS...
+        Then it evenly points all mininet switches to all ONOS nodes, but only one node, and times how long it take for the ONOS rest call to reflect the correct count of switches and links.
+        '''
+        import time
+        main.log.report("Time convergence for switches -> one of all nodes in cluster")
+        main.case("Timing Onos Convergence for even single controller distribution")
+        main.step("Bringing ONOS down...") 
+        main.log.info("all switch no controllers") 
+        main.Mininet1.ctrl_none()
+        main.log.info("bringing ONOS down") 
+        main.ONOS1.stop()
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        main.log.info("Dropping keyspace...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5)
+        main.log.info("Bringing ONOS up")
+        main.ONOS1.start()
+        time.sleep(5) 
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.isup()
+        main.ONOS2.isup()
+        main.ONOS3.isup()
+        main.ONOS4.isup()
+        main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        main.log.info("Pointing the Switches to alternating controllers... then BEGIN time") 
+        main.Mininet1.ctrl_divide()
+        t1 = time.time()
+        for i in range(9) : 
+            result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+            if result == 1 : 
+                break
+            else : 
+                time.sleep(1)
+        t2 = time.time()
+        conv_time = t2 - t1
+        main.ONOS1.check_status_report(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            main.log.report( "Convergence time of : %f seconds" % conv_time ) 
+            if float(conv_time) < float(main.params['TargetTime']) :
+                test=main.TRUE
+                main.log.info("Time is less then supplied target time")
+            else:
+                test=main.FALSE
+                main.log.info("Time is greater then supplied target time")
+        else : 
+            main.log.report( "ONOS did NOT converge over : %f seconds" % conv_time ) 
+            test=main.FALSE
+ 
+        main.ONOS1.stop()
+        utilities.assert_equals(expect=main.TRUE,actual=test)
+
diff --git a/TestON/tests/OnosScale4nodes/OnosScale4nodes.topo b/TestON/tests/OnosScale4nodes/OnosScale4nodes.topo
new file mode 100644
index 0000000..69ba473
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/OnosScale4nodes.topo
@@ -0,0 +1,87 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOS1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+        </ONOS4>
+
+        <Zookeeper1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>3</connect_order>
+        </Cassandra1>
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>4</connect_order>
+        </Cassandra2>
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+        </Cassandra3>
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>6</connect_order>
+        </Cassandra4>
+
+        <Mininet1>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>25</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> </arg1>
+                <arg2> --topo linear,100 </arg2>
+                <controller> remote </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/OnosScale4nodes/__init__.py b/TestON/tests/OnosScale4nodes/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/__init__.py
diff --git a/TestON/tests/OnosScale4nodes/check_status.py b/TestON/tests/OnosScale4nodes/check_status.py
new file mode 100755
index 0000000..c725cec
--- /dev/null
+++ b/TestON/tests/OnosScale4nodes/check_status.py
@@ -0,0 +1,111 @@
+#! /usr/bin/env python
+import json
+import os
+import sys
+
+# http://localhost:8080/wm/core/topology/switches/all/json
+# http://localhost:8080/wm/core/topology/links/json
+# http://localhost:8080/wm/registry/controllers/json
+# http://localhost:8080/wm/registry/switches/json"
+
+def get_json(url):
+  try:
+    command = "curl -s %s" % (url)
+    result = os.popen(command).read()
+    parsedResult = json.loads(result)
+  except:
+    print "REST IF %s has issue" % command
+    parsedResult = ""
+
+  if type(parsedResult) == 'dict' and parsedResult.has_key('code'):
+    print "REST %s returned code %s" % (command, parsedResult['code'])
+    parsedResult = ""
+
+  return parsedResult 
+
+def check_switch(RestIP,correct_nr_switch ):
+  buf = ""
+  retcode = 0
+  RestPort="8080"
+
+  url="http://%s:%s/wm/core/topology/switches/all/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  url = "http://%s:%s/wm/registry/switches/json" % (RestIP, RestPort)
+  registry = get_json(url)
+
+  if registry == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+
+  buf += "switch: total %d switches\n" % len(parsedResult)
+  cnt = 0
+  active = 0
+
+  for s in parsedResult:
+    cnt += 1
+
+    if s['state']  == "ACTIVE":
+      active += 1
+
+    if not s['dpid'] in registry:
+      buf += "switch:  dpid %s lost controller\n" % (s['dpid'])
+
+  buf += "switch: network %d : %d switches %d active\n" % (0+1, cnt, active)
+  if correct_nr_switch != cnt:
+    buf += "switch fail: network %d should have %d switches but has %d\n" % (1, correct_nr_switch, cnt)
+    retcode = 1
+
+  if correct_nr_switch != active:
+    buf += "switch fail: network %d should have %d active switches but has %d\n" % (1, correct_nr_switch, active)
+    retcode = 1
+
+  return (retcode, buf)
+
+def check_link(RestIP, nr_links):
+  RestPort = "8080"
+  buf = ""
+  retcode = 0
+
+  url = "http://%s:%s/wm/core/topology/links/json" % (RestIP, RestPort)
+  parsedResult = get_json(url)
+
+  if parsedResult == "":
+    retcode = 1
+    return (retcode, "Rest API has an issue")
+
+  buf += "link: total %d links (correct : %d)\n" % (len(parsedResult), nr_links)
+  intra = 0
+  interlink=0
+
+  for s in parsedResult:
+    intra = intra + 1 
+
+  if intra != nr_links:
+    buf += "link fail: network %d should have %d intra links but has %d\n" % (1, nr_links, intra)
+    retcode = 1
+
+  return (retcode, buf)
+
+#if __name__ == "__main__":
+def check_status(ip, numoswitch, numolink):
+
+  switch = check_switch(ip, numoswitch)
+  link = check_link(ip, numolink)
+  value = switch[0]
+  value += link[0]
+  if value != 0:
+    print "FAIL"
+    return 0
+  else: 
+    print "PASS"
+    return 1
+  print "%s" % switch[1]
+  print "%s" % link[1]
+ # print "%s" % check_switch_local()[1]
+ # print "%s" % check_controllers(8)[1]
diff --git a/TestON/tests/OnosTest/OnosTest.ospk b/TestON/tests/OnosTest/OnosTest.ospk
new file mode 100644
index 0000000..0e46e5c
--- /dev/null
+++ b/TestON/tests/OnosTest/OnosTest.ospk
@@ -0,0 +1,23 @@
+CASE 1
+    NAME "Testing the ONOS sanity"
+    STEP "Testing the ONOS sanity"
+
+    STORE ON Zookeeper1 DO status IN Zookeeper1_status
+    INFO <Zookeeper1_status>
+    
+    STORE ON Cassandra1 DO status IN Cassandra1_status
+    INFO <Cassandra1_status>
+    
+    STORE ON ONOS1 DO status IN ONOS1_status
+    INFO <ONOS1_status>
+    
+    STORE ON ONOS1 DO rest_status IN ONOS1_rest_status
+    INFO <ONOS1_rest_status>
+    
+    STORE ON ONOSRESTAPI1 DO execute IN Response
+    INFO <Response>
+    
+    ON ONOS1 DO stop
+    ON ONOS1 DO rest_stop
+    ON Cassandra1 DO stop
+    ON Zookeeper1 DO stop
diff --git a/TestON/tests/OnosTest/OnosTest.params b/TestON/tests/OnosTest/OnosTest.params
new file mode 100644
index 0000000..74cf664
--- /dev/null
+++ b/TestON/tests/OnosTest/OnosTest.params
@@ -0,0 +1,5 @@
+<PARAMS>
+    <testcases>1</testcases>
+    <mail>anil4haart@gmail.com</mail>
+        
+</PARAMS>      
\ No newline at end of file
diff --git a/TestON/tests/OnosTest/OnosTest.py b/TestON/tests/OnosTest/OnosTest.py
new file mode 100644
index 0000000..758c2a5
--- /dev/null
+++ b/TestON/tests/OnosTest/OnosTest.py
@@ -0,0 +1,33 @@
+
+class OnosTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("Testing the ONOS sanity")
+        main.step("Testing the ONOS sanity")
+    
+        Zookeeper1_status = main.Zookeeper1.status()
+        main.log.info(Zookeeper1_status)
+    
+        Cassandra1_status = main.Cassandra1.status()
+        main.log.info(Cassandra1_status)
+    
+        ONOS1_status = main.ONOS1.status()
+        if ONOS1_status:
+            main.log.info("ONOS is up") 
+        else:
+            main.log.info("ONOS is down") 
+    
+        ONOS1_rest_status = main.ONOS1.rest_status()
+        main.log.info(ONOS1_rest_status)
+    
+        Response = main.ONOSRESTAPI1.execute()
+        main.log.info(Response)
+    
+        main.ONOS1.stop()
+        main.ONOS1.rest_stop()
+        main.Cassandra1.stop()
+        main.Zookeeper1.stop()
diff --git a/TestON/tests/OnosTest/OnosTest.topo b/TestON/tests/OnosTest/OnosTest.topo
new file mode 100644
index 0000000..36cd588
--- /dev/null
+++ b/TestON/tests/OnosTest/OnosTest.topo
@@ -0,0 +1,41 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Zookeeper1>
+            <host>10.128.4.7</host>
+            <user>admin</user>
+            <password>password</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order> 1 </connect_order>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Zookeeper1>     
+        <Cassandra1>
+            <host>10.128.4.7</host>
+            <user>admin</user>
+            <password>password</password>
+            <type>CassandraCliDriver</type>
+            <connect_order> 2 </connect_order>
+            <COMPONENTS>
+             </COMPONENTS>   
+        </Cassandra1>   
+        <ONOS1>
+            <host>10.128.4.7</host>
+            <user>admin</user>
+            <password>password</password>
+            <type>OnosCliDriver</type>
+            <connect_order> 3 </connect_order>
+            <COMPONENTS>
+            </COMPONENTS>   
+        </ONOS1> 
+        
+        
+         <ONOSRESTAPI1>
+            <type>OnosRestApiDriver</type>
+            <COMPONENTS>
+            <topology_url>http://10.128.4.7:9000/topology</topology_url>
+             </COMPONENTS>   
+        </ONOSRESTAPI1> 
+        
+    </COMPONENT>
+</TOPOLOGY>
\ No newline at end of file
diff --git a/TestON/tests/OnosTest/__init__.py b/TestON/tests/OnosTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/OnosTest/__init__.py
diff --git a/TestON/tests/PoxTest/.svn/entries b/TestON/tests/PoxTest/.svn/entries
new file mode 100644
index 0000000..b51d7ac
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/entries
@@ -0,0 +1,171 @@
+9
+
+dir
+65
+svn://192.168.150.61/OpenFlow/tests/PoxTest
+svn://192.168.150.61/OpenFlow
+
+
+
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+svn:special svn:externals svn:needs-lock
+
+
+
+
+
+
+
+
+
+
+
+8b1d8634-a80c-44fc-ab7b-cc53e6f68013
+
+
+
+
+
+
+0
+
+PoxTest.params
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+e79bef68fc6f00acd8bf2028a7e2cab0
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+326
+
+PoxTest.py
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+4a2b2aaeb2a2eeed4b70f1adebca7231
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+637
+
+PoxTest.topo
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+827eb99b5a13c33d371ffc6aca740464
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+805
+
+__init__.py
+file
+
+
+
+
+2012-12-05T16:08:24.000000Z
+d41d8cd98f00b204e9800998ecf8427e
+2012-12-05T18:46:42.405397Z
+65
+paxterra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+0
+
diff --git a/TestON/tests/PoxTest/.svn/format b/TestON/tests/PoxTest/.svn/format
new file mode 100644
index 0000000..ec63514
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/format
@@ -0,0 +1 @@
+9
diff --git a/TestON/tests/PoxTest/.svn/text-base/PoxTest.params.svn-base b/TestON/tests/PoxTest/.svn/text-base/PoxTest.params.svn-base
new file mode 100644
index 0000000..bbadcaa
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/text-base/PoxTest.params.svn-base
@@ -0,0 +1,12 @@
+[PARAMS]
+    'testcases' = '[1]'
+    'mail' = 'anilkumar.s@paxterrasolutions.com,paxweb@paxterrasolutions.com'
+    #'log_dir' = '/home/user/Desktop/openflow_logs/'
+    [[CASE1]]
+        'destination' = 'h2'
+        'src' = 'h2'
+        'target'= 'h3'
+        'controller' = 'c1'
+        [[[STEP1]]]
+            'host' = 'h2'
+
diff --git a/TestON/tests/PoxTest/.svn/text-base/PoxTest.py.svn-base b/TestON/tests/PoxTest/.svn/text-base/PoxTest.py.svn-base
new file mode 100644
index 0000000..49e63af
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/text-base/PoxTest.py.svn-base
@@ -0,0 +1,15 @@
+class PoxTest:
+    '''
+    Testing Basic Pox Functionalities
+    '''
+    def __init__(self):
+        self.default = ""
+
+    def CASE1(self,main):
+        main.case("Checking the control flow of POX")
+        main.step("Checking the host reachability using pingHost ")
+        
+        result = main.Mininet1.pingHost(src=main.params['CASE1']['src'],
+                                        target=main.params['CASE1']['target'],
+                                        controller=main.params['CASE1']['controller'])
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Ping executed successfully",onfail="Ping Failed")
diff --git a/TestON/tests/PoxTest/.svn/text-base/PoxTest.topo.svn-base b/TestON/tests/PoxTest/.svn/text-base/PoxTest.topo.svn-base
new file mode 100644
index 0000000..b4560cb
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/text-base/PoxTest.topo.svn-base
@@ -0,0 +1,25 @@
+[TOPOLOGY]
+
+    [[COMPONENT]]
+        [[["Mininet1"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'type' = "Mininet"
+            [[[["COMPONENTS"]]]]
+                # Specify the Option for mininet
+                'topo' = 'single'
+                'topocount' = '3'
+                'switch' = 'ovsk'
+                'controller' = 'remote'
+        [[["POX2"]]]
+            'host' = '192.168.56.101'
+            'user' = 'openflow'
+            'password' = 'openflow'
+            'type' = 'POX'
+            'test_target' = '1'
+            'no-cli' = '1' #or '0' if want to run in cli mode
+            [[[["COMPONENTS"]]]]
+                'pox_lib_location' = "/home/openflow/pox/"
+                [[[[["samples.of_tutorial"]]]]]
+
diff --git a/TestON/tests/PoxTest/.svn/text-base/__init__.py.svn-base b/TestON/tests/PoxTest/.svn/text-base/__init__.py.svn-base
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/PoxTest/.svn/text-base/__init__.py.svn-base
diff --git a/TestON/tests/PoxTest/PoxTest.ospk b/TestON/tests/PoxTest/PoxTest.ospk
new file mode 100644
index 0000000..cadc43e
--- /dev/null
+++ b/TestON/tests/PoxTest/PoxTest.ospk
@@ -0,0 +1,7 @@
+CASE 1
+    NAME "Checking the control flow of POX"
+    STEP "Checking the host reachability using pingHost"
+    ON Mininet1 DO pingHost USING src AS CASE["src"], target AS CASE["target"], controller AS CASE["controller"] AND STORE LAST_RESULT IN result
+    ASSERT result EQUALS main.TRUE ONPASS "Ping executed successfully" ONFAIL "Ping failed"
+
+
diff --git a/TestON/tests/PoxTest/PoxTest.params b/TestON/tests/PoxTest/PoxTest.params
new file mode 100644
index 0000000..dfff20e
--- /dev/null
+++ b/TestON/tests/PoxTest/PoxTest.params
@@ -0,0 +1,13 @@
+<PARAMS>
+    <testcases> [1]</testcases>
+    <mail> anil4haart@gmail.com,paxweb@paxterrasolutions.com</mail>
+    <CASE1>
+        <destination> h2</destination>
+        <src>h2</src>
+        <target> h3 </target>
+        <controller> c1 </controller>
+        <STEP1>
+            <host> h2</host>
+        </STEP1> 
+    </CASE1>
+</PARAMS>
diff --git a/TestON/tests/PoxTest/PoxTest.py b/TestON/tests/PoxTest/PoxTest.py
new file mode 100644
index 0000000..f9e4722
--- /dev/null
+++ b/TestON/tests/PoxTest/PoxTest.py
@@ -0,0 +1,29 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+
+class PoxTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("Checking the control flow of POX")
+        main.step("Checking the host reachability using pingHost")
+        main.Mininet1.pingHost(src=main.params['CASE1']['src'], target=main.params['CASE1']['target'], controller=main.params['CASE1']['controller'])
+        result = main.last_result
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Ping executed successfully",onfail="Ping failed")
+    
+    
diff --git a/TestON/tests/PoxTest/PoxTest.topo b/TestON/tests/PoxTest/PoxTest.topo
new file mode 100644
index 0000000..e42a300
--- /dev/null
+++ b/TestON/tests/PoxTest/PoxTest.topo
@@ -0,0 +1,31 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Mininet1>
+            <host>192.168.56.101</host>
+            <user> openflow</user>
+            <password> openflow</password>
+            <type>MininetCliDriver</type>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <topo> single</topo>
+                <topocount>3</topocount>
+                <switch> ovsk </switch>
+                <controller> remote </controller>
+             </COMPONENTS>   
+        </Mininet1>        
+        <POX2>
+            <host> 192.168.56.101 </host>
+            <user>  openflow </user>
+            <password> openflow </password>
+            <type> PoxCliDriver </type>
+            <test_target> 1 </test_target>
+            <COMPONENTS>
+                <pox_lib_location> /home/openflow/pox/  </pox_lib_location>
+                <samples.of_tutorial></samples.of_tutorial>
+            </COMPONENTS>
+        </POX2>
+
+        
+    </COMPONENT>
+</TOPOLOGY>
\ No newline at end of file
diff --git a/TestON/tests/PoxTest/__init__.py b/TestON/tests/PoxTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/PoxTest/__init__.py
diff --git a/TestON/tests/TimsDeathTest/.OnosSanity.py.swp b/TestON/tests/TimsDeathTest/.OnosSanity.py.swp
new file mode 100644
index 0000000..ac9cdc3
--- /dev/null
+++ b/TestON/tests/TimsDeathTest/.OnosSanity.py.swp
Binary files differ
diff --git a/TestON/tests/TimsDeathTest/TimsDeathTest.params b/TestON/tests/TimsDeathTest/TimsDeathTest.params
new file mode 100644
index 0000000..749cc51
--- /dev/null
+++ b/TestON/tests/TimsDeathTest/TimsDeathTest.params
@@ -0,0 +1,34 @@
+<PARAMS>
+    <testcases>1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17</testcases>
+    <Iterations>2</Iterations>
+    <WaitTime>50</WaitTime>
+    <TargetTime>50</TargetTime>
+    <RestIP>10.128.100.4</RestIP>
+    <NR_Switches>104</NR_Switches>
+    <NR_Links>212</NR_Links>
+    <FLOWDEF>~/flowdef_files/TimsDeathTest/flowdef_96.txt</FLOWDEF>
+    <SET1>
+        <begin>
+            <one>s1</one>
+            <two>s1</two>
+            <three>s3</three>
+        </begin>
+        <end>
+            <one>s2</one>
+            <two>s3</two>
+            <three>s4</three>
+        </end>
+    </SET1>
+    <SET2>
+        <begin>
+            <one>s1</one>
+            <two>s2</two>
+            <three>s1</three>
+        </begin>
+        <end>
+            <one>s4</one>
+            <two>s3</two>
+            <three>s2</three>
+        </end>
+    </SET2>
+</PARAMS>      
diff --git a/TestON/tests/TimsDeathTest/TimsDeathTest.py b/TestON/tests/TimsDeathTest/TimsDeathTest.py
new file mode 100644
index 0000000..3f7af66
--- /dev/null
+++ b/TestON/tests/TimsDeathTest/TimsDeathTest.py
@@ -0,0 +1,418 @@
+
+class TimsDeathTest:
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+        '''
+        First case is to simply check if ONOS, ZK, and Cassandra are all running properly.
+        If ONOS if not running properly, it will restart ONOS once before continuing. 
+        It will then check if the ONOS has a view of all the switches and links as defined in the params file.
+        The test will only pass if ONOS is running properly, and has a full view of all topology elements.
+        '''
+        import time
+        main.log.report("Checking is startup was clean")
+        main.case("Checking if the startup was clean...")
+        main.step("Testing startup Zookeeper")
+        main.ONOS1.get_version()
+        data =  main.Zookeeper1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Zookeeper is up!",onfail="Zookeeper is down...")
+        main.step("Testing startup Cassandra")
+        data =  main.Cassandra1.isup()
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="Cassandra is up!",onfail="Cassandra is down...")
+        main.step("Testing startup ONOS")
+        main.ONOS1.start()
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        main.ONOS1.start_rest()
+        main.ONOS2.start_rest()
+        main.ONOS3.start_rest()
+        main.ONOS4.start_rest()
+        data = main.ONOS1.isup()
+        if data == main.FALSE:
+            main.log.info("Something is funny... restarting ONOS")
+            main.ONOS1.stop()
+            time.sleep(3)
+            main.ONOS1.start()
+            time.sleep(5)
+            data = main.ONOS1.isup()
+        topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if topoview == main.TRUE & data == main.TRUE :
+            data = main.TRUE
+        else:
+            data = main.FALSE
+
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running and has full view of topology",onfail="ONOS didn't start or has fragmented view of topology...")
+
+    def CASE2(self,main) :
+        '''
+        Second case is to time the convergence time of a topology for ONOS. 
+        It shuts down the ONOS, drops keyspace, starts ONOS...
+        Then it points all the mininet switches at the ONOS node and times how long it take for the ONOS rest call to reflect the correct count of switches and links.
+        '''
+        import time
+        main.log.report("Time convergence for switches -> single ONOS node in cluster")
+        main.case("Timing Onos Convergence for switch -> a single ONOS node in the cluster")
+        main.step("Bringing ONOS down...") 
+        main.log.info("all switch no controllers") 
+        main.Mininet1.ctrl_none()
+        main.log.info("bringing ONOS down") 
+        main.ONOS1.stop()
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        main.log.info("Dropping keyspace...")
+        main.ONOS1.drop_keyspace()
+        time.sleep(5)
+        main.log.info("Bringing ONOS up")
+        main.ONOS1.start()
+        time.sleep(5) 
+        main.ONOS2.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        onosup = main.ONOS1.isup()
+        onosup = onosup & main.ONOS2.isup()
+        onosup = onosup & main.ONOS3.isup()
+        onosup = onosup & main.ONOS4.isup()
+        onosup = onosup & main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        utilities.assert_equals(expect=main.TRUE,actual=onosup,onpass="ONOS is up and running and has full view of topology",onfail="ONOS could not even start properly...")
+
+    def CASE3(self, main) :
+        import time
+        main.log.report("Pointing the Switches at ONE controller...") 
+        main.case("Point the switches to ONOS, ONOS must discover ") 
+        main.Mininet1.ctrl_divide()
+        time.sleep( 10 )
+        result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            test = main.TRUE
+        else : 
+            test = main.FALSE
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="ONOS converged",onfail="ONOS did not converge")
+
+    def CASE4(self,main) :
+        import time
+        main.log.report("Test Convergence again") 
+        main.case("Test Convergence again") 
+        time.sleep( 5 ) 
+        result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            test = main.TRUE
+        else : 
+            test = main.FALSE
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="ONOS converged",onfail="ONOS did not converge")
+
+    def CASE5(self,main) :
+        import time
+        main.log.report("Test Convergence again") 
+        main.case("Test Convergence again") 
+        time.sleep( 5 ) 
+        result = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        if result == 1 : 
+            test = main.TRUE
+        else : 
+            test = main.FALSE
+        utilities.assert_equals(expect=main.TRUE,actual=test,onpass="ONOS converged",onfail="ONOS did not converge, moving on with the test")
+
+    def CASE6(self,main) :
+        '''
+        This Test case:
+            - Clears out any leftover flows
+            - Adds new flows into ONOS
+            - Checks flows up to 10 times waiting for each flow to be caluculated and no "NOT" statements inte get_flow
+        '''
+        import time
+        main.log.report("Deleting and adding flows")
+        main.case("Taking care of these flows!")
+        main.step("Cleaning out any leftover flows...")
+        main.log.info("deleting...")
+        main.ONOS1.delete_flow("all")
+        main.log.info("adding...")
+        t1 = time.time()
+        main.ONOS1.add_flow(main.params['FLOWDEF'])
+        main.log.info("Checking...")
+        for i in range(15):
+            result = main.ONOS1.check_flow()
+            if result == main.TRUE:
+                t2 = time.time()
+                main.log.info( 'Adding flows took %0.3f ms' % ((t2-t1)*1000.0))
+                break
+            time.sleep(2)
+            main.log.info("Checking Flows again...")
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="flows are good",onfail="FLOWS not correct")
+
+    def CASE7(self,main) : 
+        '''
+        First major stir of the network... 
+        '''
+        main.log.report("bring down links and test pings") 
+        main.case("bring down links and test pings")
+        main.step("Links down") 
+        for link in main.params['SET1']['begin']:
+            main.log.info(str(main.params['SET1']['begin'][link]))
+            main.Mininet1.link(END1=main.params['SET1']['begin'][link],END2=main.params['SET1']['end'][link],OPTION="down")
+ 
+        main.step("Testing ping")
+        success = 0
+        main.log.info("starting loops") 
+        result = main.Mininet1.pingHost(src="h9",target="h33")
+        for j in range(23) :
+            result = result & main.Mininet1.pingHost(src="h"+str((10+j)),target="h"+str((34+j)))
+            main.log.info("result updated") 
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h"+str((33+j)),target="h"+str((57+j)))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h"+str((57+j)),target="h"+str((81+j)))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h"+str((81+j)),target="h"+str((9+j)))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success) 
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED")
+
+    def CASE8(self,main) :
+        '''
+        Continued ping checking
+        '''
+        main.log.report("Testing flow re-route with ping")
+        main.case("Testing ping")
+        result = main.TRUE
+        success = 0
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED")
+
+    def CASE9(self,main) :
+        '''
+        Continued ping checking
+        '''
+        main.log.report("Testing flow re-route with ping")
+        main.case("Testing ping")
+        result = main.TRUE
+        success = 0
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED, moving on... ")
+
+    def CASE10(self,main) :
+        '''
+        Links back, up check pings. 
+        '''
+        main.log.report("bring up links and test pings")
+        main.case("bring up links and test pings")
+        main.step("Links up")
+        for link in main.params['SET1']['begin']:
+            main.log.info(str(main.params['SET1']['begin'][link]))
+            main.Mininet1.link(END1=main.params['SET1']['begin'][link],END2=main.params['SET1']['end'][link],OPTION="up")
+
+        main.step("Testing ping")
+        result = main.TRUE
+        success = 0 
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success) 
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good ",onfail="Pings are bad")
+
+    def CASE11(self,main) : 
+        '''
+        Assign all switches to all Controllers, then kill 3 / 4 of the controllers
+        '''
+        import time
+        main.log.report("Assign all switches to all Controllers, then kill 3 / 4 of the controllers") 
+        main.case("Assign all switches to all Controllers, then kill 3 / 4 of the controllers") 
+        main.step("Assign all switches to all Controllers...") 
+        main.Mininet1.ctrl_all()
+        time.sleep( 5 ) 		# Sleep for 5 sec because of my immense generosity
+        main.step("Kill ONOS 1, 3, 4") 
+        main.ONOS1.stop() 
+        main.ONOS3.stop() 
+        main.ONOS4.stop() 
+        
+        time.sleep( 10 ) 		# Sleep again... failover failover failover failover... 
+        topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        utilities.assert_equals(expect=main.TRUE,actual=topoview,onpass="ONOS has full view of topology",onfail="ONOS has fragmented view of topology...")
+
+    def CASE12(self,main) : 
+        '''
+        Check Convergance
+        '''
+        import time
+        main.log.report("Still checking convergance") 
+        main.case("Call the rest call, check all switches") 
+        time.sleep( 10 ) 		# Sleep again... failover failover failover failover... 
+        topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        utilities.assert_equals(expect=main.TRUE,actual=topoview,onpass="ONOS has full view of topology",onfail="ONOS has fragmented view of topology...")
+ 
+    def CASE13(self,main) : 
+        '''
+        Check Convergance
+        '''
+        import time
+        main.log.report("Still checking convergance") 
+        main.case("Call the rest call, check all switches") 
+        time.sleep( 10 ) 		# Sleep again... failover failover failover failover... 
+        topoview = main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        utilities.assert_equals(expect=main.TRUE,actual=topoview,onpass="ONOS has full view of topology",onfail="ONOS has fragmented view of topology...")
+ 
+    def CASE14(self,main) : 
+        '''
+        Bring ONOS nodes back to a good state and check health 
+        '''
+        main.log.report("Bringing ONOS nodes back up and checking if they're healthy") 
+        main.case("Bring up ONOS nodes") 
+        import time
+        main.ONOS1.start()
+        main.ONOS3.start()
+        main.ONOS4.start()
+        onosup = main.ONOS1.isup()
+        onosup = onosup & main.ONOS2.isup()
+        onosup = onosup & main.ONOS3.isup()
+        onosup = onosup & main.ONOS4.isup()
+        onosup = onosup & main.ONOS1.check_status(main.params['RestIP'],main.params['NR_Switches'],main.params['NR_Links'])
+        utilities.assert_equals(expect=main.TRUE,actual=onosup,onpass="ONOS is up and running and has full view of topology",onfail="ONOS could not even start properly...")
+
+    def CASE15(self,main):
+        '''
+        Make a major churn in the network again... 
+        '''
+        import time
+        main.log.report("Maked a major churn in the network") 
+        main.case("Churning the network") 
+        main.step("Links down")
+        for link in main.params['SET2']['begin']:
+            main.log.info(str(main.params['SET2']['begin'][link]))
+            main.Mininet1.link(END1=main.params['SET2']['begin'][link],END2=main.params['SET2']['end'][link],OPTION="down")
+        main.step("ONOS nodes down") 
+        main.ONOS2.stop()
+        main.ONOS3.stop()
+        main.ONOS4.stop()
+        time.sleep( 10 ) 
+        main.step("First ping check") 
+        result = main.TRUE
+        success = 0
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED ")
+
+    def CASE16(self,main) :
+        '''
+        Continued ping checking
+        '''
+        main.log.report("Testing flow re-route with ping")
+        main.case("Testing ping")
+        main.step("Second ping check") 
+        result = main.TRUE
+        success = 0
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED")
+
+    def CASE17(self,main) :
+        '''
+        Continued ping checking
+        '''
+        main.log.report("Testing flow re-route with ping")
+        main.case("Testing ping")
+        main.step("Third ping check")
+        result = main.TRUE
+        success = 0
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(9+j),target="h%d"%(33+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(33+j),target="h%d"%(57+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(57+j),target="h%d"%(81+j))
+            if result == main.TRUE:
+                success = success + 1
+        for j in range(24) :
+            result = result & main.Mininet1.pingHost(src="h%d"%(81+j),target="h%d"%(9+j))
+            if result == main.TRUE:
+                success = success + 1
+        main.log.info("%d/98 Pings Good" % success)
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Pings are good, flow re-route: SUCCESS",onfail="Pings are bad. flow re-route: FAILED")
diff --git a/TestON/tests/TimsDeathTest/TimsDeathTest.topo b/TestON/tests/TimsDeathTest/TimsDeathTest.topo
new file mode 100644
index 0000000..b5ac02e
--- /dev/null
+++ b/TestON/tests/TimsDeathTest/TimsDeathTest.topo
@@ -0,0 +1,87 @@
+<TOPOLOGY>
+    <COMPONENT>
+
+        <ONOS1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>7</connect_order>
+        </ONOS1>
+        <ONOS2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>8</connect_order>
+        </ONOS2>
+        <ONOS3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>9</connect_order>
+        </ONOS3>
+        <ONOS4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>OnosCliDriver</type>
+            <connect_order>10</connect_order>
+        </ONOS4>
+
+        <Zookeeper1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>ZookeeperCliDriver</type>
+            <connect_order>2</connect_order>
+            <COMPONENTS>
+             </COMPONENTS>
+        </Zookeeper1>
+
+        <Cassandra1>
+            <host>10.128.100.1</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>3</connect_order>
+        </Cassandra1>
+        <Cassandra2>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>4</connect_order>
+        </Cassandra2>
+        <Cassandra3>
+            <host>10.128.100.5</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>5</connect_order>
+        </Cassandra3>
+        <Cassandra4>
+            <host>10.128.100.6</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>CassandraCliDriver</type>
+            <connect_order>6</connect_order>
+        </Cassandra4>
+
+        <Mininet1>
+            <host>10.128.100.4</host>
+            <user>admin</user>
+            <password>onos_test</password>
+            <type>MininetCliDriver</type>
+            <connect_order>25</connect_order>
+            <COMPONENTS>
+                # Specify the Option for mininet
+                <arg1> --custom ~/mininet/custom/TimsDeathTopo.py </arg1>
+                <arg2> --topo timtopo </arg2>
+                <controller> remote,ip=10.128.100.1,port=6633 </controller>
+             </COMPONENTS>
+        </Mininet1>
+
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/TimsDeathTest/__init__.py b/TestON/tests/TimsDeathTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/TimsDeathTest/__init__.py
diff --git a/TestON/tests/VyattaTest/VyattaTest.params b/TestON/tests/VyattaTest/VyattaTest.params
new file mode 100644
index 0000000..92a5b20
--- /dev/null
+++ b/TestON/tests/VyattaTest/VyattaTest.params
@@ -0,0 +1,4 @@
+<PARAMS>
+    <testcases> [1]</testcases>
+    <mail> anil4haart@gmail.com,paxweb@paxterrasolutions.com</mail>
+</PARAMS>
\ No newline at end of file
diff --git a/TestON/tests/VyattaTest/VyattaTest.py b/TestON/tests/VyattaTest/VyattaTest.py
new file mode 100644
index 0000000..7d4017b
--- /dev/null
+++ b/TestON/tests/VyattaTest/VyattaTest.py
@@ -0,0 +1,95 @@
+'''
+	
+ *   TestON is free software: you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, either version 2 of the License, or
+ *   (at your option) any later version.
+
+ *   TestON is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+
+
+'''
+
+class VyattaTest :
+
+    def __init__(self) :
+        self.default = ''
+
+    def CASE1(self,main) :
+
+        main.case("VyattaTest Sample Test")
+        main.step("VyattaTest Sample Test")
+        config_result = main.Vyatta.configure()
+        main.log.info(config_result)
+        
+        command_details = main.Vyatta.get_details("show")
+        main.log.info("show \n command_details\n\t"+ str(command_details))
+        
+        command_details = main.Vyatta.get_details("show interfaces")
+        main.log.info("show interfaces \n command_details\n\t"+ str(command_details))
+                
+        command_details = main.Vyatta.get_details("show interfaces ethernet")
+        main.log.info("show interfaces ethernet \n command_details\n\t"+ str(command_details))
+                
+        command_details = main.Vyatta.get_details("show interfaces ethernet eth1")
+        main.log.info("show interfaces ethernet eth1 \n command_details\n\t"+ str(command_details))
+        
+        command_details = main.Vyatta.get_details("show interfaces ethernet eth1 address")
+        main.log.info("show interfaces ethernet eth1 address \n command_details\n\t"+ str(command_details))
+        
+        
+        '''
+        main.Vyatta.handle.expect("\$")
+        
+        resultCommand = main.Vyatta.execute(cmd="configure",prompt='\#',timeout=10)
+        
+        resultCommand = main.Vyatta.execute(cmd="show interfaces ?",prompt='\#',timeout=10)
+        
+        print "Possible Options \t\t"
+        print main.last_response
+        print " ->"*10+"\n"*4
+        import re
+        match = re.findall("\n\s*.\s+(\w+)", main.last_response, 0)
+        print match
+        
+        resultCommand = main.Vyatta.execute(cmd="XYZ",prompt='\#',timeout=10)
+        
+        print "Command result Upto here \t\t"
+        print main.last_response
+        print " ->"*10+"\n"*4
+        import re
+        match = re.findall("\n\s*.\s+(\w+)", main.last_response, 0)
+        print match
+        
+        
+        resultCommand = main.Vyatta.execute(cmd="XYZ",prompt='\#',timeout=10)
+        
+        print "Command result Upto here \t\t"
+        print main.last_response
+        print " ->"*10+"\n"*4
+        import re
+        match = re.findall("\n\s*.\s+(\w+)", main.last_response, 0)
+        print match
+        
+        
+        resultCommand = main.Vyatta.execute(cmd="show interfaces ethernet ?",prompt='\#',timeout=10)
+        
+        print "Possible Options \t\t"
+        print main.last_response
+        print " ->"*10+"\n"*4
+        import re
+        match = re.findall("\n\s*.\s+(\w+)", main.last_response, 0)
+        print match
+        
+        resultCommand = main.Vyatta.execute(cmd="XYZ",prompt='\#',timeout=10)
+        
+        print "Command result Upto here \t\t"
+        print main.last_response
+        print " ->"*10+"\n"*4
+        import re
+        match = re.findall("\n\s*.\s+(\w+)", main.last_response, 0)
+        print match
+        '''
diff --git a/TestON/tests/VyattaTest/VyattaTest.topo b/TestON/tests/VyattaTest/VyattaTest.topo
new file mode 100644
index 0000000..3b13543
--- /dev/null
+++ b/TestON/tests/VyattaTest/VyattaTest.topo
@@ -0,0 +1,14 @@
+<TOPOLOGY>
+
+    <COMPONENT>
+        <Vyatta>
+            <host>192.168.56.81</host>
+            <user> vyatta </user>
+            
+            <password>vyatta</password>
+            <type>RemoteSysDriver</type>
+            <COMPONENTS>
+            </COMPONENTS>   
+        </Vyatta>        
+    </COMPONENT>
+</TOPOLOGY>
diff --git a/TestON/tests/VyattaTest/__init__.py b/TestON/tests/VyattaTest/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/VyattaTest/__init__.py
diff --git a/TestON/tests/__init__.py b/TestON/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/TestON/tests/__init__.py