# 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 = ''
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)
