# Copyright (c) 2013 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 = 'wiley, pstew, quiche'
NAME = 'network_WiFi_Roam.wifi_roam1xTLS'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_matfunc, suite:wifi_matfunc_noservo,'
              'suite:wifi_matfunc_bcm4371')
DEPENDENCIES = 'wificell'

DOC = """
This test attempts to verify that we can roam between two 802.1x EAP-TLS APs
in full view of the DUT.
"""


from autotest_lib.client.common_lib.cros import site_eap_certs
from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
from autotest_lib.server.cros.network import hostap_config


def run(machine):
    eap_config = xmlrpc_security_types.WPAEAPConfig(
            server_ca_cert=site_eap_certs.ca_cert_1,
            server_cert=site_eap_certs.server_cert_1,
            server_key=site_eap_certs.server_private_key_1,
            client_ca_cert=site_eap_certs.ca_cert_1,
            client_cert=site_eap_certs.client_cert_1,
            client_key=site_eap_certs.client_private_key_1)
    configuration = (hostap_config.HostapConfig(
                             channel=1, security_config=eap_config),
                     hostap_config.HostapConfig(
                             channel=48,
                             mode=hostap_config.HostapConfig.MODE_11A,
                             security_config=eap_config),
                     xmlrpc_datatypes.AssociationParameters(
                             security_config=eap_config))
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_Roam',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=configuration)


parallel_simple(run, machines)
