| OLD | NEW |
| (Empty) |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import copy | |
| 6 import dbus | |
| 7 import logging | |
| 8 import os | |
| 9 import time | |
| 10 | |
| 11 from chromeos.power_strip import PowerStrip | |
| 12 import pyauto | |
| 13 import pyauto_errors | |
| 14 | |
| 15 class PyNetworkUITest(pyauto.PyUITest): | |
| 16 """A subclass of PyUITest for Chrome OS network tests. | |
| 17 | |
| 18 A subclass of PyUITest that automatically sets the flimflam | |
| 19 priorities to put wifi connections first before starting tests. | |
| 20 This is for convenience when writing wifi tests. | |
| 21 """ | |
| 22 _ROUTER_CONFIG_FILE = os.path.join(pyauto.PyUITest.DataDir(), | |
| 23 'pyauto_private', 'chromeos', 'network', | |
| 24 'wifi_testbed_config') | |
| 25 _FLIMFLAM_PATH = 'org.chromium.flimflam' | |
| 26 | |
| 27 def setUp(self): | |
| 28 self.CleanupFlimflamDirsOnChromeOS() | |
| 29 # Move ethernet to the end of the flimflam priority list, | |
| 30 # effectively hiding any ssh connections that the | |
| 31 # test harness might be using and putting wifi ahead. | |
| 32 self._PushServiceOrder('wifi,ethernet') | |
| 33 self._ParseDefaultRoutingTable() | |
| 34 pyauto.PyUITest.setUp(self) | |
| 35 | |
| 36 def tearDown(self): | |
| 37 pyauto.PyUITest.tearDown(self) | |
| 38 self._PopServiceOrder() | |
| 39 # Remove the route entry for the power strip. | |
| 40 if hasattr(self, 'ps_route_entry'): | |
| 41 os.system('route del -net %(ipaddress)s gateway %(gateway)s netmask ' | |
| 42 '%(netmask)s dev %(iface)s' % self.ps_route_entry) | |
| 43 | |
| 44 def _GetFlimflamManager(self): | |
| 45 _proxy = dbus.SystemBus().get_object(self._FLIMFLAM_PATH, '/') | |
| 46 return dbus.Interface(_proxy, self._FLIMFLAM_PATH + '.Manager') | |
| 47 | |
| 48 def _ParseDefaultRoutingTable(self): | |
| 49 """Creates and stores a dictionary of the default routing paths.""" | |
| 50 route_table_headers = ['destination', 'gateway', 'genmask', 'flags', | |
| 51 'metric', 'ref', 'use', 'iface'] | |
| 52 routes = os.popen('route -n | egrep "^0.0.0.0"').read() | |
| 53 routes = [interface.split() for interface in routes.split('\n')][:-1] | |
| 54 self.default_routes = {} | |
| 55 for iface in routes: | |
| 56 self.default_routes[iface[-1]] = dict(zip(route_table_headers, iface)) | |
| 57 | |
| 58 def _SetServiceOrder(self, service_order): | |
| 59 self._GetFlimflamManager().SetServiceOrder(service_order) | |
| 60 # Flimflam throws a dbus exception if device is already disabled. This | |
| 61 # is not an error. | |
| 62 try: | |
| 63 self._GetFlimflamManager().DisableTechnology('wifi') | |
| 64 except dbus.DBusException as e: | |
| 65 if 'org.chromium.flimflam.Error.AlreadyDisabled' not in str(e): | |
| 66 raise e | |
| 67 self._GetFlimflamManager().EnableTechnology('wifi') | |
| 68 | |
| 69 def _PushServiceOrder(self, service_order): | |
| 70 self._old_service_order = self._GetFlimflamManager().GetServiceOrder() | |
| 71 self._SetServiceOrder(service_order) | |
| 72 service_order = service_order.split(',') | |
| 73 | |
| 74 # Verify services that are present in both the service_order | |
| 75 # we set and the one retrieved from device are in the correct order. | |
| 76 set_service_order = self._GetFlimflamManager().GetServiceOrder().split(',') | |
| 77 common_service = set(service_order) & set(set_service_order) | |
| 78 | |
| 79 service_order = [s for s in service_order if s in common_service] | |
| 80 set_service_order = [s for s in set_service_order if s in common_service] | |
| 81 | |
| 82 assert service_order == set_service_order, \ | |
| 83 'Flimflam service order not set properly. %s != %s' % \ | |
| 84 (service_order, set_service_order) | |
| 85 | |
| 86 def _PopServiceOrder(self): | |
| 87 self._SetServiceOrder(self._old_service_order) | |
| 88 | |
| 89 # Verify services that are present in both the service_order | |
| 90 # we set and the one retrieved from device are in the correct order. | |
| 91 old_service_order = self._old_service_order.split(',') | |
| 92 set_service_order = self._GetFlimflamManager().GetServiceOrder().split(',') | |
| 93 common_service = set(old_service_order) & set(set_service_order) | |
| 94 | |
| 95 old_service_order = [s for s in old_service_order if s in common_service] | |
| 96 set_service_order = [s for s in set_service_order if s in common_service] | |
| 97 | |
| 98 assert old_service_order == set_service_order, \ | |
| 99 'Flimflam service order not set properly. %s != %s' % \ | |
| 100 (old_service_order, set_service_order) | |
| OLD | NEW |