| # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib import utils |
| from autotest_lib.server import hosts |
| from autotest_lib.server import site_attenuator |
| from autotest_lib.server.cros import wifi_test_utils |
| from autotest_lib.server.cros.network import wifi_test_context_manager |
| |
| |
| class RvRTestContextManager(wifi_test_context_manager.WiFiTestContextManager): |
| """A context manager for state used in WiFi autotests. |
| |
| Some of the building blocks we use in WiFi tests need to be cleaned up |
| after use. For instance, we start an XMLRPC server on the client |
| which should be shut down so that the next test can start its instance. |
| It is convenient to manage this setup and teardown through a context |
| manager rather than building it into the test class logic. |
| |
| """ |
| |
| CMDLINE_ATTEN_ADDR = 'atten_addr' |
| |
| |
| def _get_attenuator_address(self): |
| """@return string address of WiFi attenuator host in test.""" |
| hostname = self.client.host.hostname |
| if utils.host_is_in_lab_zone(hostname): |
| return wifi_test_utils.get_attenuator_addr_in_lab(hostname) |
| |
| elif self.CMDLINE_ATTEN_ADDR in self._cmdline_args: |
| return self._cmdline_args[self.CMDLINE_ATTEN_ADDR] |
| |
| raise error.TestError('Test not running in lab zone and no ' |
| 'attenuator address given') |
| |
| |
| def __init__(self, test_name, host, cmdline_args, debug_dir): |
| """Construct a WiFiTestContextManager. |
| |
| Optionally can pull addresses of the server address, router address, |
| or router port from cmdline_args. |
| |
| @param test_name string descriptive name for this test. |
| @param host host object representing the DUT. |
| @param cmdline_args dict of key, value settings from command line. |
| @param debug_dir string of directory path to save packet capture files. |
| |
| """ |
| super(RvRTestContextManager, self).__init__( |
| test_name, host, cmdline_args, debug_dir) |
| |
| |
| self._attenuator_address = self._get_attenuator_address() |
| attenuator_host = hosts.SSHHost(self._attenuator_address, port=22) |
| self._attenuator = site_attenuator.Attenuator(attenuator_host) |
| |
| |
| @property |
| def attenuator(self): |
| """@return attenuator object (e.g. a BeagleBone).""" |
| return self._attenuator |
| |
| |
| def teardown(self): |
| """Tears down the state used in a WiFi RvR test.""" |
| super(RvRTestContextManager, self).teardown() |
| self._attenuator.cleanup() |
| |
| |
| def configure(self, ap_config, multi_interface=None, is_ibss=None): |
| """Configures AP and variable attenuators for a WiFi RvR test. |
| |
| @param ap_config: parameters for access-point |
| @param multi_interface: bool indicates whether AP's second radio |
| is being configured by this command |
| @is_ibss: bool indicates whether this is an IBSS endpoint |
| |
| """ |
| super(RvRTestContextManager, self).configure( |
| configuration_parameters=ap_config, |
| multi_interface=multi_interface, is_ibss=is_ibss) |
| self._attenuator.config(self.client.host.hostname, ap_config.frequency) |