# 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_checkWPA_TKIP'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = "suite:wifi_correctness_cros_core, suite:wifi_matfunc, suite:wifi_matfunc_bcm4356, suite:wifi_matfunc_intel7265, suite:wifi_matfunc_marvell8897, suite:wifi_release"
SUITE = ('wifi_matfunc, wifi_matfunc_bcm4356, wifi_matfunc_marvell8897,'
         'wifi_matfunc_intel7265, wifi_correctness_cros_core, wifi_release')
DEPENDENCIES = 'wificell'

DOC = """
This tests verifies that we can connect to an AP broadcasting a WPA network
using TKIP.  TKIP is deprecated for having some security holes, and WPA is
deprecated in favor of WPA2, but routers of a certain age only support
this mode.
"""

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):
    wpa_config = xmlrpc_security_types.WPAConfig(
            psk='chromeos',
            wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA,
            wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_TKIP])
    ap_config = hostap_config.HostapConfig(
            frequency=2412,
            mode=hostap_config.HostapConfig.MODE_11G,
            security_config=wpa_config)
    assoc_params = xmlrpc_datatypes.AssociationParameters()
    assoc_params.security_config = wpa_config
    configurations = [(ap_config, assoc_params)]
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_SimpleConnect',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
