116 lines
4.4 KiB
Python
116 lines
4.4 KiB
Python
# Copyright 2019 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 pickle
|
|
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.cros.enterprise import enterprise_policy_base
|
|
from autotest_lib.client.cros.enterprise import enterprise_network_api
|
|
|
|
|
|
class policy_WiFiPrecedence(enterprise_policy_base.EnterprisePolicyTest):
|
|
version = 1
|
|
|
|
|
|
def cleanup(self):
|
|
"""Re-enable ethernet after the test is completed."""
|
|
if hasattr(self, 'net_api'):
|
|
self.net_api.chrome_net_context.enable_network_device('Ethernet')
|
|
super(policy_WiFiPrecedence, self).cleanup()
|
|
|
|
|
|
def test_precedence(self, network1, network2, precedence, test):
|
|
"""
|
|
Ensure DUT connects to network with higher precedence.
|
|
|
|
DUT is given 2 network configs and must connect to the one specified
|
|
by |precedence|.
|
|
|
|
@param network1: A NetworkConfig object representing a network.
|
|
@param network2: A NetworkConfig object representing a network.
|
|
@param precedence: The int 1 or 2 that indicates
|
|
which network should autoconnect.
|
|
@param test: Name of the test being run.
|
|
|
|
@raises error.TestFail: If DUT does not connect to the |precedence|
|
|
network.
|
|
|
|
"""
|
|
if test == 'managed_vs_unmanaged':
|
|
# Connect and disconnect from the unmanaged network so the network
|
|
# is a "remembered" network on the DUT.
|
|
self.net_api.connect_to_network(network2.ssid)
|
|
self.net_api.disconnect_from_network(network2.ssid)
|
|
|
|
# If the networks are the same, ignore the precedence checks.
|
|
if network1.ssid != network2.ssid:
|
|
if (self.net_api.is_network_connected(network1.ssid) and
|
|
precedence == 2):
|
|
raise error.TestFail(
|
|
'DUT autoconnected to network1, but '
|
|
'should have preferred network2.')
|
|
elif (self.net_api.is_network_connected(network2.ssid) and
|
|
precedence == 1):
|
|
raise error.TestFail(
|
|
'DUT autoconnected to network2, but '
|
|
'should have preferred network1.')
|
|
|
|
if (not self.net_api.is_network_connected(network1.ssid) and
|
|
not self.net_api.is_network_connected(network2.ssid)):
|
|
raise error.TestFail('DUT did not connect to a network.')
|
|
|
|
|
|
def run_once(self, network1_pickle=None, network2_pickle=None,
|
|
precedence=None, test=None):
|
|
"""
|
|
Setup and run the test configured for the specified test case.
|
|
|
|
@param network_pickle1: A pickled version of a NetworkConfig
|
|
object representing network1.
|
|
@param network_pickle2: A pickled version of a NetworkConfig
|
|
object representing network2.
|
|
@param precedence: The int 1 or 2 that indicates which network
|
|
should autoconnect.
|
|
@param test: Name of the test being run.
|
|
|
|
@raises error.TestFail: If DUT does not connect to the |precedence|
|
|
network.
|
|
|
|
"""
|
|
if network1_pickle is None or network2_pickle is None:
|
|
raise error.TestError('network1 and network2 cannot be None.')
|
|
|
|
network1 = pickle.loads(network1_pickle)
|
|
network2 = pickle.loads(network2_pickle)
|
|
|
|
network_policy = network1.policy()
|
|
|
|
device_policy = {}
|
|
if test == 'device_vs_user':
|
|
device_policy['device_policies'] = {
|
|
'DeviceOpenNetworkConfiguration': network2.policy()}
|
|
elif test != 'managed_vs_unmanaged':
|
|
# Concatenate the network policies.
|
|
network_policy['NetworkConfigurations'].append(
|
|
network2.policy()['NetworkConfigurations'][0])
|
|
|
|
self.setup_case(
|
|
user_policies={
|
|
'OpenNetworkConfiguration': network_policy
|
|
},
|
|
extension_paths=[
|
|
enterprise_network_api.NETWORK_TEST_EXTENSION_PATH
|
|
],
|
|
enroll=bool(device_policy),
|
|
**device_policy
|
|
)
|
|
|
|
self.net_api = enterprise_network_api.\
|
|
ChromeEnterpriseNetworkContext(self.cr)
|
|
# Disable ethernet so device will default to WiFi.
|
|
self.net_api.disable_network_device('Ethernet')
|
|
|
|
self.test_precedence(network1, network2, precedence, test)
|