Changes to the Drivers
diff --git a/TestON/drivers/common/cli/emulator/mininetclidriver.py b/TestON/drivers/common/cli/emulator/mininetclidriver.py
index 8ea0ea3..1e7de39 100644
--- a/TestON/drivers/common/cli/emulator/mininetclidriver.py
+++ b/TestON/drivers/common/cli/emulator/mininetclidriver.py
@@ -773,6 +773,8 @@
             PYTHONPATH=/home/admin/TestON:/home/admin/sts
 
         '''
+        import sys
+        sys.path.append("~/sts")
         from sts.topology.teston_topology import TestONTopology # assumes that sts already in you PYTHONPATH
         #import sts.entities.base as base
         import json
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
index 7aaec91..1b63f87 100644
--- a/TestON/drivers/common/cli/emulator/remotemininetdriver.py
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -388,7 +388,46 @@
             main.cleanup()
             main.exit()
 
+    def del_switch(self,sw):
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl del-br "+sw)
+        self.handle.expect("\$")
+        return main.TRUE
 
+    def add_switch(self,sw):
+        self.handle.sendline("")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-br "+sw)
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth1")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth2")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth3")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth4")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth5")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth6")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth7")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth8")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth9")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth10")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth11")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth12")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth13")
+        self.handle.expect("\$")
+        self.handle.sendline("sudo ovs-vsctl add-port "+sw+" " + sw + "-eth14")
+        self.handle.expect("\$")
 
 
     def disconnect(self):
diff --git a/TestON/drivers/common/cli/onosclidriver.py b/TestON/drivers/common/cli/onosclidriver.py
index 1ced6af..d314410 100644
--- a/TestON/drivers/common/cli/onosclidriver.py
+++ b/TestON/drivers/common/cli/onosclidriver.py
@@ -68,6 +68,43 @@
             main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
             main.cleanup()
             main.exit()
+
+    def portKill(self, port):
+        try:
+            self.handle.sendline("")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            cmd = "sudo tcpkill -i eth0 port " + str(port) + " 2>/dev/null 1>/dev/null &"
+            self.handle.sendline(cmd)
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.name + ":     " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
+
+    def endPortKill(self,port):
+        try:
+            self.handle.sendline("")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            self.handle.sendline("sudo pkill tcpkill")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.name + ":     " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
         
     def start(self, env = ''):
         '''
@@ -425,6 +462,32 @@
             main.exit()
 
 
+    def kill(self):
+        import re
+        try: 
+            self.handle.sendline("ps -ef |grep 'ONOS/conf/logback' |awk 'NR==1 {print $2}' |xargs sudo kill -9")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            self.handle.sendline("ps -ef |grep 'ONOS/conf/logback' |wc -l")
+            self.handle.expect(["wc -l",pexpect.EOF,pexpect.TIMEOUT])
+            response = self.handle.after
+            if re.search("1",response):
+                return "ONOS Killed!"
+            else:
+                return "ERROR!!! ONOS MAY NOT HAVE BEEN KILLED PROPERLY!!!"
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.hane + ":    " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
+
+
+
     def disconnect(self):
         '''
         Called when Test is complete to disconnect the ONOS handle.
@@ -926,6 +989,26 @@
             main.cleanup()
             main.exit()
 
+    def num_switch(self,RestIP,RestPort="8080"):
+        url = "http://%s:%s/wm/onos/topology/switches" %(RestIP,RestPort)
+        parsedResult = self.get_json(url)
+        if parsedResult == "":
+            retcode = 1
+            return (retcode, "RestAPI has an issue")
+        url = "http://%s:%s/wm/onos/registry/switches/json" %(RestIP,RestPort)
+        registry = self.get_json(url)
+        if registry == "":
+            retcode = 1
+            return (retcode, "REST API has an Issue")
+        cnt = 0
+        active = 0
+        for s in parsedResult:
+            cnt +=1
+            if s['state']=="ACTIVE":
+                active+=1
+        return (cnt,active)
+
+
     def check_switch(self,RestIP,correct_nr_switch, RestPort ="8080" ):
         '''
         Used by check_status
@@ -975,6 +1058,17 @@
             main.cleanup()
             main.exit()
 
+    def num_link(self,RestIP,RestPort="8080"):
+        url = "http://%s:%s/wm/onos/topology/links" % (RestIP,RestPort)
+        parsedResult = self.get_json(url)
+        if parsedResult == "":
+            retcode = 1
+            return (retcode,"RestAPI has an issue")
+        intra = 0
+        for s in parsedResult:
+            intra+=1
+        return intra
+
     def check_link(self,RestIP, nr_links, RestPort = "8080"):
         '''
         Used by check_status
@@ -1141,6 +1235,100 @@
 #********************************************************           
 
 
+
+
+    def git_checkout(self, branch="onos13integration"):
+        '''
+        Assumes that "git pull" works without login
+        
+        This function will perform a git pull on the ONOS instance.
+        If used as git_pull("NODE") it will do git pull + NODE. This is
+        for the purpose of pulling from other nodes if necessary.
+
+        Otherwise, this function will perform a git pull in the 
+        ONOS repository. If it has any problems, it will return main.ERROR
+        If it successfully does a git_pull, it will return a 1.
+        If it has no updates, it will return a 0.
+
+        '''
+        try:
+            # main.log.info(self.name + ": Stopping ONOS")
+            #self.stop()
+            self.handle.sendline("cd " + self.home)
+            self.handle.expect("ONOS\$")
+            if branch != 'master':
+                #self.handle.sendline('git stash')
+                #self.handle.expect('ONOS\$')
+                #print "After issuing git stash cmnd: ", self.handle.before
+                cmd = "git checkout "+branch
+                print "checkout cmd = ", cmd
+                self.handle.sendline(cmd)
+                uptodate = 0
+                i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Already\son\s\'onos13integration\'','Switched\sto\sbranch\s\'onos13integration\'', pexpect.TIMEOUT],timeout=60)
+            else:
+                #self.handle.sendline('git stash apply')
+                #self.handle.expect('ONOS\$')
+                #print "After issuing git stash apply cmnd: ", self.handle.before
+                cmd = "git checkout "+branch
+                print "checkout cmd = ", cmd
+                self.handle.sendline(cmd)
+                uptodate = 0
+                switchedToMaster = 0
+                i=self.handle.expect(['fatal','Username\sfor\s(.*):\s','Already\son\s\'master\'','Switched\sto\sbranch\s\'master\'', pexpect.TIMEOUT],timeout=60)
+ 
+
+            if i==0:
+                main.log.error(self.name + ": Git checkout had some issue...")
+                return main.ERROR
+            elif i==1:
+                main.log.error(self.name + ": Git checkout Asking for username!!! BADD!")
+                return main.ERROR
+            elif i==2:
+                main.log.info(self.name + ": Git Checkout %s : Already on this branch" %branch)
+                self.handle.expect("ONOS\$")
+                print "after checkout cmd = ", self.handle.before
+                switchedToMaster = 1
+                return 1
+            elif i==3:
+                main.log.info(self.name + ": Git checkout %s - Switched to this branch" %branch)
+                self.handle.expect("ONOS\$")
+                print "after checkout cmd = ", self.handle.before
+                switchedToMaster = 1
+                return 1
+            elif i==4:
+                main.log.error(self.name + ": Git Checkout- TIMEOUT")
+                main.log.error(self.name + " Response was: " + str(self.handle.before))
+                return main.ERROR
+            else:
+                main.log.error(self.name + ": Git Checkout - Unexpected response, check for pull errors")
+                return main.ERROR
+
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.name + ":     " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
+#********************************************************     
+        self.handle.sendline("git branch")
+        self.handle.expect("ONOS\$")
+        print "git branch output = ", self.handle.before
+        print "*****************************************"
+        self.handle.sendline('cd\.\.') 
+        self.handle.expect("\$")
+
+
+
+
+
+
+
+
     def git_compile(self):
         '''
         Compiles ONOS
diff --git a/TestON/drivers/common/cli/ramcloudclidriver.py b/TestON/drivers/common/cli/ramcloudclidriver.py
index 0546edf..5b19508 100644
--- a/TestON/drivers/common/cli/ramcloudclidriver.py
+++ b/TestON/drivers/common/cli/ramcloudclidriver.py
@@ -66,6 +66,55 @@
             main.log.error(self.name+": Connection failed to the host "+self.user_name+"@"+self.ip_address) 
             main.log.error(self.name+": Failed to connect to the Onos system")
             return main.FALSE
+
+    def kill_serv(self):
+        import re
+        try: 
+            self.handle.sendline("ps -ef |grep 'master/server' |awk 'NR==1 {print $2}' |xargs sudo kill -9")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            self.handle.sendline("ps -ef |grep 'master/server' |wc -l")
+            self.handle.expect(["wc -l",pexpect.EOF,pexpect.TIMEOUT])
+            response = self.handle.after
+            if re.search("1",response):
+                return "RAMCloud Server Killed!"
+            else:
+                return "ERROR!!! RAMCLOUd SERVER MAY NOT HAVE BEEN KILLED PROPERLY!!!"
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.hane + ":    " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit() 
+   
+    def kill_coord(self):
+        import re
+        try: 
+            self.handle.sendline("ps -ef |grep 'master/coordinator' |awk 'NR==1 {print $2}' |xargs sudo kill -9")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            self.handle.sendline("ps -ef |grep 'master/coordinator' |wc -l")
+            self.handle.expect(["wc -l",pexpect.EOF,pexpect.TIMEOUT])
+            response = self.handle.after
+            if re.search("1",response):
+                return "RAMCloud Coordinator Killed!"
+            else:
+                return "ERROR!!! RAMCLOUD COORDINATOR MAY NOT HAVE BEEN KILLED PROPERLY!!!"
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.hane + ":    " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
+
    
  
     def start_serv(self):
diff --git a/TestON/drivers/common/cli/zookeeperclidriver.py b/TestON/drivers/common/cli/zookeeperclidriver.py
index 2a7c218..9a35366 100644
--- a/TestON/drivers/common/cli/zookeeperclidriver.py
+++ b/TestON/drivers/common/cli/zookeeperclidriver.py
@@ -44,6 +44,32 @@
         self.handle = self
         self.wrapped = sys.modules[__name__]
 
+    def kill(self):
+        import re
+        try: 
+            self.handle.sendline("ps -ef |grep 'zookeeper.log.dir' |awk 'NR==1 {print $2}' |xargs sudo kill -9")
+            self.handle.expect(["\$",pexpect.EOF,pexpect.TIMEOUT])
+            self.handle.sendline("ps -ef |grep 'zookeeper.log.dir' |wc -l")
+            self.handle.expect(["wc -l",pexpect.EOF,pexpect.TIMEOUT])
+            response = self.handle.after
+            if re.search("1",response):
+                return "Zookeeper Killed!"
+            else:
+                return "ERROR!!! ZOOKEEPER MAY NOT HAVE BEEN KILLED PROPERLY!!!"
+        except pexpect.EOF:
+            main.log.error(self.name + ": EOF exception found")
+            main.log.error(self.hane + ":    " + self.handle.before)
+            main.cleanup()
+            main.exit()
+        except:
+            main.log.info(self.name + ":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.log.error( traceback.print_exc() )
+            main.log.info(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::")
+            main.cleanup()
+            main.exit()
+
+
+
     def connect(self, **connectargs):
         # Here the main is the TestON instance after creating all the log handles.
         self.port = None
@@ -96,13 +122,12 @@
         '''
         This Function will return the Status of the Zookeeper 
         '''
-        time.sleep(5)
         self.execute(cmd="\n",prompt="\$",timeout=10)
         self.handle.sendline("cd "+self.home)
         response = self.execute(cmd="./onos.sh zk status ",prompt="JMX",timeout=10)
-       
+        response=self.handle.after
         self.execute(cmd="\n",prompt="\$",timeout=10)
-        return response
+        return self.handle.before + self.handle.after
         
     def stop(self):
         '''
@@ -144,6 +169,8 @@
     def findMaster(self, switchDPID, switchList):
         import json
         decoded = json.loads(switchList)
+        if switchList=="":
+            return "NO CONTROLLERS FOUND"
         for k in decoded.iteritems():
             k2 = json.dumps(k)
             if re.search(switchDPID,k2):