# 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_checkHiddenWPA'
TIME = 'SHORT'
TEST_TYPE = 'Server'
SUITE = 'wifi_matfunc, wifi_android_correctness, wifi_release'
DEPENDENCIES = 'wificell'

DOC = """
This test verifies that we can connect to hidden WPA networks.  It checks
several common configurations of hidden networks such as pure WPA/WPA2 and
mixed WPA/WPA2 networks.
"""

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 get_configurations():
    wpa_configs = [
            xmlrpc_security_types.WPAConfig(
                    psk='chromeos',
                    wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA,
                    wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_TKIP]),
            xmlrpc_security_types.WPAConfig(
                    psk='chromeos',
                    wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA,
                    wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_TKIP,
                                 xmlrpc_security_types.WPAConfig.CIPHER_CCMP]),
            xmlrpc_security_types.WPAConfig(
                    psk='chromeos',
                    wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA2,
                    wpa2_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_CCMP]),
            xmlrpc_security_types.WPAConfig(
                    psk='chromeos',
                    wpa_mode=xmlrpc_security_types.WPAConfig.MODE_MIXED_WPA,
                    wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_TKIP,
                                 xmlrpc_security_types.WPAConfig.CIPHER_CCMP],
                    wpa2_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_CCMP]),
    ]
    for wpa_config in wpa_configs:
        ap_config = hostap_config.HostapConfig(
                hide_ssid=True,
                frequency=2412,
                mode=hostap_config.HostapConfig.MODE_11G,
                security_config=wpa_config)
        assoc_params = xmlrpc_datatypes.AssociationParameters(
                is_hidden=True,
                security_config=wpa_config)
        configurations = [(ap_config, assoc_params)]
    return configurations


def run(machine):
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_SimpleConnect',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=get_configurations())


parallel_simple(run, machines)
