diff options
-rw-r--r-- | chrome/test/functional/chromeos_wifi_compliance.py | 16 | ||||
-rw-r--r-- | chrome/test/pyautolib/chromeos_network.py | 93 | ||||
-rw-r--r-- | chrome/test/pyautolib/pyauto.py | 2 |
3 files changed, 79 insertions, 32 deletions
diff --git a/chrome/test/functional/chromeos_wifi_compliance.py b/chrome/test/functional/chromeos_wifi_compliance.py index 5ae3b07..edeb629 100644 --- a/chrome/test/functional/chromeos_wifi_compliance.py +++ b/chrome/test/functional/chromeos_wifi_compliance.py @@ -24,8 +24,18 @@ class ChromeosWifiCompliance(chromeos_network.PyNetworkUITest): router = self.GetRouterConfig(router_name) self.RouterPower(router_name, True) - self.assertTrue(self.WaitUntilWifiNetworkAvailable(router['ssid']), - 'Wifi network %s never showed up.' % router['ssid']) + # If the wifi network is expected to be invisible, the following + # line should timeout which is expected. + wifi_visible = self.WaitUntilWifiNetworkAvailable(router['ssid'], + is_hidden=router.get('hidden')) + + # Note, we expect wifi_visible and 'hidden' status to be opposites. + # The test fails if the network visibility is not as expected. + if wifi_visible == router.get('hidden', False): + self.fail('We expected wifi network "%s" to be %s, but it was not.' % + (router['ssid'], + {True: 'hidden', False: 'visible'}[router.get('hidden', + False)])) # Verify connect did not have any errors. error = self.ConnectToWifiRouter(router_name) @@ -78,7 +88,7 @@ class ChromeosWifiCompliance(chromeos_network.PyNetworkUITest): def testConnectNfiniti(self): """Test connecting to the Nfiniti router.""" - self._BasicConnectRouterCompliance('Belkin_N+') + self._BasicConnectRouterCompliance('Nfiniti') def testConnectSMCWBR145(self): """Test connecting to the SMC WBR 145 router.""" diff --git a/chrome/test/pyautolib/chromeos_network.py b/chrome/test/pyautolib/chromeos_network.py index bcbb91c..49611c7 100644 --- a/chrome/test/pyautolib/chromeos_network.py +++ b/chrome/test/pyautolib/chromeos_network.py @@ -47,6 +47,11 @@ class WifiPowerStrip(PowerStrip): for router_info in self._router_dict.values(): router_info['WifiPowerStrip_UsableTime'] = time.time() + # _routers_used keeps track of which routers were used during the lifetime + # of the WifiPowerStrip instance. Adding used routers occurs when + # a wifi router has been turned on. Otherwise, it get clears upon + # the TurnOffUsedRouters call. + self._routers_used = set() PowerStrip.__init__(self, host) def GetRouterConfig(self, router_name): @@ -79,11 +84,17 @@ class WifiPowerStrip(PowerStrip): router = self.GetRouterConfig(router_name) if not router: raise Exception('Invalid router name \'%s\'.' % router_name) + # Hidden routers will always be on. Don't allow controlling of the power + # for these networks. + if router.get('hidden'): + return + sleep_time = router['WifiPowerStrip_UsableTime'] - time.time() if sleep_time > 0: - sleep(sleep_time) + time.sleep(sleep_time) if power_state: + self._routers_used |= set([router_name]) logging.debug('Turning on router %s:%s.' % (router['strip_id'], router_name)) self.PowerOn(router['strip_id']) @@ -101,6 +112,13 @@ class WifiPowerStrip(PowerStrip): for router in self._router_dict: self.RouterPower(router, False, pause_after=0) + def TurnOffUsedRouters(self): + """Turns off the routers that were once turned on.""" + for router in self._routers_used: + self.RouterPower(router, False, pause_after=0) + + self._routers_used = set() + class PyNetworkUITest(pyauto.PyUITest): """A subclass of PyUITest for Chrome OS network tests. @@ -128,11 +146,7 @@ class PyNetworkUITest(pyauto.PyUITest): def tearDown(self): pyauto.PyUITest.tearDown(self) self._PopServiceOrder() - - # If the test case used the WifiPowerStrip, make sure - # everything is clean by turning all the routers off. - if self._wifi_power_strip: - self._wifi_power_strip.TurnOffAllRouters() + self._wifi_power_strip.TurnOffUsedRouters() def _SetServiceOrder(self, service_order): self._manager.SetServiceOrder(service_order) @@ -148,15 +162,35 @@ class PyNetworkUITest(pyauto.PyUITest): def _PushServiceOrder(self, service_order): self._old_service_order = self._manager.GetServiceOrder() self._SetServiceOrder(service_order) - assert service_order == self._manager.GetServiceOrder(), \ + service_order = service_order.split(',') + + # Verify services that are present in both the service_order + # we set and the one retrieved from device are in the correct order. + set_service_order = self._manager.GetServiceOrder().split(',') + union_service = set(service_order).union(set(set_service_order)) + + service_order = [s for s in service_order if s in union_service] + set_service_order = [s for s in set_service_order if s in union_service] + + assert service_order == set_service_order, \ 'Flimflam service order not set properly. %s != %s' % \ - (self._old_service_order, self._manager.GetServiceOrder()) + (service_order, set_service_order) def _PopServiceOrder(self): self._SetServiceOrder(self._old_service_order) - assert self._old_service_order == self._manager.GetServiceOrder(), \ - 'Flimflam service order not reset properly. %s != %s' % \ - (self._old_service_order, self._manager.GetServiceOrder()) + + # Verify services that are present in both the service_order + # we set and the one retrieved from device are in the correct order. + old_service_order = self._old_service_order.split(',') + set_service_order = self._manager.GetServiceOrder().split(',') + union_service = set(old_service_order).union(set(set_service_order)) + + old_service_order = [s for s in old_service_order if s in union_service] + set_service_order = [s for s in set_service_order if s in union_service] + + assert old_service_order == set_service_order, \ + 'Flimflam service order not set properly. %s != %s' % \ + (old_service_order, set_service_order) def InitWifiPowerStrip(self): """Initializes the router controller using the specified config file.""" @@ -173,7 +207,7 @@ class PyNetworkUITest(pyauto.PyUITest): self.TurnOffAllRouters = self._wifi_power_strip.TurnOffAllRouters self.GetRouterConfig = self._wifi_power_strip.GetRouterConfig - def WaitUntilWifiNetworkAvailable(self, ssid, timeout=60): + def WaitUntilWifiNetworkAvailable(self, ssid, timeout=60, is_hidden=False): """Waits until the given network is available. Routers that are just turned on may take up to 1 minute upon turning them @@ -203,6 +237,11 @@ class PyNetworkUITest(pyauto.PyUITest): # this method. return False + # The hidden AP's will always be on, thus we will assume it is ready to + # connect to. + if is_hidden: + return bool(_GotWifiNetwork()) + return self.WaitUntil(_GotWifiNetwork, timeout=timeout, retry_sleep=1) def GetConnectedWifi(self): @@ -243,22 +282,20 @@ class PyNetworkUITest(pyauto.PyUITest): router = self._wifi_power_strip.GetRouterConfig(router_name) assert router, 'Router with name %s is not defined ' \ 'in the router configuration.' % router_name - - service_path = self.GetServicePath(router['ssid']) - assert service_path, 'Service with SSID %s is not present.' % router['ssid'] - + security = router.get('security', 'SECURITY_NONE') passphrase = router.get('passphrase', '') - logging.debug('Connecting to router %s.' % router_name) - return self.ConnectToWifiNetwork(service_path, passphrase) - - def PowerDownAllRouters(self): - """Turns off all of the routers. - - Convenience method that allows all subclasses to turn everything off and - start fresh. - - """ - if self._wifi_power_strip: - self._wifi_power_strip.TurnOffAllRouters() + # Branch off the connect calls depending on if the wifi network is hidden + # or not. + error_string = None + if router.get('hidden'): + error_string = self.ConnectToHiddenWifiNetwork(router['ssid'], security, + passphrase) + else: + service_path = self.GetServicePath(router['ssid']) + assert service_path, 'Service with SSID %s is not present.' % \ + router['ssid'] + logging.debug('Connecting to router %s.' % router_name) + error_string = self.ConnectToWifiNetwork(service_path, passphrase) + return error_string diff --git a/chrome/test/pyautolib/pyauto.py b/chrome/test/pyautolib/pyauto.py index f263f76..d2d2017 100644 --- a/chrome/test/pyautolib/pyauto.py +++ b/chrome/test/pyautolib/pyauto.py @@ -422,7 +422,7 @@ class PyUITest(pyautolib.PyUITestBase, unittest.TestCase): data_file = os.path.join(filename) contents = open(data_file).read() try: - ret = eval(contents, {'__builtins__': None}, None) + ret = eval(contents) except: print >>sys.stderr, '%s is an invalid data file.' % data_file raise |