Chromium Code Reviews| Index: server/site_wifitest.py |
| diff --git a/server/site_wifitest.py b/server/site_wifitest.py |
| index 13672b1977526c6786aa545c6d9766c1d0923cf0..0fb080a89d0b9aa5bea8b68a2a07e374a5800a5c 100644 |
| --- a/server/site_wifitest.py |
| +++ b/server/site_wifitest.py |
| @@ -4,7 +4,7 @@ |
| import common, fnmatch, logging, os, re, string, threading, time |
| -from autotest_lib.server import autotest, subcommand |
| +from autotest_lib.server import autotest, hosts, subcommand |
| from autotest_lib.server import site_bsd_router |
| from autotest_lib.server import site_linux_router |
| @@ -63,46 +63,61 @@ class WiFiTest(object): |
| wpa_supplicant directly. |
| """ |
| - def __init__(self, name, steps, router, client, server): |
| + def __init__(self, name, steps, config): |
| self.name = name |
| self.steps = steps |
| - self.router = router['host'] |
| + |
| + router = config['router'] |
| + self.router = hosts.create_host(router['addr']) |
| + # NB: truncate SSID to 32 characters |
|
neb
2010/04/10 00:04:24
What does NB: stand for?
Sam Leffler
2010/04/12 15:52:55
Nota Bene
|
| + self.defssid = self.__get_defssid(router['addr'])[0:32] |
| + |
| + if 'type' not in router: |
| + # auto-detect router type |
| + if site_linux_router.isLinuxRouter(self.router): |
| + router['type'] = 'linux' |
| + if site_bsd_router.isBSDRouter(self.router): |
| + router['type'] = 'bsd' |
| + else: |
| + raise Exception('Unable to autodetect router type') |
| + if router['type'] == 'linux': |
| + self.wifi = site_linux_router.LinuxRouter(self.router, router, |
| + self.defssid) |
| + elif router['type'] == 'bsd': |
| + self.wifi = site_bsd_router.BSDRouter(self.router, router, |
| + self.defssid) |
| + else: |
| + raise Exception('Unsupported router') |
| + |
| # |
| # The client machine must be reachable from the control machine. |
| - # The address on the wifi network is retrieved after it each time |
| - # it associates to the router. |
| + # The address on the wifi network is retrieved each time it |
| + # associates to the router. |
| # |
| - self.client = client['host'] |
| + client = config['client'] |
| + self.client = hosts.create_host(client['addr']) |
| self.client_at = autotest.Autotest(self.client) |
| self.client_wifi_ip = None # client's IP address on wifi net |
| + # interface name on client |
| + self.client_wlanif = client.get('wlandev', "wlan0") |
| + |
| # |
| # The server machine may be multi-homed or only on the wifi |
| # network. When only on the wifi net we suppress server_* |
| # requests since we cannot initiate them from the control machine. |
| # |
| - self.server = getattr(server, 'host', None) |
| - if self.server is not None: |
| + server = config['server'] |
| + # NB: server may not be reachable on the control network |
| + if 'addr' in server: |
| + self.server = hosts.create_host(server['addr']) |
| self.server_at = autotest.Autotest(self.server) |
| # if not specified assume the same as the control address |
| self.server_wifi_ip = getattr(server, 'wifi_addr', self.server.ip) |
| else: |
| - # NB: must be set if not reachable from control |
| + self.server = None; |
| + # NB: wifi address must be set if not reachable from control |
| self.server_wifi_ip = server['wifi_addr'] |
| - # NB: truncate SSID to 32 characters |
| - self.defssid = self.__get_defssid()[0:32] |
| - # interface name on client |
| - self.wlanif = "wlan0" |
| - |
| - # auto-detect router type |
| - router_uname = self.router.run('uname').stdout |
| - if re.search('Linux', router_uname): |
| - self.wifi = site_linux_router.LinuxRouter(self.router, router, self.defssid) |
| - elif re.search('BSD', router_uname): |
| - self.wifi = site_bsd_router.BSDRouter(self.router, router, self.defssid) |
| - else: |
| - raise Exception('Unsupported router') |
| - |
| # potential bg thread for ping untilstop |
| self.ping_thread = None |
| @@ -113,13 +128,12 @@ class WiFiTest(object): |
| self.wifi.destroy({}) |
| - def __get_defssid(self): |
| + def __get_defssid(self, ipaddr): |
| # |
| # Calculate ssid based on test name; this lets us track progress |
| # by watching beacon frames. |
| # |
| - return re.sub('[^a-zA-Z0-9_]', '_', \ |
| - "%s_%s" % (self.name, self.router.ip)) |
| + return re.sub('[^a-zA-Z0-9_]', '_', "%s_%s" % (self.name, ipaddr)) |
| def run(self): |
| @@ -250,7 +264,7 @@ sys.exit(0)''' |
| print "%s: %s" % (self.name, result.stdout[0:-1]) |
| # fetch IP address of wireless device |
| - self.client_wifi_ip = self.__get_ipaddr(self.client, self.wlanif) |
| + self.client_wifi_ip = self.__get_ipaddr(self.client, self.client_wlanif) |
| logging.info("%s: client WiFi-IP is %s", self.name, self.client_wifi_ip) |
| @@ -303,7 +317,7 @@ sys.exit(0)''' |
| def client_check_bintval(self, params): |
| """ Verify negotiated beacon interval """ |
| - result = self.router.run("ifconfig %s" % self.wlanif) |
| + result = self.router.run("ifconfig %s" % self.client_wlanif) |
| want = params[0] |
| m = re.search('bintval ([0-9]*)', result.stdout) |
| if m is None: |
| @@ -316,7 +330,7 @@ sys.exit(0)''' |
| def client_check_dtimperiod(self, params): |
| """ Verify negotiated DTIM period """ |
| - result = self.router.run("ifconfig %s" % self.wlanif) |
| + result = self.router.run("ifconfig %s" % self.client_wlanif) |
| want = params[0] |
| m = re.search('dtimperiod ([0-9]*)', result.stdout) |
| if m is None: |
| @@ -329,7 +343,7 @@ sys.exit(0)''' |
| def client_check_rifs(self, params): |
| """ Verify negotiated RIFS setting """ |
| - result = self.router.run("ifconfig %s" % self.wlanif) |
| + result = self.router.run("ifconfig %s" % self.client_wlanif) |
| m = re.search('[^-]rifs', result.stdout) |
| if m is None: |
| raise AssertionError |
| @@ -337,7 +351,7 @@ sys.exit(0)''' |
| def client_check_shortgi(self, params): |
| """ Verify negotiated Short GI setting """ |
| - result = self.router.run("ifconfig %s" % self.wlanif) |
| + result = self.router.run("ifconfig %s" % self.client_wlanif) |
| m = re.search('[^-]shortgi', result.stdout) |
| if m is None: |
| raise AssertionError |
| @@ -634,3 +648,29 @@ def read_tests(dir, pat): |
| # use filenames to sort |
| return sorted(tests, cmp=__byfile) |
| + |
| +def read_wifi_testbed_config(file, client_addr=None, server_addr=None, |
| + router_addr=None): |
| + # read configuration file |
| + fd = open(file) |
| + config = eval(fd.read()) |
| + |
| + # client must be reachable on the control network |
| + client = config['client'] |
| + if client_addr is not None: |
| + client['addr'] = client_addr; |
| + |
| + # router must be reachable on the control network |
| + router = config['router'] |
| + if router_addr is not None: |
| + server['router'] = router_addr; |
| + |
| + server = config['server'] |
| + if server_addr is not None: |
| + server['addr'] = server_addr; |
| + # TODO(sleffler) check for wifi_addr when no control address |
| + |
| + # tag jobs w/ the router's address on the control network |
| + config['tagname'] = router['addr'] |
| + |
| + return config |