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
