# Copyright 2014 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.cros.network import apmanager_constants
from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
from autotest_lib.server.cros.network import apmanager_service_provider
from autotest_lib.server.cros.network import wifi_cell_test_base
class apmanager_SimpleConnect(wifi_cell_test_base.WiFiCellTestBase):
"""Test that the DUT can connect to an AP created by apmanager."""
version = 1
XMLRPC_BRINGUP_TIMEOUT_SECONDS = 60
def parse_additional_arguments(self, commandline_args, additional_params):
"""Hook into super class to take control files parameters.
@param commandline_args dict of parsed parameters from the autotest.
@param additional_params dict of AP configuration parameters.
"""
self._configurations = additional_params
def run_once(self):
"""Sets up a router, connects to it, pings it."""
# Setup bridge mode test environments if AP is configured to operate in
# bridge mode.
if (apmanager_constants.CONFIG_OPERATION_MODE in self._configurations
and self._configurations[apmanager_constants.CONFIG_OPERATION_MODE]
== apmanager_constants.OPERATION_MODE_BRIDGE):
# Setup DHCP server on the other side of the bridge.
self.context.router.setup_bridge_mode_dhcp_server()
self._configurations[apmanager_constants.CONFIG_BRIDGE_INTERFACE] =\
self.context.router.get_bridge_interface()
ssid = self.context.router.build_unique_ssid()
self._configurations[apmanager_constants.CONFIG_SSID] = ssid
with apmanager_service_provider.ApmanagerServiceProvider(
self.context.router, self._configurations):
assoc_params = xmlrpc_datatypes.AssociationParameters()
assoc_params.ssid = ssid
self.context.assert_connect_wifi(assoc_params)
self.context.assert_ping_from_server()
# AP is terminated, wait for client to become disconnected.
success, state, elapsed_seconds = \
self.context.client.wait_for_service_states(
ssid, ( 'idle', ), 30)
if not success:
raise error.TestFail('Failed to disconnect from %s after AP was '
'terminated for %f seconds (state=%s)' %
(ssid, elapsed_seconds, state))