# 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.

AUTHOR = 'timkovich'
TIME = 'SHORT'
NAME = 'policy_WiFiPrecedenceServer.device_vs_user'
TEST_TYPE = 'Server'
# Disable this test until it can be fixed: http://b/171583865
# ATTRIBUTES = 'suite:ent-wificell'
DEPENDENCIES = 'wificell'

DOC = """
'policy_WiFiPrecedenceServer.user_vs_device' sets up both an open user
and device network. The client test is given a network policy for both
networks with AutoConnect=True.

The user network should connect because, with all other things being equal,
the user policy should take precedence.

"""


from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
from autotest_lib.client.cros.enterprise.network_config import NetworkConfig
from autotest_lib.server.cros.network import hostap_config


def run(machine):
    user_ssid = 'User Network'
    device_ssid = 'Device Network'
    n_mode = hostap_config.HostapConfig.MODE_11N_MIXED

    ap_configs = []
    ap_configs.append(hostap_config.HostapConfig(
            channel=5,
            mode=n_mode,
            ssid=user_ssid))

    ap_configs.append(hostap_config.HostapConfig(
            channel=149,
            mode=n_mode,
            ssid=device_ssid))

    # Client network configurations.
    network1_config = NetworkConfig(user_ssid, autoconnect=True)
    network2_config = NetworkConfig(device_ssid, autoconnect=True)

    host = hosts.create_host(machine)
    job.run_test('policy_WiFiPrecedenceServer',
                 raw_cmdline_args=args,
                 host=host,
                 ap_configs=ap_configs,
                 network1_config=network1_config,
                 network2_config=network2_config,
                 precedence=1,
                 test='device_vs_user')


parallel_simple(run, machines)
