diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 7eeaaf8..178d4c5 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -748,7 +748,7 @@
             main.cleanup()
             main.exit()
 
-    def compare_topo(self, onos_list, onos_json):
+    def compare_topo(self, topo, onos_json):
         '''
         compares mn topology with ONOS topology
         onos_list is a list of ONOS controllers, each element of the list should be (handle, name, ip, port)
@@ -777,9 +777,7 @@
         sys.path.append("~/sts")
         #NOTE: Create this once per Test and pass the TestONTopology object around. It takes too long to create this object.
         #      This will make it easier to use the sts methods for severing links and solve that issue
-        #import sts.entities.base as base
         import json
-        topo = TestONTopology(self, onos_list)
 
         link_results = main.TRUE
         switch_results = main.TRUE
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index 1b63f87..d6e839d 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -75,6 +75,11 @@
 #*********************************************************************************************
 
     def checkForLoss(self, pingList):
+        '''
+        Returns main.FALSE for 0% packet loss and
+        Returns main.ERROR if "found multiple mininet" is found and
+        Returns main.TRUE else
+        '''
         import os
         self.handle.sendline("")
         self.handle.expect("\$")
@@ -93,23 +98,31 @@
         '''
         Starts a continuous ping on the mininet host outputing to a file in the /tmp dir. 
         '''
+        self.handle.sendline("")
+        self.handle.expect("\$")
         args = utilities.parse_args(["SRC","TARGET","PINGTIME"],**pingParams)
-        precmd = "rm /tmp/ping." + args["SRC"]
+        precmd = "sudo rm /tmp/ping." + args["SRC"]
         self.execute(cmd=precmd,prompt="(.*)",timeout=10)
-        command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i .2 -w " + str(args['PINGTIME']) + " > /tmp/ping." + args["SRC"] + " &"
+        command = "sudo mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i .2 -w " + str(args['PINGTIME']) + " > /tmp/ping." + args["SRC"] + " &"
         main.log.info( command ) 
         self.execute(cmd=command,prompt="(.*)",timeout=10)
+        self.handle.sendline("")
+        self.handle.expect("\$")
         return main.TRUE
 
     def pingstatus(self,**pingParams):
         '''
         Tails the respective ping output file and check that there is a moving "64 bytes"
         '''
+        self.handle.sendline("")
+        self.handle.expect("\$")
         args = utilities.parse_args(["SRC"],**pingParams)
         self.handle.sendline("tail /tmp/ping." + args["SRC"])
         self.handle.expect("tail")
         self.handle.expect("\$")
         result = self.handle.before + self.handle.after
+        self.handle.sendline("")
+        self.handle.expect("\$")
         if re.search('Unreachable', result ):
             main.log.info("Unreachable found in ping logs...") 
             return main.FALSE
@@ -120,40 +133,52 @@
             main.log.info("No, or faulty ping data...") 
             return main.FALSE
          
-    def pingKill(self):
+    def pingKill(self, testONUser, testONIP):
         '''
         Kills all continuous ping processes.
         Then copies all the ping files to the TestStation.
         '''
         import time
+        self.handle.sendline("")
+        self.handle.expect("\$")
         command = "sudo kill -SIGINT `pgrep ping`" 
         main.log.info( command ) 
         self.execute(cmd=command,prompt="(.*)",timeout=10)
-        main.log.info( "Removing old ping data" )
-        command = "rm /tmp/ping.*"
-        os.popen(command) 
-        time.sleep(2)      
+        #Commenting out in case TestON and MN are on the same machine. scp overrights the file anyways
+        #main.log.info( "Removing old ping data" )
+        #command = "rm /tmp/ping.*"
+        #os.popen(command) 
+        #time.sleep(2)      
         main.log.info( "Transferring ping files to TestStation" )
-        command = "scp /tmp/ping.* admin@10.128.7.7:/tmp/" 
+        command = "scp /tmp/ping.* "+ str(testONUser) + "@" + str(testONIP) + ":/tmp/" 
         self.execute(cmd=command,prompt="100%",timeout=20)
-        print("finished kill")
+        self.handle.sendline("")
+        self.handle.expect("\$")
         return main.TRUE
     
     def pingLongKill(self):
         import time
+        self.handle.sendline("")
+        self.handle.expect("\$")
         command = "sudo kill -SIGING `pgrep ping`"
         main.log.info(command)
         self.execute(cmd=command,prompt="(.*)",timeout=10)
+        self.handle.sendline("")
+        self.handle.expect("\$")
         return main.TRUE
         
     def pingHost(self,**pingParams):
         ''' 
         Pings between two hosts on remote mininet  
         ''' 
+        self.handle.sendline("")
+        self.handle.expect("\$")
         args = utilities.parse_args(["SRC","TARGET"],**pingParams)
         command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -c 4 -W 1 -i .2"
         main.log.info ( command ) 
         response = self.execute(cmd=command,prompt="rtt",timeout=10 )
+        self.handle.sendline("")
+        self.handle.expect("\$")
         if utilities.assert_matches(expect=',\s0\%\spacket\sloss',actual=response,onpass="No Packet loss",onfail="Host is not reachable"):
             main.log.info("NO PACKET LOSS, HOST IS REACHABLE")
             main.last_result = main.TRUE 
@@ -450,7 +475,11 @@
     def get_flowTable(self,sw):
         self.handle.sendline("cd")
         self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
-        command = "sudo ovs-ofctl dump-flows " + sw + " | awk '{OFS=\",\" ; print $1 $6 $7 }' |sort -n -k1"
+        #TODO: Write seperate versions of the function for this, possibly a string that tells it which switch is in use?
+        #For 1.0 version of OVS
+        #command = "sudo ovs-ofctl dump-flows " + sw + " | awk '{OFS=\",\" ; print $1 $6 $7 }' |sort -n -k1"
+        #for 1.3 version of OVS
+        command = "sudo ovs-ofctl dump-flows " + sw + " | awk '{OFS=\",\" ; print $1 $3 $7 $8}' |sort -n -k1"
         self.handle.sendline(command)
         self.handle.expect(["sort -n -k1",pexpect.EOF,pexpect.TIMEOUT])
         self.handle.expect(["NXST_FLOW",pexpect.EOF,pexpect.TIMEOUT])
@@ -462,6 +491,11 @@
         if flow1==flow2:
             return main.TRUE
         else:
+            main.log.info("Flow tables do not match, printing tables:")
+            main.log.info("Flow Table 1:")
+            main.log.info(flow1)
+            main.log.info("Flow Table 2:")
+            main.log.info(flow2)
             return main.FALSE
 
 if __name__ != "__main__":
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 01a414a..db01cc2 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -323,8 +323,8 @@
             self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
             self.handle.sendline("cd "+self.home)
             self.handle.sendline("./onos.sh stop")
-            i=self.handle.expect(["Stop",pexpect.EOF,pexpect.TIMEOUT])
-            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], 60)
+            self.handle.expect(["./onos.sh stop",pexpect.EOF,pexpect.TIMEOUT])
+            i=self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT],60)
             result = self.handle.before
             if re.search("Killed", result):
                 main.log.info(self.name + ": ONOS Killed Successfully")
@@ -354,8 +354,8 @@
             self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
             self.handle.sendline("cd "+self.home)
             self.handle.sendline("./onos.sh core stop")
-            i=self.handle.expect(["Stop",pexpect.EOF,pexpect.TIMEOUT])
-            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT], 60)
+            self.handle.expect(["./onos.sh stop",pexpect.EOF,pexpect.TIMEOUT])
+            i=self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT],60)
             result = self.handle.before
             if re.search("Killed", result):
                 main.log.info(self.name + ": ONOS Killed Successfully")
diff --git a/TestON/tests/HATestZK/HATestZK.params b/TestON/tests/HATestZK/HATestZK.params
index 6952d1b..24f1a29 100644
--- a/TestON/tests/HATestZK/HATestZK.params
+++ b/TestON/tests/HATestZK/HATestZK.params
@@ -1,19 +1,19 @@
 <PARAMS>
     <testcases>1,2,3,4,5,6,7,8</testcases>
     <CTRL>
-        <ip1>10.128.9.1</ip1>
+        <ip1>10.128.11.1</ip1>
         <port1>6633</port1>
         <restPort1>8080</restPort1>
-        <ip2>10.128.9.2</ip2>
+        <ip2>10.128.11.2</ip2>
         <port2>6633</port2>
         <restPort2>8080</restPort2>
-        <ip3>10.128.9.3</ip3>
+        <ip3>10.128.11.3</ip3>
         <port3>6633</port3>
         <restPort3>8080</restPort3>
-        <ip4>10.128.9.4</ip4>
+        <ip4>10.128.11.4</ip4>
         <port4>6633</port4>
         <restPort4>8080</restPort4>
-        <ip5>10.128.9.5</ip5>
+        <ip5>10.128.11.5</ip5>
         <port5>6633</port5>
         <restPort5>8080</restPort5>
         <switchURL>/wm/onos/registry/switches/json</switchURL>
@@ -25,6 +25,8 @@
         <intentPort>8080</intentPort>
         <intentURL>wm/onos/intent</intentURL>
     </INTENTS>
+    <TESTONUSER>admin</TESTONUSER>
+    <TESTONIP>10.128.11.11</TESTONIP>
     <PING>
         <source1>h8</source1>
         <source2>h9</source2>
diff --git a/TestON/tests/HATestZK/HATestZK.py b/TestON/tests/HATestZK/HATestZK.py
index 303cce0..2f8c462 100644
--- a/TestON/tests/HATestZK/HATestZK.py
+++ b/TestON/tests/HATestZK/HATestZK.py
@@ -1,12 +1,11 @@
+'''
+Description: This case is to ensure that in the event of Zookeeper failures (including the leader node)
+the cluster should continue to function properly by the passing of Zookeeper functionality to the 
+remaining nodes. In this test, a quorum of the Zookeeper instances must be kept alive.
 
+'''
 class HATestZK:
 
-    global topology
-    global masterSwitchList
-    global highIntentList
-    global lowIntentList
-    global flows
-    flows = []
 
     def __init__(self) :
         self.default = ''
@@ -51,7 +50,7 @@
         main.ONOS3.start_all()
         main.ONOS4.start_all()
         main.ONOS5.start_all()
-       # main.ONOS1.start_rest()
+        main.ONOS1.start_rest()
         main.step("Testing Startup")
         result1 = main.ONOS1.rest_status()
         vm1 = main.RC1.status_coor and main.RC1.status_serv and \
@@ -193,28 +192,8 @@
     def CASE4(self,main) :
         import time
         from subprocess import Popen, PIPE
+        from sts.topology.teston_topology import TestONTopology # assumes that sts is already in you PYTHONPATH
         main.case("Setting up and Gathering data for current state")
-        main.step("Get the current In-Memory Topology on each ONOS Instance")
-
-        '''
-        ctrls = []
-        count = 1
-        while True:
-            temp = ()
-            if ('ip'+str(count)) in main.params['CTRL']:
-                temp = temp+(getattr(main,('ONOS'+str(count))),)
-                temp = temp + ("ONOS"+str(count),)
-                temp = temp + (main.params['CTRL']['ip'+str(count)],)
-                temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
-                ctrls.append(temp)
-                count+=1
-            else:
-                break
-        topo_result = main.TRUE
-
-        for n in range(1,count):
-            temp_result = main.Mininet1.compare_topo(ctrls,main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
-        '''
 
         main.step("Get the Mastership of each switch")
         (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['switchURL']],stdout=PIPE).communicate()
@@ -250,6 +229,29 @@
         main.Mininet2.pingLong(src=main.params['PING']['source9'],target=main.params['PING']['target9'],pingTime=500)
         main.Mininet2.pingLong(src=main.params['PING']['source10'],target=main.params['PING']['target10'],pingTime=500)
 
+        main.step("Create TestONTopology object")
+        ctrls = []
+        count = 1
+        while True:
+            temp = ()
+            if ('ip' + str(count)) in main.params['CTRL']:
+                temp = temp + (getattr(main,('ONOS' + str(count))),)
+                temp = temp + ("ONOS"+str(count),)
+                temp = temp + (main.params['CTRL']['ip'+str(count)],)
+                temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+                ctrls.append(temp)
+                count = count + 1
+            else:
+                break
+        global MNTopo 
+        Topo = TestONTopology(main.Mininet1, ctrls) # can also add Intent API info for intent operations
+        MNTopo = Topo
+
+        main.step("Compare ONOS Topology to MN Topology")
+        for n in range(1,5):
+            result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+            utilities.assert_equals(expect=main.TRUE,actual=result,onpass="ONOS" + str(n) + " Topology matches MN Topology",onfail="ONOS" + str(n) + " Topology does not match MN Topology")
+
 
     def CASE5(self,main) :
         import re
@@ -328,20 +330,24 @@
         main.case("Running ONOS Constant State Tests")
         main.step("Get the current In-Memory Topology on each ONOS Instance and Compare it to the Topology before component failure")
 
-        main.step("Get the Mastership of each switch and compare to the Mastership before component failure")
-        (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['switchURL']],stdout=PIPE).communicate()
-        result = main.TRUE
-        for i in range(1,29):
-            switchDPID = str(main.Mininet1.getSwitchDPID(switch="s"+str(i)))
-            switchDPID = switchDPID[:2]+":"+switchDPID[2:4]+":"+switchDPID[4:6]+":"+switchDPID[6:8]+":"+switchDPID[8:10]+":"+switchDPID[10:12]+":"+switchDPID[12:14]+":"+switchDPID[14:]
-            master1 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)
-            master2 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout)
-            if main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)==main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout):
-                result = result and main.TRUE
-            else:
-                result = main.FALSE
-        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Mastership of Switches was not changed",onfail="MASTERSHIP OF SWITCHES HAS CHANGED!!!")
-        result1 = result
+        #NOTE: Expected behavior for this case is for switchs to change mastership to another 
+        #      controller if the current controller's zk client loses connection with the ZK controller
+        #
+        #main.step("Get the Mastership of each switch and compare to the Mastership before component failure")
+        #(stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['switchURL']],stdout=PIPE).communicate()
+        #result = main.TRUE
+        #for i in range(1,29):
+        #    switchDPID = str(main.Mininet1.getSwitchDPID(switch="s"+str(i)))
+        #    switchDPID = switchDPID[:2]+":"+switchDPID[2:4]+":"+switchDPID[4:6]+":"+switchDPID[6:8]+":"+switchDPID[8:10]+":"+switchDPID[10:12]+":"+switchDPID[12:14]+":"+switchDPID[14:]
+        #    master1 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)
+        #    master2 = main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout)
+        #    if master1 == master2:
+        #    #if main.ZK1.findMaster(switchDPID=switchDPID,switchList=masterSwitchList1)==main.ZK1.findMaster(switchDPID=switchDPID,switchList=stdout):
+        #        result = result and main.TRUE
+        #    else:
+        #        result = main.FALSE
+        #utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Mastership of Switches was not changed",onfail="MASTERSHIP OF SWITCHES HAS CHANGED!!!")
+        #result1 = result
 
         main.step("Get the High Level Intents and compare to before component failure")
         (stdout,stderr)=Popen(["curl",main.params['CTRL']['ip1']+":"+main.params['CTRL']['restPort1']+main.params['CTRL']['intentHighURL']],stdout=PIPE).communicate()
@@ -379,7 +385,7 @@
         result4 = result
         
         main.step("Check the continuous pings to ensure that no packets were dropped during component failure")
-        main.Mininet2.pingKill()
+        main.Mininet2.pingKill(main.params['TESTONUSER'], main.params['TESTONIP'])
         result = main.FALSE
         for i in range(8,18):
             result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
@@ -391,7 +397,30 @@
             main.log.info("No Loss in the pings!")
         utilities.assert_equals(expect=main.FALSE,actual=result,onpass="No Loss of connectivity!",onfail="LOSS OF CONNECTIVITY")
         result5=not result
-        result = result1 and result2 and result3 and result4 and result5
+
+        main.step("Check that ONOS Topology is consistent with MN Topology")
+        ctrls = []
+        count = 1
+        while True:
+            temp = ()
+            if ('ip' + str(count)) in main.params['CTRL']:
+                temp = temp + (getattr(main,('ONOS' + str(count))),)
+                temp = temp + ("ONOS"+str(count),)
+                temp = temp + (main.params['CTRL']['ip'+str(count)],)
+                temp = temp + (eval(main.params['CTRL']['port'+str(count)]),)
+                ctrls.append(temp)
+                count = count + 1
+            else:
+                break
+
+        result6 = main.TRUE
+        for n in range(1,5):
+            result = main.Mininet1.compare_topo(MNTopo, main.ONOS1.get_json(main.params['CTRL']['ip'+str(n)]+":"+main.params['CTRL']['restPort'+str(n)]+main.params['TopoRest']))
+            utilities.assert_equals(expect=main.TRUE,actual=result,onpass="ONOS" + str(n) + " Topology matches MN Topology",onfail="ONOS" + str(n) + " Topology does not match MN Topology")
+            result6 = result6 and result
+
+
+        result = result1 and result2 and result3 and result4 and result5 and result6
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Constant State Tests Passed!",onfail="CONSTANT STATE TESTS FAILED!!")
 
     def CASE7 (self,main):
@@ -411,7 +440,7 @@
         main.step("Determine the current number of switches and links")
         (number,active)=main.ONOS1.num_switch(RestIP=main.params['CTRL']['ip1'])
         links = main.ONOS1.num_link(RestIP=main.params['CTRL']['ip1'])
-        main.log.info("Currently there are %s switches, %s are active, and %s links" %(number,active,links))
+        main.log.info("Currently there are %s switches %s of which are active, and %s links" %(number,active,links))
         
         main.step("Kill Link between s3 and s28")
         main.Mininet1.link(END1="s3",END2="s28",OPTION="down")
@@ -421,7 +450,7 @@
         result = main.Mininet1.link(END1="s3",END2="s28",OPTION="up")
 
         main.step("Check for loss in pings when Link is brought down")
-        main.Mininet2.pingKill()
+        main.Mininet2.pingKill(main.params['TESTONUSER'], main.params['TESTONIP'])
         result = main.FALSE
         for i in range(8,18):
             result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
@@ -432,9 +461,9 @@
         else:
             main.log.info("No Loss in the pings!")
         utilities.assert_equals(expect=main.FALSE,actual=result,onpass="No Loss of connectivity!",onfail="LOSS OF CONNECTIVITY")
-        result2 = result
-        result = result1 and not result2
-        utilities.assert_equals(expect=main.FALSE,actual=result,onpass="Link failure is discovered correctly and no traffic is lost!",onfail="Link Discovery failed or traffic was dropped!!!")
+        result2 = not result
+        result = result1 and  result2
+        utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Link failure is discovered correctly and no traffic is lost!",onfail="Link Discovery failed or traffic was dropped!!!")
         
 
     
@@ -456,11 +485,11 @@
         main.step("Determine the current number of switches and links")
         (number,active)=main.ONOS1.num_switch(RestIP=main.params['CTRL']['ip1'])
         links = main.ONOS1.num_link(RestIP=main.params['CTRL']['ip1'])
-        main.log.info("Currently there are %s switches, %s are active, and %s links" %(number,active,links))
+        main.log.info("Currently there are %s switches %s of which are active, and %s links" %(number,active,links))
         
         main.step("Kill s28 ")
         main.Mininet2.del_switch("s28")
-        time.sleep(31)
+        time.sleep(45)
         result = main.ONOS1.check_status_report(main.params['CTRL']['ip1'],str(int(active)-1),str(int(links)-4))
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Switch Discovery is Working",onfail="Switch Discovery FAILED TO WORK PROPERLY!")
 
@@ -468,13 +497,13 @@
         main.Mininet2.add_switch("s28")
         main.Mininet1.assign_sw_controller(sw="28",ip1=main.params['CTRL']['ip1'],port1=main.params['CTRL']['port1'])
         main.Mininet1.assign_sw_controller(sw="28",count=5,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']) 
-        time.sleep(31)
+        time.sleep(45)
         result = main.ONOS1.check_status_report(main.params['CTRL']['ip1'],active,links)
         utilities.assert_equals(expect=main.TRUE,actual=result,onpass="Switch Discovery is Working",onfail="Switch Discovery FAILED TO WORK PROPERLY!")
         result1=result
 
         main.step("Checking for Traffic Loss")
-        main.Mininet2.pingKill()
+        main.Mininet2.pingKill(main.params['TESTONUSER'], main.params['TESTONIP'])
         result = main.FALSE
         for i in range(8,18):
             result = result or main.Mininet2.checkForLoss("/tmp/ping.h"+str(i))
diff --git a/TestON/tests/HATestZK/HATestZK.topo b/TestON/tests/HATestZK/HATestZK.topo
index 9ccdb17..cecffad 100644
--- a/TestON/tests/HATestZK/HATestZK.topo
+++ b/TestON/tests/HATestZK/HATestZK.topo
@@ -2,7 +2,7 @@
 
     <COMPONENT>
         <ZK1>
-            <host>10.128.9.1</host>
+            <host>10.128.11.1</host>
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
@@ -12,7 +12,7 @@
         </ZK1>
 
         <ZK2>
-            <host>10.128.9.2</host>
+            <host>10.128.11.2</host>
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
@@ -22,7 +22,7 @@
         </ZK2>
 
         <ZK3>
-            <host>10.128.9.3</host>
+            <host>10.128.11.3</host>
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
@@ -32,7 +32,7 @@
         </ZK3>
        
         <ZK4>
-            <host>10.128.9.4</host>
+            <host>10.128.11.4</host>
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
@@ -42,7 +42,7 @@
         </ZK4>
 
         <ZK5>
-            <host>10.128.9.5</host>
+            <host>10.128.11.5</host>
             <user>admin</user>
             <password></password>
             <type>ZookeeperCliDriver</type>
@@ -52,7 +52,7 @@
         </ZK5>
 
         <RC1>
-            <host>10.128.9.1</host>
+            <host>10.128.11.1</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
@@ -62,7 +62,7 @@
         </RC1>
 
         <RC2>
-            <host>10.128.9.2</host>
+            <host>10.128.11.2</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
@@ -72,7 +72,7 @@
         </RC2>
        
         <RC3>
-            <host>10.128.9.3</host>
+            <host>10.128.11.3</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
@@ -82,7 +82,7 @@
         </RC3>
        
         <RC4>
-            <host>10.128.9.4</host>
+            <host>10.128.11.4</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
@@ -92,7 +92,7 @@
         </RC4>
 
         <RC5>
-            <host>10.128.9.5</host>
+            <host>10.128.11.5</host>
             <user>admin</user>
             <password></password>
             <type>RamCloudCliDriver</type>
@@ -102,7 +102,7 @@
         </RC5>
 
         <ONOS1>
-            <host>10.128.9.1</host>
+            <host>10.128.11.1</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
@@ -112,7 +112,7 @@
         </ONOS1>
 
         <ONOS2>
-            <host>10.128.9.2</host>
+            <host>10.128.11.2</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
@@ -122,7 +122,7 @@
         </ONOS2>
 
         <ONOS3>
-            <host>10.128.9.3</host>
+            <host>10.128.11.3</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
@@ -132,7 +132,7 @@
         </ONOS3>
        
         <ONOS4>
-            <host>10.128.9.4</host>
+            <host>10.128.11.4</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
@@ -142,7 +142,7 @@
         </ONOS4>
 
         <ONOS5>
-            <host>10.128.9.5</host>
+            <host>10.128.11.5</host>
             <user>admin</user>
             <password></password>
             <type>OnosCliDriver</type>
@@ -152,7 +152,7 @@
         </ONOS5>
 
         <Mininet1>
-            <host>10.128.9.10</host>
+            <host>10.128.11.11</host>
             <user>admin</user>
             <password></password>
             <type>MininetCliDriver</type>
@@ -166,7 +166,7 @@
         </Mininet1>
 
         <Mininet2>
-            <host>10.128.9.10</host>
+            <host>10.128.11.11</host>
             <user>admin</user>
             <password></password>
             <type>RemoteMininetDriver</type>
diff --git a/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1 b/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1
deleted file mode 100644
index 9bf2f2d..0000000
--- a/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1
+++ /dev/null
@@ -1,176 +0,0 @@
-ONOS1 
-1	0.0	0.0	0.0	0.00239947245396
-ONOS2 
-1	0.0	0.0	0.0	0.00240234871667
-ONOS3 
-5	0.0	0.0	0.0	0.0121141862312
-
---------------------------------------------------------------------------------- 
-ONOS1 
-1629	18.7889293392	4.48449607458	1.54147719592	3.62505307741
-ONOS2 
-1629	19.2261277938	4.60475972875	1.58370323175	3.62941581988
-ONOS3 
-1629	17.8382714302	4.24867153003	1.459765156	3.66161718472
-
---------------------------------------------------------------------------------- 
-ONOS1 
-3183	31.2994548933	9.22645211247	3.29904481351	6.61046866244
-ONOS2 
-3183	32.7606424407	9.56283317479	3.41481907462	6.61796407638
-ONOS3 
-3183	31.5861689913	9.24594010149	3.30141569916	6.673448832
-
---------------------------------------------------------------------------------- 
-ONOS1 
-4842	39.9442818508	13.4074669965	4.93312182074	9.42788406221
-ONOS2 
-4842	39.9501179617	13.4738095108	4.96166898609	9.43793553665
-ONOS3 
-4842	38.0249857507	12.9562504618	4.77594497277	9.51213793959
-
---------------------------------------------------------------------------------- 
-ONOS1 
-6333	43.3326254024	17.1545676648	6.55334823824	11.6061812929
-ONOS2 
-6333	43.1025815278	17.1367790337	6.5530511963	11.6177361571
-ONOS3 
-6333	43.777667171	17.1929221224	6.55828955792	11.7036190253
-
---------------------------------------------------------------------------------- 
-ONOS1 
-7959	46.9561811449	20.4581350129	8.03528568305	13.7759524559
-ONOS2 
-7959	46.3408669423	20.4108823645	8.02922603097	13.7889504862
-ONOS3 
-7959	45.6410475294	20.1576242077	7.92726689795	13.8850824339
-
---------------------------------------------------------------------------------- 
-ONOS1 
-9531	45.9906744738	22.7715112677	9.24095510988	15.6290021503
-ONOS2 
-9531	48.055448081	23.2523557438	9.41177895671	15.6430625973
-ONOS3 
-9531	47.4942907039	23.4438740596	9.53345804013	15.746412627
-
---------------------------------------------------------------------------------- 
-ONOS1 
-11178	48.3540408864	25.9507802704	10.8600911453	17.4138152199
-ONOS2 
-11178	47.5616430096	25.8795464358	10.8505372729	17.4285967804
-ONOS3 
-11178	48.7458886411	25.9965007518	10.8666758121	17.5380150699
-
---------------------------------------------------------------------------------- 
-ONOS1 
-12694	49.6724719708	28.3431418559	12.1755703493	18.8343463719
-ONOS2 
-12694	49.0146328907	28.2907017805	12.1735446036	18.849661524
-ONOS3 
-12694	48.6960578175	28.1228412863	12.0936097846	18.9623561373
-
---------------------------------------------------------------------------------- 
-ONOS1 
-14292	48.8589089419	30.4653291422	13.5261901847	20.242085149
-ONOS2 
-14292	49.3030435553	30.5976153949	13.5848633365	20.2578017737
-ONOS3 
-14292	48.9109659895	30.4555207991	13.5139122893	20.3733211479
-
---------------------------------------------------------------------------------- 
-ONOS1 
-15855	49.2637510688	32.350154998	14.7329286521	21.479967821
-ONOS2 
-15855	48.80087594	32.2746234064	14.721362789	21.4958003475
-ONOS3 
-15855	49.7070084114	32.4071423037	14.741735047	21.6129479915
-
---------------------------------------------------------------------------------- 
-ONOS1 
-17479	49.7954667568	34.2769555101	16.0681836861	22.6938152648
-ONOS2 
-17479	48.5948066323	33.8055349065	15.8243597438	22.71001968
-ONOS3 
-17479	50.1286934521	34.3315901641	16.077099823	22.8287509266
-
---------------------------------------------------------------------------------- 
-ONOS1 
-18996	50.4089945863	35.8426346551	17.200968186	23.6775401881
-ONOS2 
-18996	49.8422938084	35.7578440385	17.1873611818	23.6935523664
-ONOS3 
-18996	48.7482979129	35.4720353826	17.0666482037	23.8124199695
-
---------------------------------------------------------------------------------- 
-ONOS1 
-20565	48.5587834324	36.7329685213	18.1159622539	24.647671921
-ONOS2 
-20565	48.3110087382	36.676081054	18.1094495228	24.6638443055
-ONOS3 
-20565	48.93297292	36.793631721	18.1262156419	24.7827468466
-
---------------------------------------------------------------------------------- 
-ONOS1 
-22167	49.0508150775	38.1245132609	19.3059350415	25.5841260816
-ONOS2 
-22170	48.5221636661	38.0385655774	19.2912194483	25.6036562614
-ONOS3 
-22171	48.5824052178	37.9982884305	19.2528429078	25.7236458284
-
---------------------------------------------------------------------------------- 
-ONOS1 
-23639	47.9777788333	38.8926943034	20.1868609754	26.308941697
-ONOS2 
-23639	48.1528601732	38.9174026097	20.2069767591	26.3249181854
-ONOS3 
-23639	48.3280130991	38.9561603833	20.1981646715	26.4427299331
-
---------------------------------------------------------------------------------- 
-ONOS1 
-25268	49.8567068142	40.3154609814	21.3906394143	27.1525946206
-ONOS2 
-25268	49.260910735	40.2252713754	21.3745229372	27.1686258006
-ONOS3 
-25268	48.6285982236	40.0672365492	21.2987719637	27.2860637996
-
---------------------------------------------------------------------------------- 
-ONOS1 
-26786	48.5713107436	40.8577368773	22.194671911	27.82491922
-ONOS2 
-26786	48.2099421547	40.7761299471	22.1790837949	27.8408111321
-ONOS3 
-26786	48.806830681	40.9159842596	22.2060400391	27.9570400311
-
---------------------------------------------------------------------------------- 
-ONOS1 
-28345	49.5354143965	41.7745390383	23.1196161385	28.4949893223
-ONOS2 
-28345	48.9994356563	41.7084318627	23.1119888217	28.5101088539
-ONOS3 
-28352	48.8058937866	41.7666073305	23.2132849025	28.6323389508
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29429	42.7205926401	41.133551867	23.6205125079	28.6600165985
-ONOS2 
-29429	42.3177151851	41.0468840661	23.6034227045	28.6753451692
-ONOS3 
-29429	43.0359873942	41.1940339927	23.632692912	28.7876408357
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29429	25.9113492373	37.219176866	22.8461399993	27.7919878574
-ONOS2 
-29429	25.6669917087	37.1407565968	22.8296104663	27.8064105758
-ONOS3 
-29429	26.1026458256	37.2739033564	22.8579210822	27.9119214291
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29429	14.4594435488	33.1206670242	21.9747328469	26.9749583673
-ONOS2 
-29429	14.3230834597	33.0508822562	21.9588337904	26.9884033819
-ONOS3 
-29429	14.5661937683	33.1693671304	21.9860645708	27.0878504545
-
---------------------------------------------------------------------------------- 
diff --git a/TestON/tests/scaleONOS7nodes/scale3nodesrate1 b/TestON/tests/scaleONOS7nodes/scale3nodesrate1
deleted file mode 100644
index 9caaa19..0000000
--- a/TestON/tests/scaleONOS7nodes/scale3nodesrate1
+++ /dev/null
@@ -1,176 +0,0 @@
-ONOS1 
-46	0.0159911170741	0.00330570923568	0.00110803039902	0.441388322918
-ONOS2 
-169	1.4232094196	0.294208121975	0.0986147055128	1.51983829287
-ONOS3 
-171	0.0	0.0	0.0	1.55826946014
-
---------------------------------------------------------------------------------- 
-ONOS1 
-1798	22.6349154776	5.65275867857	1.9589352278	12.3275451079
-ONOS2 
-1798	20.8145837636	5.10869633674	1.76466018187	12.4714931153
-ONOS3 
-1798	22.0791171081	5.47471756204	1.8948008043	12.6620550588
-
---------------------------------------------------------------------------------- 
-ONOS1 
-3426	32.6111034518	9.70067081694	3.47552137643	19.2298566624
-ONOS2 
-3426	34.2140340329	10.1493268369	3.63676115043	19.4125205852
-ONOS3 
-3426	33.2868110325	9.74024939592	3.48023473974	19.6519137751
-
---------------------------------------------------------------------------------- 
-ONOS1 
-5055	41.1154795596	14.3295561289	5.31573150012	24.0283473918
-ONOS2 
-5055	40.2618482051	13.877993799	5.13339673365	24.228413302
-ONOS3 
-5055	40.3643986592	14.0755662838	5.21932817392	24.4842903967
-
---------------------------------------------------------------------------------- 
-ONOS1 
-6648	44.0476719882	17.5652363011	6.72454316035	27.4144919114
-ONOS2 
-6648	42.837315358	17.4660161912	6.71183843666	27.6117430147
-ONOS3 
-6660	44.6253917733	17.5746713259	6.71339463557	27.9185886652
-
---------------------------------------------------------------------------------- 
-ONOS1 
-8223	45.5204851503	20.4781124794	8.08545718874	29.9446955545
-ONOS2 
-8223	47.0478790956	20.9180018605	8.25491048977	30.134904835
-ONOS3 
-8223	46.0539241762	20.9125541798	8.28383012594	30.3823258358
-
---------------------------------------------------------------------------------- 
-ONOS1 
-9761	48.2472730422	23.9163379895	9.74938162547	31.8260874816
-ONOS2 
-9761	47.8554206671	23.5746897161	9.5837979702	32.0069787799
-ONOS3 
-9761	47.9086582813	23.7657314867	9.68161495588	32.2419983542
-
---------------------------------------------------------------------------------- 
-ONOS1 
-11390	48.2977231982	26.23623474	11.0124446377	33.6205734759
-ONOS2 
-11390	48.6817460585	26.4263736828	11.1034039314	33.7938746975
-ONOS3 
-11390	48.9914985281	26.3026447756	11.0160590425	34.0180954514
-
---------------------------------------------------------------------------------- 
-ONOS1 
-13019	49.5587788244	28.9609886715	12.535952061	35.1042945838
-ONOS2 
-13019	49.7703686117	28.7704010275	12.4112682408	35.2671782942
-ONOS3 
-13019	48.3486366824	28.6472976101	12.4114088561	35.4806994928
-
---------------------------------------------------------------------------------- 
-ONOS1 
-14618	49.576578555	30.8922696843	13.7378230586	36.2757731409
-ONOS2 
-14618	48.5440020686	30.7811465304	13.7316956109	36.4328337041
-ONOS3 
-14618	49.4866717797	30.8087248031	13.6891587016	36.6357205954
-
---------------------------------------------------------------------------------- 
-ONOS1 
-16187	49.4907941638	32.9074922652	15.0888963838	37.2077993376
-ONOS2 
-16187	49.6285423582	32.7484269078	14.9693742032	37.3552104338
-ONOS3 
-16187	48.8755660723	32.7250364726	15.0063681262	37.5478060295
-
---------------------------------------------------------------------------------- 
-ONOS1 
-17725	49.8836746982	34.5479805791	16.2364648337	37.9435104425
-ONOS2 
-17725	48.99884514	34.4732673007	16.246116043	38.0836022622
-ONOS3 
-17725	49.4211281632	34.4116883879	16.1694233436	38.2662174542
-
---------------------------------------------------------------------------------- 
-ONOS1 
-19354	49.8626223455	35.9745646504	17.3266700853	38.7671511869
-ONOS2 
-19354	48.4587733895	35.7738406011	17.2944948224	38.9024055739
-ONOS3 
-19354	49.6238625297	36.107629579	17.4523301701	39.0742037951
-
---------------------------------------------------------------------------------- 
-ONOS1 
-20949	48.7735412886	37.2334176044	18.4738354902	39.4261732644
-ONOS2 
-20949	49.2808245039	37.2112430739	18.3974292802	39.5555564351
-ONOS3 
-20949	49.0412343145	37.2603304894	18.4613220964	39.7222890977
-
---------------------------------------------------------------------------------- 
-ONOS1 
-22518	49.2233054229	38.459058778	19.5122554055	39.9666332511
-ONOS2 
-22518	49.3199190997	38.5500864358	19.5788242673	40.0902311981
-ONOS3 
-22518	48.5868586294	38.3006063004	19.437642791	40.2494766808
-
---------------------------------------------------------------------------------- 
-ONOS1 
-24059	49.2130863162	39.6417956777	20.6446125264	40.4016538809
-ONOS2 
-24059	48.8272590697	39.4712361736	20.518926366	40.5198056741
-ONOS3 
-24059	48.7738335012	39.5215088361	20.5824985986	40.6715650211
-
---------------------------------------------------------------------------------- 
-ONOS1 
-25687	48.7438034983	40.4560575512	21.5487100295	40.9303516742
-ONOS2 
-25687	49.5471148575	40.6750208451	21.6586836347	41.0440523285
-ONOS3 
-25687	49.5528136103	40.5962066501	21.5740317285	41.1905085161
-
---------------------------------------------------------------------------------- 
-ONOS1 
-27208	48.3440895308	41.1892039746	22.4234679597	41.246260379
-ONOS2 
-27208	49.7248389814	41.5217226735	22.5714921035	41.3552443508
-ONOS3 
-27208	48.9489326527	41.4186969689	22.5835508207	41.4954641517
-
---------------------------------------------------------------------------------- 
-ONOS1 
-28764	48.636023504	42.0763468157	23.4482599273	41.5834003461
-ONOS2 
-28764	49.5204659279	42.2043214958	23.4251146139	41.6880977866
-ONOS3 
-28764	48.7203412028	42.0949248759	23.4349162749	41.822682997
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29669	41.3110354992	41.1541779314	23.753983268	40.9907471033
-ONOS2 
-29669	40.0637318705	40.9112993447	23.707965358	41.0894107566
-ONOS3 
-29669	41.8871662556	41.2877306835	23.7807095826	41.2163432863
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29669	23.0530097167	36.6223527412	22.847948773	39.2515156116
-ONOS2 
-29669	24.299881722	37.0180744675	22.9307258039	39.3420203293
-ONOS3 
-29669	23.3745109274	36.7411989007	22.8736556812	39.4584630811
-
---------------------------------------------------------------------------------- 
-ONOS1 
-29669	13.9823571918	33.1372750967	22.0989039162	37.6540346
-ONOS2 
-29669	13.5601880389	32.9417096657	22.0560923439	37.7370627214
-ONOS3 
-29669	14.1773575332	33.2448115489	22.1237680517	37.8440976097
-
---------------------------------------------------------------------------------- 
diff --git a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
index d485ee8..b5d7628 100644
--- a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
+++ b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.params
@@ -1,5 +1,5 @@
 <PARAMS>
-    <testcases>1,2</testcases>
+    <testcases>1,31,4,41,5,51,6,61,7,71,103,100,8,61,9,51,10,41,11,31,104,101</testcases>
     <tcpdump> 
         <intf>eth0</intf>
         <port>port 6633</port>
@@ -68,11 +68,18 @@
 	<restPort>8080</restPort>
 	<restURL>/wm/onos/topology/hosts</restURL>
     </RESTCALL>
-    <switches_num>50</switches_num>
-    <RATE1>30</RATE1>
-    <RATE2>50</RATE2>
-    <RUN_DUR>600</RUN_DUR>
-    <sleep_t>32</sleep_t>
-    <loop>22</loop>
+    <switches_num>30</switches_num>
+    <RATE1>100</RATE1>
+    <RUN_DUR>240</RUN_DUR>
+    <sleep_t>8</sleep_t>
+    <loop>10</loop>
     <port>10</port>
+    <sleep_init>160</sleep_init>
+    <int_num>1000</int_num>
+    <addrate>1000</addrate>
+    <NBdur>60</NBdur>
+    <NBsleep>10</NBsleep>
+    <NBloop>6</NBloop>
+    <NBsleep_init>10</NBsleep_init>
+    <db_script>/home/admin/TestON/scripts/./scaleoutdatagraph.py</db_script>
 </PARAMS>      
diff --git a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
index e8a286e..2dbe03c 100644
--- a/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
+++ b/TestON/tests/scaleONOS7nodes/scaleONOS7nodes.py
@@ -1,3 +1,4 @@
+#Author: Santhosh Jayashankar
 class scaleONOS7nodes :
 
 
@@ -14,33 +15,39 @@
         main.case("Initial setup")
         main.step("Stop ONOS")
         import time
+        main.log.info("Stopping all ONOS nodes...")
         main.ONOS1.stop_all()
         main.ONOS2.stop_all()
         main.ONOS3.stop_all()
 #        main.print_hello_world()
         main.ONOS4.stop_all()
-       # main.ONOS5.stop_all()
-       # main.ONOS6.stop_all()
-       # main.ONOS7.stop_all()
-        main.ONOS2.stop_rest()
+        main.ONOS5.stop_all()
+        main.ONOS6.stop_all()
+        main.ONOS7.stop_all()
+        #main.ONOS2.stop_rest()
+        time.sleep(5)
         #main.ONOS1.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
         #main.ONOS2.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
         #main.ONOS3.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")
         #main.ONOS4.handle.sendline("cp ~/onos.properties.proactive ~/ONOS/conf/onos.properties")        
         #main.step("Start tcpdump on mn")
         #main.Mininet2.start_tcpdump(main.params['tcpdump']['filename'], intf = main.params['tcpdump']['intf'], port = main.params['tcpdump']['port'])
-        main.step("Start ONOS")
+        main.step("Starting 3 ONOS nodes...")
         main.Zookeeper1.start()
         main.Zookeeper2.start()
         main.Zookeeper3.start()
         main.Zookeeper4.start()
+        main.Zookeeper5.start()
+        main.Zookeeper6.start()
+        main.Zookeeper7.start()
+        
         time.sleep(5)
         
         
         main.RamCloud1.del_db()
         main.RamCloud2.del_db()
         main.RamCloud3.del_db()
-        main.RamCloud4.del_db()
+       # main.RamCloud4.del_db()
 
         time.sleep(5)
         #main.log.report("Pulling latest code from github to all nodes")
@@ -84,14 +91,16 @@
         main.RamCloud1.start_serv()
         main.RamCloud2.start_serv()
         main.RamCloud3.start_serv()
-        #main.RamCloud4.start_serv()
-
+        time.sleep(5)
         main.ONOS1.start()
         main.ONOS2.start()
         main.ONOS3.start()
         #main.ONOS4.start()
-
-
+        time.sleep(5)
+        
+        #main.ONOS1.handle.sendline("./onos.sh core start")
+        #main.ONOS1.handle.sendline("./onos.sh core start")
+        #main.ONOS1.handle.sendline("./onos.sh core start")
 
         main.ONOS1.start_rest()
         main.ONOS2.start_rest()
@@ -143,7 +152,8 @@
         time.sleep(10)
 
 
-    def CASE2(self,main) :
+    def CASE31(self,main):
+        main.case("Staring SB load with 3 ONOS nodes")
         ip1 = main.params['CTRL']['ip1']
         ip2 = main.params['CTRL']['ip2']
         ip3 = main.params['CTRL']['ip3']
@@ -153,74 +163,78 @@
         port = main.params['port']
         switches_num = main.params['switches_num']
         print loop
+        sleep_init = int(main.params['sleep_init'])
         sleep_t =int( main.params['sleep_t'])
         main.case("Starting SB load on 3 nodes from mininet with " + rate1 +"  added/removed/s for " + run_dur)
-        main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " " + switches_num + " " + port +  " " + rate1 + " " + run_dur +  "  \"11\"")
-        main.Mininet2.handle.expect("starting to generate south bound load ....", timeout=400)
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
+        main.log.info("Adding switches and ports.....")
+        main.Mininet2.handle.expect("Starting SB load....", timeout=400)
+        main.log.info("Starting SB load....")
         import time
         import json
+        import math
+        time.sleep(sleep_init)
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1", 'w').close()
         url1 = "http://10.128.10.1:8080/wm/onos/metrics"
         url2 = "http://10.128.10.2:8080/wm/onos/metrics"
         url3 = "http://10.128.10.3:8080/wm/onos/metrics"
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate1", "a")
         #time.sleep(10)
+        tpval = 0.0
+        global tpavg3n
+        tpavg3n = 0.0
         for i in range(int (loop)):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            if json_str1 != "" and json_str2 != "" and json_str3 != "":
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            #float jval = 0
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "":
                 # write_str = str(json_str["meters"][4]["meter"][2])
                 #print str(json_str["meters"][4])
                 #f.write(str(json_str["meters"][4]))
                 #f.write('\n')
                 #time.sleep(3)
-                f.write("ONOS1 \n")
-                f.write(str(json_str1["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2 \n")
-                f.write(str(json_str2["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3 \n")
-                f.write(str(json_str3["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['mean_rate']))
+                for j in range(1,4):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                    if j == 3:
+                        tpval += float(json_str[j]["meters"][4]['meter']['m1_rate']) 
+                        #print tpval
+                        #print ("\n")
+                            
+                
                 f.write('\n')
                 f.write('\n')
                 
                 f.write("--------------------------------------------------------------------------------- \n") 
                 time.sleep(sleep_t)
         f.close() 
+       # print tpval
+        print("\n")
+        tpavg3n = round(tpval)/loop
+        print tpavg3n
         main.Mininet2.handle.expect("\$", timeout=900)
        # main.Mininet2.handle.sendline("sudo mn -c")
         #main.Mininet2.handle.expect("\$")
-        time.sleep(5)
        # main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
         
 
-    def CASE3(self,main):
+    def CASE32(self,main):
         ip1 = main.params['CTRL']['ip1']
         ip2 = main.params['CTRL']['ip2']
         ip3 = main.params['CTRL']['ip3']
@@ -228,76 +242,66 @@
         rate2 = main.params['RATE2']
         run_dur = main.params['RUN_DUR']
         loop = int(main.params['loop'])
+        sleep_init = int(main.params['sleep_init'])
         sleep_t = int(main.params['sleep_t'])
         port = main.params['port']
         switches_num = main.params['switches_num']
         main.case("Starting SB load on 3 nodes from mininet with " + rate2 +"  added/removed/s for " + run_dur)
-        main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur +  "  \"11\"")
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " " + switches_num + " " + port + " " + rate2 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"10.128.10.1\" 100 50 1200 \"11\"")
-        main.Mininet2.handle.expect("starting to generate south bound load ....", timeout=900 )
-        
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
+        time.sleep(sleep_init )
         import json
-        
+        time.sleep(sleep_init)
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate2", 'w').close()
         url1 = "http://10.128.10.1:8080/wm/onos/metrics"
         url2 = "http://10.128.10.2:8080/wm/onos/metrics"
         url3 = "http://10.128.10.3:8080/wm/onos/metrics"
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale3nodesrate2", "a")
-        #time.sleep(10)
         for i in range(int (loop)):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            if json_str1 != "" and json_str2 != "" and json_str3 != "":
+            j1 = main.ONOS1.get_json(url1)
+            j2 = main.ONOS1.get_json(url2)
+            j3 = main.ONOS1.get_json(url3)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "":
                 # write_str = str(json_str["meters"][4]["meter"][2])
                 #print str(json_str["meters"][4])
                 #f.write(str(json_str["meters"][4]))
                 #f.write('\n')
                 #time.sleep(3)
-                f.write("ONOS1 \n")
-                f.write(str(json_str1["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2 \n")
-                f.write(str(json_str2["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3 \n")
-                f.write(str(json_str3["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['mean_rate']))
+                for j in range(1,4):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                
                 f.write('\n')
                 f.write('\n')
+                
                 f.write("--------------------------------------------------------------------------------- \n") 
                 time.sleep(sleep_t)
-        f.close()
+        f.close() 
+        #time.sleep(10)
         main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
        # main.Mininet2.handle.sendline("sudo mn -c")
         #time.sleep(5)
        # main.Mininet2.handle.expect("\$", timeout=900)
 
 
-    def CASE4(self,main):
+    def CASE33(self,main):
         
         main.case("Starting NB Throughput test")
         ip1 = main.params['CTRL']['ip1']
@@ -305,7 +309,13 @@
         ip3 = main.params['CTRL']['ip3']
         import time
         import json
-
+        int_num = main.params['int_num']
+        addrate = main.params['addrate']
+        NBdur = main.params['NBdur']
+        NBsleep = int(main.params['NBsleep'])
+        NBsleep_init = int(main.params['NBsleep_init'])
+        NBloop = int(main.params['NBloop'])
+        
         main.Mininet4.handle.expect("\$")
         #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
         #main.Mininet2.handle.expect("mininet>" , timeout=400)
@@ -316,15 +326,18 @@
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.3:6633")
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.3:6633")
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.3:6633")
-
+        
         main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
         main.ONOS3.handle.expect("\$")
 
-        main.ONOS3.handle.sendline("./multiLoadgen_NB.py -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 \" -i 4 -g 100 -a 1 -d 1 -p 0")
-        main.ONOS3.handle.expect("intent group is : 0", timeout=900)
-
-        
+        main.ONOS3.handle.sendline("./loadgen_NB.py -n 3 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+        main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
+        time.sleep(NBsleep_init)
+        #time.sleep(60)
         import json
+        nbtpval = 0.0
+        global nbtpavg3n
+        nbtpavg3n = 0.0
         
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale3nodesrate1", 'w').close()
         url1 = "http://10.128.10.1:8080/wm/onos/metrics"
@@ -332,95 +345,77 @@
         url3 = "http://10.128.10.3:8080/wm/onos/metrics"
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale3nodesrate1", "a")
         #time.sleep(10)
-        for i in range(8):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            if json_str1 != "" and json_str2 != "" and json_str3 != "":
-                f.write("ONOS1......IncomingRate \n ")
-                f.write(str(json_str1["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2......IncomingRate \n")
-                f.write(str(json_str2["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3......IncomingRate \n")
-                f.write(str(json_str3["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write('\n')
-
-                f.write("--------------------------------------------------------------------------------- \n") 
+        for i in range(NBloop):
+            j1 = main.ONOS1.get_json(url1)
+            j2 = main.ONOS1.get_json(url2)
+            j3 = main.ONOS1.get_json(url3)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "":
+                for j in range(1,4):
+                    f.write("*****************ONOS" + str(j) + " INCOMING RATE****************************" "\n")
+                    f.write(str(json_str[j]["meters"][0]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['mean_rate']))
+                    f.write('\n')
                 
-                f.write("ONOS1......ProcessingRate \n ")
-                f.write(str(json_str1["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2......ProcessingRate \n")
-                f.write(str(json_str2["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3......ProcessingRate \n")
-                f.write(str(json_str3["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
-                f.write('\n')
+                    f.write('\n')
 
-                f.write("--------------------------------------------------------------------------------- \n") 
-                time.sleep(10)
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                
+                    f.write("***************** ONOS" + str(j) + " PROCESSING RATE************************" + " \n ")
+                    f.write(str(json_str[j]["meters"][1]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['mean_rate']))
+                    f.write('\n')
+                    f.write('\n')
+                    f.write('\n')
+                    if j == 3:
+                        nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate']) 
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                    f.write("--------------------------------------------------------------------------------- \n \n") 
+                    time.sleep(NBsleep)
         f.close()
-
-        main.ONOS3.handle.expect("\$", timeout=900)
+        print("\n")
+        nbtpavg3n = round(nbtpval)/NBloop
+        print nbtpavg3n
         
-    def CASE5(self,main):
+        main.ONOS3.handle.expect("\$", timeout=900)
+        time.sleep(180) 
+        
+    def CASE4(self,main):
         
         main.case("Starting ONOS scale-up to 4 nodes ")
         import time
        # main.RamCloud4.start_serv()
-        main.Zookeeper1.start()
+        main.ONOS5.handle.sendline("./onos.sh core stop")
+        main.ONOS6.handle.sendline("./onos.sh core stop")
+        main.ONOS7.handle.sendline("./onos.sh core stop")
+    
+            
+        main.Zookeeper4.start()
+        time.sleep(5)
+        
+        main.RamCloud4.del_db()
+        time.sleep(3)
+        main.RamCloud4.start_serv()
+        time.sleep(3)
         main.ONOS4.start()
         main.ONOS4.start_rest()
         time.sleep(5)
@@ -436,10 +431,109 @@
             else:
                 break
         utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+        
+        time.sleep(10)
+    
+    def CASE5(self,main):
+        
+        main.case("Starting ONOS scale-up/down to 5 nodes ")
+        import time
+       # main.RamCloud4.start_serv()
+        main.ONOS6.handle.sendline("./onos.sh core stop")
+        main.ONOS7.handle.sendline("./onos.sh core stop")
+        #pdata = main.ONOS5.isup()
+    
+        main.Zookeeper5.start()
+        time.sleep(5)
+        
+        main.RamCloud5.del_db()
+        time.sleep(3)
+        main.RamCloud5.start_serv()
+        time.sleep(3)
+        main.ONOS5.start()
+        main.ONOS5.start_rest()
+        time.sleep(5)
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() 
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
         time.sleep(10)
 
     def CASE6(self,main):
         
+        main.case("Starting ONOS scale-up/down to 6 nodes ")
+        import time
+       # main.RamCloud4.start_serv()
+        main.ONOS7.handle.sendline("./onos.sh core stop")
+        #pdata = main.ONOS6.isup()
+
+        main.Zookeeper6.start()
+        time.sleep(5)
+        
+        main.RamCloud6.del_db()
+        time.sleep(3)
+        main.RamCloud6.start_serv()
+        time.sleep(3)
+        main.ONOS6.start()
+        main.ONOS6.start_rest()
+        time.sleep(5)
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+        time.sleep(10)
+
+    def CASE7(self,main):
+        
+        main.case("Starting ONOS scale-up/down to 7 nodes ")
+        import time
+       # main.RamCloud4.start_serv()
+        #pdata = main.ONOS7.isup()
+    
+        main.Zookeeper7.start()
+        time.sleep(5)
+        
+        main.RamCloud7.del_db()            
+        time.sleep(3)
+        main.RamCloud7.start_serv()
+        time.sleep(3)
+        main.ONOS7.start()
+        main.ONOS7.start_rest()
+        time.sleep(5)
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+        time.sleep(10)
+
+
+
+    def CASE41(self,main):
+        main.case("Starting SB test for 4 nodes")
         ip1 = main.params['CTRL']['ip1']
         ip2 = main.params['CTRL']['ip2']
         ip3 = main.params['CTRL']['ip3']
@@ -450,92 +544,80 @@
         switches_num = main.params['switches_num']
         port = main.params['port']
         print loop
+        sleep_init = int(main.params['sleep_init'])
         sleep_t =int( main.params['sleep_t'])
         main.case("Starting SB load on 4 nodes from mininet with " + rate1 +"  added/removed/s for " + run_dur)
-        main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur +  "  \"11\"")
-        main.Mininet2.handle.expect("starting to generate south bound load ....", timeout=900)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900)
         import time
         import json
+        import math
+        time.sleep(sleep_init)
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate1", 'w').close()
         url1 = "http://10.128.10.1:8080/wm/onos/metrics"
         url2 = "http://10.128.10.2:8080/wm/onos/metrics"
         url3 = "http://10.128.10.3:8080/wm/onos/metrics"
         url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        tpval = 0.0
+        global tpavg4n 
+        tpavg4n = 0.0
 
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate1", "a")
         #time.sleep(10)
         for i in range(int (loop)):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            json_str4 = main.ONOS4.get_json(url4)
-            if json_str1 != "" and json_str2 != "" and json_str3 != "" and json_str4 != "":
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "":
                 # write_str = str(json_str["meters"][4]["meter"][2])
                 #print str(json_str["meters"][4])
                 #f.write(str(json_str["meters"][4]))
                 #f.write('\n')
                 #time.sleep(3)
-
-                f.write("ONOS1 \n")
-                f.write(str(json_str1["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['mean_rate']))
+                for j in range(1,5):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                    if j == 3:
+                        tpval += float(json_str[j]["meters"][4]['meter']['m1_rate']) 
+                       # print tpval
+                
                 f.write('\n')
-
-                f.write("ONOS2 \n")
-                f.write(str(json_str2["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-
-                f.write("ONOS3 \n")
-                f.write(str(json_str3["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-
-                f.write("ONOS4 \n")
-                f.write(str(json_str4["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-
                 f.write('\n')
                 
+                f.write("--------------------------------------------------------------------------------- \n") 
                 time.sleep(sleep_t)
         f.close() 
+       # print tpval
+        print("\n")
+        tpavg4n = round(tpval)/loop
+        print tpavg4n
+        
         #main.Mininet2.handle.expect("\$", timeout=900)
         #main.Mininet2.handle.sendline("sudo mn -c")
         #main.Mininet2.handle.expect("\$")
         time.sleep(5)
         main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
         
 
-    def CASE7(self,main):
+    def CASE42(self,main):
         
         ip1 = main.params['CTRL']['ip1']
         ip2 = main.params['CTRL']['ip2']
@@ -547,13 +629,15 @@
         rate2 = main.params['RATE2']
         run_dur = main.params['RUN_DUR']
         loop = int(main.params['loop'])
+        sleep_init = int(main.params['sleep_init'])
         sleep_t = int(main.params['sleep_t'])
-        switches_num = main.params['sitches_num']
+        switches_num = main.params['switches_num']
         port = main.params['port']
         main.case("Starting SB load on 4 nodes from mininet with " + rate2 +"  added/removed/s for " + run_dur)
-        main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " " + switches_num + " " + port +  " " + rate2 + " " + run_dur +  "  \"11\"")
-        main.Mininet2.handle.expect("starting to generate south bound load ....", timeout=900 )
-        
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " " + switches_num + " " + port +  " " + rate2 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
+        time.sleep(sleep_init)
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate2", 'w').close()
         url1 = "http://10.128.10.1:8080/wm/onos/metrics"
         url2 = "http://10.128.10.2:8080/wm/onos/metrics"
@@ -562,66 +646,44 @@
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale4nodesrate2", "a")
         #time.sleep(10)
         for i in range(int (loop)):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            json_str4 = main.ONOS4.get_json(url4)
-            if json_str1 != "" and json_str2 != "" and json_str3 != "" and json_str4 != "":
-
-                f.write("ONOS1 \n")
-                f.write(str(json_str1["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][4]['meter']['mean_rate']))
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,5):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                f.write('\n')
                 f.write('\n')
                 
-                f.write("ONOS2 \n")
-                f.write(str(json_str2["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                
-                f.write("ONOS3 \n")
-                f.write(str(json_str3["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-                
-                f.write("ONOS4 \n")
-                f.write(str(json_str4["meters"][4]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][4]['meter']['mean_rate']))
-                f.write('\n')
-
-                f.write('\n')
-                
+                f.write("--------------------------------------------------------------------------------- \n") 
                 time.sleep(sleep_t)
-        f.close()
+        f.close() 
+        time.sleep(180)
 
-    def CASE8(self,main):
+    def CASE43(self,main):
         
         main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
         ip1 = main.params['CTRL']['ip1']
@@ -631,6 +693,15 @@
 
         import time
         import json
+        int_num = main.params['int_num']
+        addrate = main.params['addrate']
+        NBdur = main.params['NBdur']
+        NBsleep = int(main.params['NBsleep'])
+        NBsleep_init = int(main.params['NBsleep_init'])
+        NBloop = int(main.params['NBloop'])
+        nbtpval = 0.0
+        global nbtpavg4n
+        nbtpavg4n = 0.0
 
         main.Mininet4.handle.expect("\$")
         #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
@@ -642,14 +713,15 @@
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.1:6633")
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.2:6633")
         main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.4:6633")
-
+        
         main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
         main.ONOS3.handle.expect("\$")
 
-        main.ONOS3.handle.sendline("./multiLoadgen_NB.py -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080  \" -i 4 -g 100 -a 1 -d 1 -p 0")
-        main.ONOS3.handle.expect("intent group is : 0", timeout=900)
+        main.ONOS3.handle.sendline("./loadgen_NB.py -n 4 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080  \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+        main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
 
         
+        time.sleep(NBsleep_init)
         import json
         
         open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale4nodesrate1", 'w').close()
@@ -659,113 +731,1048 @@
         url4 = "http://10.128.10.4:8080/wm/onos/metrics"
         f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale4nodesrate1", "a")
         #time.sleep(10)
-        for i in range(8):
-            json_str1 = main.ONOS1.get_json(url1)
-            json_str2 = main.ONOS2.get_json(url2)
-            json_str3 = main.ONOS3.get_json(url3)
-            json_str4 = main.ONOS4.get_json(url4)
-
-            if json_str1 != "" and json_str2 != "" and json_str3 != "":
-                f.write("ONOS1......IncomingRate \n ")
-                f.write(str(json_str1["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2......IncomingRate \n")
-                f.write(str(json_str2["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3......IncomingRate \n")
-                f.write(str(json_str3["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS4......IncomingRate \n")
-                f.write(str(json_str4["meters"][0]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][0]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][0]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][0]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][0]['meter']['mean_rate']))
-                f.write('\n')
-                f.write('\n')
-
-                f.write("--------------------------------------------------------------------------------- \n") 
+        for i in range(NBloop):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "":
+                for j in range(1,5):
+                    f.write("*****************ONOS" + str(j) + " INCOMING RATE****************************" "\n")
+                    f.write(str(json_str[j]["meters"][0]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['mean_rate']))
+                    f.write('\n')
                 
-                f.write("ONOS1......ProcessingRate \n ")
-                f.write(str(json_str1["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str1["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS2......ProcessingRate \n")
-                f.write(str(json_str2["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str2["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
-                f.write("ONOS3......ProcessingRate \n")
-                f.write(str(json_str3["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str3["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
+                    f.write('\n')
 
-                f.write("ONOS4......ProcessingRate \n")
-                f.write(str(json_str4["meters"][1]['meter']['count']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][1]['meter']['m1_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][1]['meter']['m5_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][1]['meter']['m15_rate']))
-                f.write('\t')
-                f.write(str(json_str4["meters"][1]['meter']['mean_rate']))
-                f.write('\n')
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                
+                    f.write("***************** ONOS" + str(j) + " PROCESSING RATE************************" + " \n ")
+                    f.write(str(json_str[j]["meters"][1]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['mean_rate']))
+                    f.write('\n')
+                    f.write('\n')
+                    f.write('\n')
+                    if j == 3:
+                        nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate']) 
 
-                f.write('\n')
-
-                f.write("--------------------------------------------------------------------------------- \n") 
-       
-                time.sleep(10)
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                    f.write("--------------------------------------------------------------------------------- \n \n") 
+                    time.sleep(NBsleep)
         f.close()
+        print("\n")
+        nbtpavg4n = round(nbtpval)/NBloop
+        print nbtpavg4n
+        
 
         main.ONOS3.handle.expect("\$", timeout=900)
+        time.sleep(180)
+    
+    def CASE51(self,main):
+        main.case("Starting SB test for 5 nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        rate1 = main.params['RATE1']
+        run_dur = main.params['RUN_DUR']
+        loop = int( main.params['loop'])
+        switches_num = main.params['switches_num']
+        port = main.params['port']
+        print loop
+        sleep_init = int(main.params['sleep_init'])
+        sleep_t =int( main.params['sleep_t'])
+        main.case("Starting SB load on 5 nodes from mininet with " + rate1 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900)
+        import time
+        import json
+        tpval = 0.0
+        global tpavg5n 
+        tpavg5n = 0.0
+        time.sleep(sleep_init)
+
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,6):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                    if j == 3:
+                        tpval += float(json_str[j]["meters"][4]['meter']['m1_rate']) 
+                        #print tpval
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        #print tpval
+        print("\n")
+        tpavg5n = round(tpval)/loop
+        print tpavg5n
+        
+        #main.Mininet2.handle.expect("\$", timeout=900)
+        #main.Mininet2.handle.sendline("sudo mn -c")
+        #main.Mininet2.handle.expect("\$")
+        time.sleep(5)
+        main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
+        
+
+    def CASE52(self,main):
+        
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        
+        import time
+        import json
+        rate2 = main.params['RATE2']
+        run_dur = main.params['RUN_DUR']
+        loop = int(main.params['loop'])
+        sleep_t = int(main.params['sleep_t'])
+        sleep_init = int(main.params['sleep_init'])
+        switches_num = main.params['switches_num']
+        port = main.params['port']
+        main.case("Starting SB load on 4 nodes from mininet with " + rate2 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " " + switches_num + " " + port +  " " + rate2 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
+        time.sleep(sleep_init)
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate2", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale5nodesrate2", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[4] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,6):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        time.sleep(180)
+
+    def CASE53(self,main):
+        
+        main.case("Starting NB Throughput test after scaling up to 5 onos nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+
+        import time
+        import json
+        int_num = main.params['int_num']
+        addrate = main.params['addrate']
+        NBdur = main.params['NBdur']
+        NBsleep = int(main.params['NBsleep'])
+        NBsleep_init = int(main.params['NBsleep_init'])
+        NBloop = int(main.params['NBloop'])
+        nbtpval = 0.0
+        global nbtpavg5n
+        nbtpavg5n = 0.0
+
+        main.Mininet4.handle.expect("\$")
+        #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
+        #main.Mininet2.handle.expect("mininet>" , timeout=400)
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.3:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.5:6633")
+        
+        main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
+        main.ONOS3.handle.expect("\$")
+
+        main.ONOS3.handle.sendline("./loadgen_NB.py -n 5 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.5:8080  \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+        main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
+
+        
+        time.sleep(NBsleep_init)
+        import json
+        
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale5nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale5nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(NBloop):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "":
+                for j in range(1,6):
+                    f.write("*****************ONOS" + str(j) + " INCOMING RATE****************************" "\n")
+                    f.write(str(json_str[j]["meters"][0]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                    f.write('\n')
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                
+                    f.write("***************** ONOS" + str(j) + " PROCESSING RATE************************" + " \n ")
+                    f.write(str(json_str[j]["meters"][1]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['mean_rate']))
+                    f.write('\n')
+                    f.write('\n')
+                    f.write('\n')
+                    if j == 3:
+                        nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate']) 
+
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                    f.write("--------------------------------------------------------------------------------- \n \n") 
+                    time.sleep(NBsleep)
+        f.close()
+        print("\n")
+        nbtpavg5n = round(nbtpval)/NBloop
+        print nbtpavg5n
+        
+
+        main.ONOS3.handle.expect("\$", timeout=900)
+        time.sleep(180)
+    
+    def CASE61(self,main):
+        main.case("Starting SB test for 5 nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        ip6 = main.params['CTRL']['ip6']
+        rate1 = main.params['RATE1']
+        run_dur = main.params['RUN_DUR']
+        loop = int( main.params['loop'])
+        switches_num = main.params['switches_num']
+        port = main.params['port']
+        print loop
+        sleep_t =int( main.params['sleep_t'])
+        sleep_init = int(main.params['sleep_init'])
+        main.case("Starting SB load on 6 nodes from mininet with " + rate1 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 +  "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900)
+        
+        import time
+        import json
+        tpval = 0.0
+        global tpavg6n
+        tpavg6n = 0.0
+        time.sleep(sleep_init)
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,7):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                    if j == 3:
+                        tpval += float(json_str[j]["meters"][4]['meter']['m1_rate']) 
+                        #print tpval
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        #print tpval
+        print("\n")
+        tpavg6n = round(tpval)/loop
+        print tpavg6n
+        
+        #main.Mininet2.handle.expect("\$", timeout=900)
+        #main.Mininet2.handle.sendline("sudo mn -c")
+        #main.Mininet2.handle.expect("\$")
+        time.sleep(5)
+        main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
+        
+
+    def CASE62(self,main):
+        
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        ip6 = main.params['CTRL']['ip6']
+        
+        import time
+        import json
+        rate2 = main.params['RATE2']
+        run_dur = main.params['RUN_DUR']
+        loop = int(main.params['loop'])
+        sleep_t = int(main.params['sleep_t'])
+        switches_num = main.params['switches_num']
+        sleep_init = int(main.params['sleep_init'])
+        port = main.params['port']
+        main.case("Starting SB load on 4 nodes from mininet with " + rate2 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " " + switches_num + " " + port +  " " + rate2 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
+        time.sleep(sleep_init)
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,7):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        time.sleep(180)
+
+    def CASE63(self,main):
+        
+        main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+
+        import time
+        import json
+        int_num = main.params['int_num']
+        addrate = main.params['addrate']
+        NBdur = main.params['NBdur']
+        NBsleep = int(main.params['NBsleep'])
+        NBsleep_init = int(main.params['NBsleep_init'])
+        NBloop = int(main.params['NBloop'])
+        nbtpval = 0.0
+        global nbtpavg6n
+        nbtpavg6n = 0.0
+
+        main.Mininet4.handle.expect("\$")
+        #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
+        #main.Mininet2.handle.expect("mininet>" , timeout=400)
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.6:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.6:6633")
+        
+        main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
+        main.ONOS3.handle.expect("\$")
+
+        main.ONOS3.handle.sendline("./loadgen_NB.py -n 6 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.5:8080 10.128.10.6:8080 \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+        main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
+
+        
+        time.sleep(NBsleep_init)
+        import json
+        
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale6nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale6nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(NBloop):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "":
+                for j in range(1,7):
+                    f.write("*****************ONOS" + str(j) + " INCOMING RATE****************************" "\n")
+                    f.write(str(json_str[j]["meters"][0]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                    f.write('\n')
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                
+                    f.write("***************** ONOS" + str(j) + " PROCESSING RATE************************" + " \n ")
+                    f.write(str(json_str[j]["meters"][1]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['mean_rate']))
+                    f.write('\n')
+                    f.write('\n')
+                    f.write('\n')
+                    if j == 3:
+                        nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate']) 
+
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                    f.write("--------------------------------------------------------------------------------- \n \n") 
+                    time.sleep(NBsleep)
+        f.close()
+        print("\n")
+        nbtpavg6n = round(nbtpval)/NBloop
+        print nbtpavg6n
+        
+        
+
+        main.ONOS3.handle.expect("\$", timeout=900)
+        time.sleep(180)
+    
+    def CASE71(self,main):
+        main.case("Starting SB test for 7 nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        ip6 = main.params['CTRL']['ip6']
+        ip7 = main.params['CTRL']['ip7']
+        rate1 = main.params['RATE1']
+        run_dur = main.params['RUN_DUR']
+        loop = int( main.params['loop'])
+        switches_num = main.params['switches_num']
+        port = main.params['port']
+        print loop
+        sleep_t =int( main.params['sleep_t'])
+        sleep_init = int(main.params['sleep_init'])
+        main.case("Starting SB load on 6 nodes from mininet with " + rate1 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + "\"" + " " + switches_num + " " + port + " " + rate1 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 +  " " + ip6 + " " + ip7 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate1 + " -d " + rate1 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900)
+        import time
+        import json
+        tpval = 0.0
+        global tpavg7n
+        tpavg7n = 0.0
+        time.sleep(sleep_init)
+        
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+        url7 = "http://10.128.10.7:8080/wm/onos/metrics"
+
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            j7 = main.ONOS2.get_json(url7)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            json_str.append(j7)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "" and json_str[7] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,8):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                    if j == 3:
+                        tpval += float(json_str[j]["meters"][4]['meter']['m1_rate']) 
+                        #print tpval
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        #print tpval
+        print("\n")
+        tpavg7n = round(tpval)/loop
+        print tpavg7n
+        
+        #main.Mininet2.handle.expect("\$", timeout=900)
+        #main.Mininet2.handle.sendline("sudo mn -c")
+        #main.Mininet2.handle.expect("\$")
+        time.sleep(5)
+        main.Mininet2.handle.expect("\$", timeout=900)
+        time.sleep(180)
+        
+
+    def CASE72(self,main):
+        
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+        ip5 = main.params['CTRL']['ip5']
+        ip6 = main.params['CTRL']['ip6']
+        ip7 = main.params['CTRL']['ip7']
+        
+        import time
+        import json
+        rate2 = main.params['RATE2']
+        run_dur = main.params['RUN_DUR']
+        loop = int(main.params['loop'])
+        sleep_t = int(main.params['sleep_t'])
+        sleep_init = int(main.params['sleep_init'])
+        switches_num = main.params['switches_num']
+        port = main.params['port']
+        main.case("Starting SB load on 7 nodes from mininet with " + rate2 +"  added/removed/s for " + run_dur)
+        #main.Mininet2.handle.sendline("./loadgen_SB.sh startload \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 +  "\"" + " " + switches_num + " " + port +  " " + rate2 + " " + run_dur +  "  \"11\"")
+        main.Mininet2.handle.sendline("sudo ./loadgen_SB.py -u \"" + ip1 + " " + ip2 + " " + ip3 + " " + ip4 + " " + ip5 + " " + ip6 + " " + ip7 + "\"" + " -s " + switches_num + " -p " + port + " -a " + rate2 + " -d " + rate2 + " -l " + run_dur)
+        main.Mininet2.handle.expect("Starting SB load....", timeout=900 )
+        
+        time.sleep(sleep_init)
+
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale7nodesrate2", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+        url7 = "http://10.128.10.7:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/scale6nodesrate2", "a")
+        #time.sleep(10)
+        for i in range(int (loop)):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            j7 = main.ONOS2.get_json(url7)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            json_str.append(j7)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "" and json_str[7] != "":
+                # write_str = str(json_str["meters"][4]["meter"][2])
+                #print str(json_str["meters"][4])
+                #f.write(str(json_str["meters"][4]))
+                #f.write('\n')
+                #time.sleep(3)
+                for j in range(1,8):
+                    f.write("ONOS" + str(j) + "\n")
+                    f.write(str(json_str[j]["meters"][4]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][4]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                f.write('\n')
+                f.write('\n')
+                
+                f.write("--------------------------------------------------------------------------------- \n") 
+                time.sleep(sleep_t)
+        f.close() 
+        time.sleep(180)
+
+    def CASE73(self,main):
+        
+        main.case("Starting NB Throughput test after scaling up to 4 onos nodes")
+        ip1 = main.params['CTRL']['ip1']
+        ip2 = main.params['CTRL']['ip2']
+        ip3 = main.params['CTRL']['ip3']
+        ip4 = main.params['CTRL']['ip4']
+
+        import time
+        import json
+        int_num = main.params['int_num']
+        addrate = main.params['addrate']
+        NBdur = main.params['NBdur']
+        NBsleep = int(main.params['NBsleep'])
+        NBsleep_init = int(main.params['NBsleep_init'])
+        NBloop = int(main.params['NBloop'])
+        nbtpval = 0.0
+        global nbtpavg7n
+        nbtpavg7n = 0.0
+
+        main.Mininet4.handle.expect("\$")
+        #main.Mininet2.handle.sendline("sudo mn --custom topo-intentTPtest.py --topo mytopo --mac --arp")
+        #main.Mininet2.handle.expect("mininet>" , timeout=400)
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s1 tcp:10.128.10.1:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s2 tcp:10.128.10.2:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s3 tcp:10.128.10.3:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s4 tcp:10.128.10.4:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s5 tcp:10.128.10.5:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s6 tcp:10.128.10.6:6633")
+        main.Mininet4.handle.sendline("sudo ovs-vsctl set-controller s7 tcp:10.128.10.7:6633")
+        
+        main.ONOS3.handle.sendline("cd ~admin/suibin-dev")
+        main.ONOS3.handle.expect("\$")
+
+        main.ONOS3.handle.sendline("./loadgen_NB.py -n 7 -u \"10.128.10.1:8080 10.128.10.2:8080 10.128.10.3:8080 10.128.10.4:8080 10.128.10.6:8080 10.128.10.5:8080 10.128.10.7:8080  \" -i " + int_num + " -a " + addrate + " -l " + NBdur + " -p 20")
+        main.ONOS3.handle.expect("Pause between add and delete:", timeout=900)
+
+        
+        time.sleep(NBsleep_init)
+        import json
+        
+        open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale7nodesrate1", 'w').close()
+        url1 = "http://10.128.10.1:8080/wm/onos/metrics"
+        url2 = "http://10.128.10.2:8080/wm/onos/metrics"
+        url3 = "http://10.128.10.3:8080/wm/onos/metrics"
+        url4 = "http://10.128.10.4:8080/wm/onos/metrics"
+        url5 = "http://10.128.10.5:8080/wm/onos/metrics"
+        url6 = "http://10.128.10.6:8080/wm/onos/metrics"
+        url7 = "http://10.128.10.7:8080/wm/onos/metrics"
+        f = open("/home/admin/TestON/tests/scaleONOS7nodes/logs/NBscale7nodesrate1", "a")
+        #time.sleep(10)
+        for i in range(NBloop):
+            j1 = main.ONOS2.get_json(url1)
+            j2 = main.ONOS2.get_json(url2)
+            j3 = main.ONOS2.get_json(url3)
+            j4 = main.ONOS2.get_json(url4)
+            j5 = main.ONOS2.get_json(url5)
+            j6 = main.ONOS2.get_json(url6)
+            j7 = main.ONOS2.get_json(url7)
+            json_str = []
+            json_str.append(0)
+            json_str.append(j1)
+            json_str.append(j2)
+            json_str.append(j3)
+            json_str.append(j4)
+            json_str.append(j5)
+            json_str.append(j6)
+            json_str.append(j7)
+            if json_str[1] != "" and json_str[2] != "" and json_str[3] != "" and json_str[4] != "" and json_str[5] != "" and json_str[6] != "" and json_str[6] != "":
+                for j in range(1,8):
+                    f.write("*****************ONOS" + str(j) + " INCOMING RATE****************************" "\n")
+                    f.write(str(json_str[j]["meters"][0]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][0]['meter']['mean_rate']))
+                    f.write('\n')
+                
+                    f.write('\n')
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                
+                    f.write("***************** ONOS" + str(j) + " PROCESSING RATE************************" + " \n ")
+                    f.write(str(json_str[j]["meters"][1]['meter']['count']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m1_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m5_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['m15_rate']))
+                    f.write('\t')
+                    f.write(str(json_str[j]["meters"][1]['meter']['mean_rate']))
+                    f.write('\n')
+                    f.write('\n')
+                    f.write('\n')
+                    if j == 3:
+                        nbtpval += float(json_str[j]["meters"][1]['meter']['m1_rate']) 
+
+
+                    f.write("--------------------------------------------------------------------------------- \n") 
+                    f.write("--------------------------------------------------------------------------------- \n \n") 
+                    time.sleep(NBsleep)
+        f.close()
+        print("\n")
+        nbtpavg7n = round(nbtpval)/NBloop
+        print nbtpavg7n
+        
+
+        main.ONOS3.handle.expect("\$", timeout=900)
+        time.sleep(180)
+    
+    def CASE8(self,main):
+        import time
+        main.case("Scaling ONOS down to 6 ONOS instances")
+        main.ONOS7.handle.sendline("./onos.sh core stop")
+        time.sleep(8)
+        pdata = main.ONOS7.isup()
+        utilities.assert_equals(expect=main.FALSE,actual=pdata,onpass="ONOS7 stopped... ",onfail="ONOS scale down failed...")
+        time.sleep(3)
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup() and main.ONOS6.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+    
+    def CASE9(self,main):
+
+        main.case("Scaling ONOS down to 5 ONOS instances")
+        main.ONOS6.handle.sendline("./onos.sh core stop")
+        time.sleep(8)
+        pdata = main.ONOS6.isup() and main.ONOS7.isup()
+        utilities.assert_equals(expect=main.FALSE,actual=pdata,onpass="ONOS7 stopped... ",onfail="ONOS scale down failed...")
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup() and main.ONOS5.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+
+    def CASE10(self,main):
+
+        main.case("Scaling ONOS down to 4 ONOS instances")
+        
+        main.ONOS5.handle.sendline("./onos.sh core stop ")
+        time.sleep(5)
+        pdata = main.ONOS5.isup() and main.ONOS6.isup() and main.ONOS7.isup()
+        utilities.assert_equals(expect=main.FALSE,actual=pdata,onpass="ONOS7 stopped... ",onfail="ONOS scale down failed...")
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup() and main.ONOS4.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+
+    def CASE11(self,main):
+
+        main.case("Scaling ONOS down to 3 ONOS instances")
+        main.ONOS4.handle.sendline("./onos.sh core stop ")
+        time.sleep(5)
+        pdata = main.ONOS4.isup() and main.ONOS5.isup() and  main.ONOS6.isup() and main.ONOS7.isup()
+        utilities.assert_equals(expect=main.FALSE,actual=pdata,onpass="ONOS7 stopped... ",onfail="ONOS scale down failed...")
+        data = main.ONOS1.isup() and main.ONOS2.isup() and main.ONOS3.isup()
+        for i in range(3):
+            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() and main.ONOS2.isup() and main.ONOS3.isup()
+            else:
+                break
+        utilities.assert_equals(expect=main.TRUE,actual=data,onpass="ONOS is up and running!",onfail="ONOS didn't start...")
+
+    def CASE100(self,main):
+        import os
+        import time
+        global timestr
+        timestr = time.strftime("%Y%m%d-%H%M%S")
+        main.case("Scale-up tests complete...now making final changes")
+        main.log.info("moving logs....")
+        os.system("sudo mkdir ~admin/TestON/tests/scaleONOS7nodes/logs/ONOSscale_up" + timestr + "")
+        os.system("sudo mkdir ~admin/TestON/tests/scaleONOS7nodes/logs/NBONOSscale_up" + timestr + "")
+        time.sleep(2)
+        os.system("sudo  cp ~admin/TestON/tests/scaleONOS7nodes/logs/scale* ~admin/TestON/tests/scaleONOS7nodes/logs/ONOSscale_up" + timestr + "")
+        os.system("sudo  cp ~admin/TestON/tests/scaleONOS7nodes/logs/NBscale* ~admin/TestON/tests/scaleONOS7nodes/logs/NBONOSscale_up" + timestr + "")
+        time.sleep(2)
+        os.system("sudo rm ~admin/TestON/tests/scaleONOS7nodes/logs/*")
+        time.sleep(180)
+                        
+    def CASE101(self,main):
+        
+        import os
+        import time
+        main.case("Scale-down tests complete...now making final changes")
+        global timestr
+        main.case("Scale-down tests complete...now making final changes")
+        main.log.info("moving logs....")
+        os.system("sudo mkdir ~admin/TestON/tests/scaleONOS7nodes/logs/ONOSscale_dwn" + timestr + "")
+        os.system("sudo mkdir ~admin/TestON/tests/scaleONOS7nodes/logs/NBONOSscale_dwn" + timestr + "")
+        time.sleep(2)
+        os.system("sudo  cp ~admin/TestON/tests/scaleONOS7nodes/logs/scale* ~admin/TestON/tests/scaleONOS7nodes/logs/ONOSscale_dwn" + timestr + "")
+        os.system("sudo  cp ~admin/TestON/tests/scaleONOS7nodes/logs/NBscale* ~admin/TestON/tests/scaleONOS7nodes/logs/NBONOSscale_dwn" + timestr + "")
+        time.sleep(2)
+        os.system("sudo rm ~admin/TestON/tests/scaleONOS7nodes/logs/*")
+        time.sleep(2)
+
+    def CASE103(self,main):
+        import os
+        import time
+        main.case("Posting the results to http://10.128.5.54/scale.html ....")
+        db_script = main.params['db_script']
+        os.system(db_script + " -n='100SwitchScaleUp" + "' -rate3='" + str(tpavg3n) + "' -rate4='" + str(tpavg4n) + "' -rate5='" + str(tpavg5n) + "' -rate6='" + str(tpavg6n) + "' -rate7='" + str(tpavg7n) + "' -table='onos_scale'")
+
+    def CASE104(self,main):
+        import os
+        import time
+        main.case("Posting the results to http://10.128.5.54/scale.html ....")
+        db_script = main.params['db_script']
+        os.system(db_script + " -n='100SwitchScaleDown" + "' -rate3='" + str(tpavg3n) + "' -rate4='" + str(tpavg4n) + "' -rate5='" + str(tpavg5n) + "' -rate6='" + str(tpavg6n) + "' -rate7='" + str(tpavg7n) + "' -table='onos_scale'")
+
+
+    def CASE105(self,main):
+        import os
+        import time
+        main.case("Posting the results to http://10.128.5.54/scale.html ....")
+        db_script = main.params['db_script']
+        os.system(db_script + " -n='1000IntentsScaleUp" + "' -rate3='" + str(nbtpavg3n) + "' -rate4='" + str(nbtpavg4n) + "' -rate5='" + str(nbtpavg5n) + "' -rate6='" + str(nbtpavg6n) + "' -rate7='" + str(nbtpavg7n) + "' -table='onos_scale'")
+
+    def CASE106(self,main):
+        import os
+        import time
+        main.case("Posting the results to http://10.128.5.54/scale.html ....")
+        db_script = main.params['db_script']
+        os.system(db_script + " -n='1000IntentsScaleDown" + "' -rate3='" + str(nbtpavg3n) + "' -rate4='" + str(nbtpavg4n) + "' -rate5='" + str(nbtpavg5n) + "' -rate6='" + str(nbtpavg6n) + "' -rate7='" + str(nbtpavg7n) + "' -table='onos_scale'")
+
+
 
diff --git a/TestON/tests/scaleONOS7nodes/scaleResults b/TestON/tests/scaleONOS7nodes/scaleResults
deleted file mode 100644
index 2488306..0000000
--- a/TestON/tests/scaleONOS7nodes/scaleResults
+++ /dev/null
@@ -1,51 +0,0 @@
-[2014-07-25 15:15:35.933098] [scaleONOS7nodes] [CASE]  Starting SB load from mininet with 20sw added/removed 10/s duration: 360s
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4, u'mean_rate': 0.059200312795650786, u'm5_rate': 0.0, u'm15_rate': 0.0, u'units': u'events/second', u'm1_rate': 0.0}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 189, u'mean_rate': 2.4356254535500663, u'm5_rate': 0.41843186533973237, u'm15_rate': 1.9369051806194815, u'units': u'events/second', u'm1_rate': 0.14129996658762756}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 305, u'mean_rate': 3.4808906901728482, u'm5_rate': 0.9457303370098417, u'm15_rate': 4.174524246234802, u'units': u'events/second', u'm1_rate': 0.3220664415995731}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 470, u'mean_rate': 4.813391854440621, u'm5_rate': 1.3653129541121973, u'm15_rate': 5.67074120039854, u'units': u'events/second', u'm1_rate': 0.47005007387755343}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 554, u'mean_rate': 5.145399853971431, u'm5_rate': 1.6878416231510096, u'm15_rate': 6.5221406321995365, u'units': u'events/second', u'm1_rate': 0.5886241207705653}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 670, u'mean_rate': 5.692871627444301, u'm5_rate': 1.9211151858691953, u'm15_rate': 6.874390831538807, u'units': u'events/second', u'm1_rate': 0.6793689049109783}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 782, u'mean_rate': 6.122985062753683, u'm5_rate': 2.298585202117126, u'm15_rate': 7.903041256773227, u'units': u'events/second', u'm1_rate': 0.8200558382406801}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 928, u'mean_rate': 6.737355933051502, u'm5_rate': 2.5440190839839243, u'm15_rate': 8.182751878849528, u'units': u'events/second', u'm1_rate': 0.9192254774790037}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1068, u'mean_rate': 7.2277027669966225, u'm5_rate': 3.0582120448420502, u'm15_rate': 9.742318376899973, u'units': u'events/second', u'm1_rate': 1.1102756658184045}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1178, u'mean_rate': 7.465643586983538, u'm5_rate': 3.3117994889825484, u'm15_rate': 9.89957751878761, u'units': u'events/second', u'm1_rate': 1.2173187929330158}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1272, u'mean_rate': 7.579869789467111, u'm5_rate': 3.491942657341365, u'm15_rate': 9.73588659125985, u'units': u'events/second', u'm1_rate': 1.3011290230067005}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1372, u'mean_rate': 7.714903896910294, u'm5_rate': 3.744533557606514, u'm15_rate': 9.958097598081375, u'units': u'events/second', u'm1_rate': 1.410495416418516}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1502, u'mean_rate': 7.995257880751603, u'm5_rate': 3.9832156189264327, u'm15_rate': 10.137227344552151, u'units': u'events/second', u'm1_rate': 1.5165477887836256}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1618, u'mean_rate': 8.17649661132665, u'm5_rate': 4.232923512725775, u'm15_rate': 10.361789679493679, u'units': u'events/second', u'm1_rate': 1.6279660102909048}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1796, u'mean_rate': 8.638436983286626, u'm5_rate': 4.625961247189527, u'm15_rate': 11.274683186266738, u'units': u'events/second', u'm1_rate': 1.7890611156116576}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 1898, u'mean_rate': 8.70908577788645, u'm5_rate': 4.940218041617326, u'm15_rate': 11.732722831544308, u'units': u'events/second', u'm1_rate': 1.9262401293788511}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2014, u'mean_rate': 8.834979322143473, u'm5_rate': 5.086044615238827, u'm15_rate': 11.36565719225259, u'units': u'events/second', u'm1_rate': 2.00877929586214}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2096, u'mean_rate': 8.80741944058602, u'm5_rate': 5.23446678354358, u'm15_rate': 11.104825178674638, u'units': u'events/second', u'm1_rate': 2.092708438681387}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2212, u'mean_rate': 8.919169787587151, u'm5_rate': 5.42342880661179, u'm15_rate': 11.087454018930082, u'units': u'events/second', u'm1_rate': 2.1911244042226627}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2302, u'mean_rate': 8.921505549289213, u'm5_rate': 5.527733113130847, u'm15_rate': 10.709420105909206, u'units': u'events/second', u'm1_rate': 2.261958400590161}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2424, u'mean_rate': 9.043024690304492, u'm5_rate': 5.7730856298958795, u'm15_rate': 11.070016034135019, u'units': u'events/second', u'm1_rate': 2.3806525506070884}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2558, u'mean_rate': 9.198907190307924, u'm5_rate': 5.977993104861085, u'm15_rate': 11.230685676223507, u'units': u'events/second', u'm1_rate': 2.487028536364942}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2652, u'mean_rate': 9.205141639750474, u'm5_rate': 6.102910924894121, u'm15_rate': 11.002099225101214, u'units': u'events/second', u'm1_rate': 2.567791053544984}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2758, u'mean_rate': 9.251221641461491, u'm5_rate': 6.236628457203367, u'm15_rate': 10.864897965206772, u'units': u'events/second', u'm1_rate': 2.6520564660056722}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 2866, u'mean_rate': 9.300808867298466, u'm5_rate': 6.4461734461098965, u'm15_rate': 11.153003681875704, u'units': u'events/second', u'm1_rate': 2.7620817265483906}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3000, u'mean_rate': 9.428962629183438, u'm5_rate': 6.549131070407777, u'm15_rate': 10.904360602384472, u'units': u'events/second', u'm1_rate': 2.837588952255399}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3114, u'mean_rate': 9.488273497253953, u'm5_rate': 6.760779624902542, u'm15_rate': 11.22991528533686, u'units': u'events/second', u'm1_rate': 2.9498980541385973}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3232, u'mean_rate': 9.555939548927737, u'm5_rate': 6.971335992976415, u'm15_rate': 11.519573501287377, u'units': u'events/second', u'm1_rate': 3.0630963037697176}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3322, u'mean_rate': 9.539302128630185, u'm5_rate': 7.005059610420453, u'm15_rate': 10.979254648249038, u'units': u'events/second', u'm1_rate': 3.117647167706458}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3426, u'mean_rate': 9.562668411317048, u'm5_rate': 7.168703957115292, u'm15_rate': 11.13340055572298, u'units': u'events/second', u'm1_rate': 3.2157814313436766}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3556, u'mean_rate': 9.6553664830416, u'm5_rate': 7.30835119706793, u'm15_rate': 11.196064287702198, u'units': u'events/second', u'm1_rate': 3.3063182176268193}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3690, u'mean_rate': 9.753744409437841, u'm5_rate': 7.436043897518086, u'm15_rate': 11.19922564971827, u'units': u'events/second', u'm1_rate': 3.3935526056733525}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3862, u'mean_rate': 9.94485575877501, u'm5_rate': 7.716475942451841, u'm15_rate': 11.928560772404543, u'units': u'events/second', u'm1_rate': 3.5328121098263545}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 3962, u'mean_rate': 9.945657010947713, u'm5_rate': 7.921927978095857, u'm15_rate': 12.23377875835498, u'units': u'events/second', u'm1_rate': 3.6484090746318865}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4074, u'mean_rate': 9.975814947863958, u'm5_rate': 8.00901532078311, u'm15_rate': 11.966342332818853, u'units': u'events/second', u'm1_rate': 3.7251416456063717}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4156, u'mean_rate': 9.932800200694953, u'm5_rate': 8.054999692711906, u'm15_rate': 11.58131193842906, u'units': u'events/second', u'm1_rate': 3.7878895918323345}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4290, u'mean_rate': 10.013202869430945, u'm5_rate': 8.197664300462709, u'm15_rate': 11.712109833999651, u'units': u'events/second', u'm1_rate': 3.8830746138276506}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 9.97133516767342, u'm5_rate': 8.191184093898045, u'm15_rate': 11.142233135267437, u'units': u'events/second', u'm1_rate': 3.928565036650824}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 9.748514038149732, u'm5_rate': 8.052687964347193, u'm15_rate': 10.02019824138421, u'units': u'events/second', u'm1_rate': 3.9292315920501197}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 9.535437429356055, u'm5_rate': 7.788689451274274, u'm15_rate': 8.481914691112806, u'units': u'events/second', u'm1_rate': 3.885815112583944}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 9.331367778702917, u'm5_rate': 7.533345838926838, u'm15_rate': 7.179785778108208, u'units': u'events/second', u'm1_rate': 3.842878368314098}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 9.135919987284627, u'm5_rate': 7.286373385909162, u'm15_rate': 6.077557449798136, u'units': u'events/second', u'm1_rate': 3.80041605835342}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.948532183901525, u'm5_rate': 7.047497652974929, u'm15_rate': 5.144541313226928, u'units': u'events/second', u'm1_rate': 3.758422940387489}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.76863771104249, u'm5_rate': 6.8164531980665, u'm15_rate': 4.354760204591356, u'units': u'events/second', u'm1_rate': 3.7168938300274155}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.59583194470271, u'm5_rate': 6.592983281351978, u'm15_rate': 3.6862249294674947, u'units': u'events/second', u'm1_rate': 3.6758236001697906}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.429632452341373, u'm5_rate': 6.37683957993232, u'm15_rate': 3.120322036630427, u'units': u'events/second', u'm1_rate': 3.635207180363701}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.269862736358995, u'm5_rate': 6.167781911901452, u'm15_rate': 2.6412955797811177, u'units': u'events/second', u'm1_rate': 3.595039556184744}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 8.115976079788764, u'm5_rate': 5.965577969452773, u'm15_rate': 2.2358084383190753, u'units': u'events/second', u'm1_rate': 3.5553157686159524}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 7.967761632050002, u'm5_rate': 5.770003060735474, u'm15_rate': 1.892570983393321, u'units': u'events/second', u'm1_rate': 3.516030913435567}}
-{u'name': u'Topology.EventNotification.ListenerEventRate', u'meter': {u'count': 4372, u'mean_rate': 7.8248239429659785, u'm5_rate': 5.580839860173803, u'm15_rate': 1.6020267505007044, u'units': u'events/second', u'm1_rate': 3.477180140611569}}
