adding TestON
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]