# 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_SimpleConnect.wifi_check1x_TTLS'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_matfunc, suite:wifi_release, subsystem:wifi')
DEPENDENCIES = 'wificell'

DOC = """
This test attempts to verify that we can connect to a router while using
TTLS authentication with several tunneled protocols.
"""

from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types
from autotest_lib.server.cros.network import tunneled_1x_tests


def run(machine):
    host = hosts.create_host(machine)
    # Negative tests check the parts of the state machine that handle failures.
    # We do these tests for only one inner authentication protocol because
    # we presume that supplicant reuses this code between inner authentication
    # types.
    configurations = tunneled_1x_tests.get_negative_8021x_test_cases(
            xmlrpc_security_types.Tunneled1xConfig.LAYER1_TYPE_TTLS,
            xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_MD5)
    inners = (xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_MSCHAPV2,
              xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_MD5,
              xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_TTLS_MSCHAPV2,
              xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_TTLS_MSCHAP,
              xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_TTLS_PAP,
              xmlrpc_security_types.Tunneled1xConfig.LAYER2_TYPE_GTC)
    for inner in inners:
        configurations += tunneled_1x_tests.get_positive_8021x_test_cases(
                xmlrpc_security_types.Tunneled1xConfig.LAYER1_TYPE_TTLS,
                inner)
    job.run_test('network_WiFi_SimpleConnect',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
