import unittest import sh import re class Qwifi(unittest.TestCase): __sip = None __numbytestx = None __bind = None __OKBW = None __port = None #varlist: sip, bind, OKBW, port def __init__(self, testname, testfunc, varlist): super(Qwifi, self).__init__(testfunc) if "sip" in varlist: self.__sip = varlist["sip"] else: raise Exception('sip param inside Qwifi have been be defined') if "OKBW" in varlist: self.__OKBW = varlist["OKBW"] else: raise Exception('OKBW param inside Qwifi must be defined') if "port" in varlist: self.__port = varlist["port"] else: raise Exception('port param inside Qwifi must be defined') if "bind" in varlist: self.__bind = varlist["bind"] else: self.__bind = None self.__numbytestx = "10M" self._testMethodDoc = testname def execute(self): # check if the board is connected to the router by wifi p = sh.iw("wlan0", "link") if p.exit_code == 0: # get the first line of the output stream out1 = p.stdout.decode('ascii').splitlines()[0] if out1 != "Not connected.": #check if the board has ip in the wlan0 interface p = sh.ifconfig("wlan0") if p.exit_code == 0: result = re.search("inet addr:(?!127\.0{1,3}\.0{1,3}\.0{0,2}1$)((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)", p.stdout) if result: # execute iperf command against the server if self.__bind is None: p = sh.iperf("-c", self.__sip, "-x", "CMSV", "-n", self.__numbytestx, "-f", "m", "-p", self.__port) else: p = sh.iperf("-c", self.__sip, "-x", "CMSV", "-n", self.__numbytestx, "-f", "m", "-p", self.__port, "-B", self.__bind) # check if it was executed succesfully if p.exit_code == 0: if p.stdout == "": self.fail("failed: error executing iperf command") # analyze output string # split by lines lines = p.stdout.splitlines() # get first line dat = lines[1].decode('ascii') # search for the BW value a = re.search("\d+(\.\d)? Mbits/sec", dat) b = a.group().split() bwreal = b[0] # check if BW is in the expected range self.failUnless(float(bwreal) > float(self.__OKBW) * 0.9, "failed: speed is lower than spected. Speed(MB/s)" + str(bwreal)) else: self.fail("failed: could not complete iperf command") else: self.fail("failed: wlan0 interface doesn't have any ip address.") else: self.fail("failed: could not complete ifconfig command.") else: self.fail("failed: wifi module is not connected to the router.") else: self.fail("failed: couldn't execute iw command")