# 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_matfunc, suite: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)
