blob: a50443a97fbc6ead87725480c39b688ea41d7fd2 [file] [log] [blame]
# 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.
import logging
import time
from autotest_lib.client.common_lib import error
from autotest_lib.client.bin import test
from autotest_lib.client.cros.networking.chrome_testing \
import chrome_networking_test_context as cntc
from autotest_lib.client.cros.networking.chrome_testing \
import chrome_networking_test_api as cnta
from autotest_lib.client.common_lib.cros.network \
import chrome_net_constants
class network_RoamWifiEndToEnd(test.test):
"""
Tests the following with chrome.networkingPrivate APIs:
1. Tests that the DUT can see and connect to the configured AP.
2. Tests the DUT can Roam/Failover between networks with same SSID.
"""
version = 1
def _find_configured_network(self):
"""Check if the required network is in the networks_found list.
@return Service list of the required network; None if network not found
"""
networks = self.chrome_networking.get_wifi_networks()
for service in networks:
if service['Name'] == self.SSID:
return service
return None
def _find_and_connect_to_configured_network(self):
"""Find all networks in range and connect to the required network."""
network = self._find_configured_network()
if network is None:
raise error.TestFail('Network with ssid=%s is not found', self.SSID)
self.chrome_networking.connect_to_network(network)
def _verify_device_roamed(self):
"""Verify that the device has roamed between networks.
@raises error.TestFail if connect to second AP has failed.
"""
# Give the DUT some time to roam to the other AP and connect.
time.sleep(self.chrome_networking.SHORT_TIMEOUT)
required_network_service_list = self._find_configured_network()
# Check if the network exists and it is in connected state.
if required_network_service_list is None:
raise error.TestFail('Network with ssid=%s is not found', self.SSID)
if required_network_service_list['ConnectionState'] != 'Connected':
raise error.TestFail(
'DUT failed to roam/connect to the second network')
if required_network_service_list['ConnectionState'] == 'Connected':
logging.info('DUT successfully roamed to the other Open network')
def run_once(self, ssid, test):
"""Run the test.
@param ssid: SSID of the APs.
@param test: Set by the server test control file depending on the test
that is being run.
"""
self.SSID = ssid
with cntc.ChromeNetworkingTestContext() as testing_context:
self.chrome_networking = cnta.ChromeNetworkProvider(testing_context)
enabled_devices = self.chrome_networking.get_enabled_devices()
if (self.chrome_networking.WIFI_DEVICE not in
enabled_devices):
self.chrome_networking.enable_network_device(
self.chrome_networking.WIFI_DEVICE)
self.chrome_networking.scan_for_networks()
if test == chrome_net_constants.OPEN_CONNECT:
self._find_and_connect_to_configured_network()
elif test == chrome_net_constants.OPEN_ROAM:
self._verify_device_roamed()