| # Copyright 2014 The Chromium 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.cros.network import apmanager_constants |
| from autotest_lib.client.cros import constants |
| from autotest_lib.server import autotest |
| from autotest_lib.server.cros.network import hostap_config |
| |
| XMLRPC_BRINGUP_TIMEOUT_SECONDS = 60 |
| |
| def get_xmlrpc_proxy(host): |
| """Get an apmanager XMLRPC proxy for |host|. |
| |
| @param host: host object representing a remote device. |
| @return proxy object for remote XMLRPC server. |
| |
| """ |
| # Make sure the client library on the device is up-to-date. |
| client_at = autotest.Autotest(host) |
| client_at.install() |
| # Start up the XMLRPC proxy on the device. |
| proxy = host.rcp_server_tracker.xmlrpc_connect( |
| constants.APMANAGER_XMLRPC_SERVER_COMMAND, |
| constants.APMANAGER_XMLRPC_SERVER_PORT, |
| command_name=constants.APMANAGER_XMLRPC_SERVER_CLEANUP_PATTERN, |
| ready_test_name=constants.APMANAGER_XMLRPC_SERVER_READY_METHOD, |
| timeout_seconds=XMLRPC_BRINGUP_TIMEOUT_SECONDS) |
| return proxy |
| |
| |
| class ApmanagerServiceProvider(object): |
| """Provide AP service using apmanager.""" |
| |
| XMLRPC_BRINGUP_TIMEOUT_SECONDS = 60 |
| APMANAGER_DEFAULT_CHANNEL = 6 |
| |
| def __init__(self, linux_system, config_params): |
| """ |
| @param linux_system SiteLinuxSystem machine to setup AP on. |
| @param config_params dictionary of configuration parameters. |
| """ |
| self._linux_system = linux_system |
| self._config_params = config_params |
| self._xmlrpc_server = None |
| self._service = None |
| |
| |
| def __enter__(self): |
| # Create a managed mode interface to start the AP on. Autotest removes |
| # all wifi interfaces before and after each test in SiteLinuxSystem. |
| channel = apmanager_constants.DEFAULT_CHANNEL_NUMBER |
| if apmanager_constants.CONFIG_CHANNEL in self._config_params: |
| channel = int( |
| self._config_params[apmanager_constants.CONFIG_CHANNEL]) |
| self._linux_system.get_wlanif( |
| hostap_config.HostapConfig.get_frequency_for_channel( |
| channel), |
| 'managed') |
| self._xmlrpc_server = get_xmlrpc_proxy(self._linux_system.host) |
| self._service = self._xmlrpc_server.start_service(self._config_params) |
| |
| |
| def __exit__(self, exception, value, traceback): |
| if self._service is not None: |
| self._xmlrpc_server.terminate_service(self._service) |