67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
# 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)
|