blob: cae84c9050018a0da94527d537001abdcc9470ac [file] [log] [blame]
# 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)