adding TestON
diff --git a/TestON/drivers/common/cli/emulator/remotemininetdriver.py b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
new file mode 100644
index 0000000..b55a371
--- /dev/null
+++ b/TestON/drivers/common/cli/emulator/remotemininetdriver.py
@@ -0,0 +1,312 @@
+#!/usr/bin/env python
+'''
+Created on 26-Oct-2012
+
+@author: Anil Kumar (anilkumar.s@paxterrasolutions.com)
+
+
+ TestON is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ TestON is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with TestON. If not, see <http://www.gnu.org/licenses/>.
+
+
+MininetCliDriver is the basic driver which will handle the Mininet functions
+'''
+
+import pexpect
+import struct
+import fcntl
+import os
+import signal
+import re
+import sys
+import core.teston
+sys.path.append("../")
+from drivers.common.cli.emulatordriver import Emulator
+from drivers.common.clidriver import CLI
+from time import time
+
+class RemoteMininetDriver(Emulator):
+ '''
+ MininetCliDriver is the basic driver which will handle the Mininet functions
+ '''
+ def __init__(self):
+ super(Emulator, self).__init__()
+ self.handle = self
+ self.wrapped = sys.modules[__name__]
+ self.flag = 0
+
+ def connect(self, **connectargs):
+ #,user_name, ip_address, pwd,options):
+ # Here the main is the TestON instance after creating all the log handles.
+ for key in connectargs:
+ vars(self)[key] = connectargs[key]
+
+ self.name = self.options['name']
+ self.handle = super(RemoteMininetDriver, self).connect(user_name = self.user_name, ip_address = self.ip_address,port = None, pwd = self.pwd)
+
+ self.ssh_handle = self.handle
+
+ # Copying the readme file to process the
+ if self.handle :
+ return main.TRUE
+
+ else :
+ main.log.error("Connection failed to the host "+self.user_name+"@"+self.ip_address)
+ main.log.error("Failed to connect to the Mininet")
+ return main.FALSE
+
+ def pingLong(self,**pingParams):
+ args = utilities.parse_args(["SRC","TARGET"],**pingParams)
+ command = "mininet/util/m " + args["SRC"] + " ping "+args ["TARGET"]+" -i .1 -D -W 1 > /tmp/ping." + args["SRC"] + " &"
+ main.log.info( command )
+ self.execute(cmd=command,prompt="(.*)",timeout=10)
+ return main.TRUE
+
+ def pingstatus(self,**pingParams):
+ #self.handle.sendline("pgrep ping")
+ #self.handle.expect("pgrep")
+ #self.handle.expect("\$")
+ #result = self.handle.before + self.handle.after
+ #if re.search('\d\d+', result ):
+ # return main.TRUE
+ #else:
+ # return main.FALSE
+
+ 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
+ if re.search('Unreachable', result ):
+ main.log.info("Unreachable found in ping logs...")
+ return main.FALSE
+ elif re.search('64\sbytes', result):
+ main.log.info("Pings look good")
+ return main.TRUE
+ else:
+ main.log.info("No, or faulty ping data...")
+ return main.FALSE
+
+ def pingKill(self):
+ command = "sudo pkill ping"
+ main.log.info( command )
+ self.execute(cmd=command,prompt="(.*)",timeout=10)
+ #command = "sudo pgrep ping"
+ #result1 = self.execute(cmd="\r",prompt="\$",timout=10)
+ #result = self.execute(cmd=command,prompt=self.user_name,timout=10)
+ #if utilities.assert_matches(expect='[^\s]+',actual=result,onpass="match",onfail="no match"):
+ # main.log.info( "pings running as process" )
+ # main.log.info( result )
+ # return main.FALSE
+ main.log.info( "Removing old ping data" )
+ command = "rm /tmp/ping.*"
+ os.popen(command)
+ import time
+ time.sleep(2)
+ main.log.info( "Transferring ping files to TestStation" )
+ command = "scp /tmp/ping.* admin@10.128.7.7:/tmp/"
+ self.execute(cmd=command,prompt="100%",timeout=20)
+ return main.TRUE
+
+ def pingHost(self,**pingParams):
+
+ 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 )
+ 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
+ return main.TRUE
+ else :
+ main.log.error("PACKET LOST, HOST IS NOT REACHABLE")
+ main.last_result = main.FALSE
+ return main.FALSE
+
+
+ def checknum(self,num):
+ '''
+ Verifies the correct number of switches are running
+ '''
+ if self.handle :
+ self.handle.sendline("")
+ self.handle.expect("\$")
+ self.handle.sendline('ifconfig -a | grep "sw.. " | wc -l')
+ self.handle.expect("wc")
+ self.handle.expect("\$")
+ response = self.handle.before
+ self.handle.sendline('ps -ef | grep "bash -ms mininet:sw" | grep -v color | wc -l')
+ self.handle.expect("color")
+ self.handle.expect("\$")
+ response2 = self.handle.before
+
+ if re.search(num, response):
+ if re.search(num, response2):
+ return main.TRUE
+ else:
+ return main.FALSE
+ else:
+ return main.FALSE
+ else :
+ main.log.error("Connection failed to the host")
+
+ def ctrl_none(self):
+ self.execute(cmd="~/ONOS/scripts/test-ctrl-none.sh", prompt="\$",timeout=10)
+
+ def ctrl_one(self, ip):
+ self.execute(cmd="~/ONOS/scripts/test-ctrl-one.sh "+ip, prompt="\$",timeout=10)
+
+ def ctrl_local(self):
+ self.execute(cmd="~/ONOS/scripts/test-ctrl-local.sh ", prompt="\$",timeout=10)
+
+ # def verifySSH(self,**connectargs):
+ # response = self.execute(cmd="h1 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+ # response = self.execute(cmd="h4 /usr/sbin/sshd -D&",prompt="mininet>",timeout=10)
+ # for key in connectargs:
+ # vars(self)[key] = connectargs[key]
+ # response = self.execute(cmd="xterm h1 h4 ",prompt="mininet>",timeout=10)
+ # import time
+ # time.sleep(20)
+ # if self.flag == 0:
+ # self.flag = 1
+ # return main.FALSE
+ # else :
+ # return main.TRUE
+ #
+ # def getMacAddress(self,host):
+ # '''
+ # Verifies the host's ip configured or not.
+ # '''
+ # if self.handle :
+ # response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+ # pattern = "HWaddr\s(((\d|\w)+:)+(\d|\w))"
+ # mac_address_search = re.search(pattern, response)
+ # main.log.info("Mac-Address of Host "+host +" is "+mac_address_search.group(1))
+ # return mac_address_search.group(1)
+ # else :
+ # main.log.error("Connection failed to the host")
+ # def getIPAddress(self,host):
+ # '''
+ # Verifies the host's ip configured or not.
+ # '''
+ # if self.handle :
+ # response = self.execute(cmd=host+" ifconfig",prompt="mininet>",timeout=10)
+
+ # pattern = "inet\saddr:(\d+\.\d+\.\d+\.\d+)"
+ # ip_address_search = re.search(pattern, response)
+ # main.log.info("IP-Address of Host "+host +" is "+ip_address_search.group(1))
+ # return ip_address_search.group(1)
+ # else :
+ # main.log.error("Connection failed to the host")
+ #
+ # def dump(self):
+ # main.log.info("Dump node info")
+ # self.execute(cmd = 'dump',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def intfs(self):
+ # main.log.info("List interfaces")
+ # self.execute(cmd = 'intfs',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def net(self):
+ # main.log.info("List network connections")
+ # self.execute(cmd = 'net',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def iperf(self):
+ # main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+ # self.execute(cmd = 'iperf',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def iperfudp(self):
+ # main.log.info("Simple iperf TCP test between two (optionally specified) hosts")
+ # self.execute(cmd = 'iperfudp',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def nodes(self):
+ # main.log.info("List all nodes.")
+ # self.execute(cmd = 'nodes',prompt = 'mininet>',timeout = 10)
+ # return main.TRUE
+ #
+ # def pingpair(self):
+ # main.log.infoe("Ping between first two hosts")
+ # self.execute(cmd = 'pingpair',prompt = 'mininet>',timeout = 20)
+ #
+ # if utilities.assert_matches(expect='0% packet loss',actual=response,onpass="No Packet loss",onfail="Hosts not reachable"):
+ # main.log.info("Ping between two hosts SUCCESS")
+ # main.last_result = main.TRUE
+ # return main.TRUE
+ # else :
+ # main.log.error("PACKET LOST, HOSTS NOT REACHABLE")
+ # main.last_result = main.FALSE
+ # return main.FALSE
+ #
+ # def link(self,**linkargs):
+ # '''
+ # Bring link(s) between two nodes up or down
+ # '''
+ # main.log.info('Bring link(s) between two nodes up or down')
+ # args = utilities.parse_args(["END1","END2","OPTION"],**linkargs)
+ # end1 = args["END1"] if args["END1"] != None else ""
+ # end2 = args["END2"] if args["END2"] != None else ""
+ # option = args["OPTION"] if args["OPTION"] != None else ""
+ # command = "link "+str(end1) + " " + str(end2)+ " " + str(option)
+ # response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+ # return main.TRUE
+ #
+
+ # def dpctl(self,**dpctlargs):
+ # '''
+ # Run dpctl command on all switches.
+ # '''
+ # main.log.info('Run dpctl command on all switches')
+ # args = utilities.parse_args(["CMD","ARGS"],**dpctlargs)
+ # cmd = args["CMD"] if args["CMD"] != None else ""
+ # cmdargs = args["ARGS"] if args["ARGS"] != None else ""
+ # command = "dpctl "+cmd + " " + str(cmdargs)
+ # response = self.execute(cmd=command,prompt="mininet>",timeout=10)
+ # return main.TRUE
+ #
+ #
+ # def get_version(self):
+ # file_input = path+'/lib/Mininet/INSTALL'
+ # version = super(Mininet, self).get_version()
+ # pattern = 'Mininet\s\w\.\w\.\w\w*'
+ # for line in open(file_input,'r').readlines():
+ # result = re.match(pattern, line)
+ # if result:
+ # version = result.group(0)
+ #
+ #
+ # return version
+
+ def disconnect(self):
+
+ response = ''
+ #print "Disconnecting Mininet"
+ if self.handle:
+ self.handle.sendline("exit")
+ self.handle.expect("exit")
+ self.handle.expect("(.*)")
+ response = self.handle.before
+
+ else :
+ main.log.error("Connection failed to the host")
+ response = main.FALSE
+ return response
+
+if __name__ != "__main__":
+ import sys
+ sys.modules[__name__] = RemoteMininetDriver()