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

DOC = """
This tests verifies that we can connect to an AP broadcasting a WPA network
with a variety of unusual passphrases.
"""

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 = []
  psks = ['\xe4\xb8\x80\xe4\xba\x8c\xe4\xb8\x89',  # Pure unicode.
          'abcdef\xc2\xa2',  # Mixed unicode and ASCII.
          ' !"#$%&\'()>*+,-./:;<=>?@[\\]^_{|}~']  # All punctuation.
  for psk in psks:
      wpa_configs.append(xmlrpc_security_types.WPAConfig(
              psk=psk,
              wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA2,
              wpa2_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_CCMP]))
      wpa_configs.append(xmlrpc_security_types.WPAConfig(
              psk=psk,
              wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA,
              wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_TKIP]))
  return [(hostap_config.HostapConfig(
                   frequency=2412,
                   mode=hostap_config.HostapConfig.MODE_11G,
                   security_config=wpa_config),
           xmlrpc_datatypes.AssociationParameters(security_config=wpa_config))
          for wpa_config in wpa_configs]


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)
