# Copyright (c) 2015 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 = 'krisr, tienchang, bmahadev'
NAME = 'network_WiFi_SuspendStress.WEP40'
TIME = 'MEDIUM'
MAX_RESULT_SIZE_KB = 512000
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell'
ATTRIBUTES = ('suite:wifi_matfunc')

DOC = """
This test uses powerd_dbus to suspend and resume and checks that the
wifi adapter is brought back up and connects to a WEP network.
"""

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):
    host = hosts.create_host(machine)
    # FYI: D-Bus requires string parameters must be valid UTF-8.
    wep_keys = ['abcde', # Interpretted as ASCII.
                'fedcba9876',  # Interpretted as hex.
                # Mix ASCII characters with a 3-byte UTF-8 character.
                'ab\xe4\xb8\x89',
                # Mix different byte length UTF-8 characters.
                '\xe4\xb8\x89\xc2\xa2']
    auth_algs = (xmlrpc_security_types.WEPConfig.AUTH_ALGORITHM_OPEN,
                 xmlrpc_security_types.WEPConfig.AUTH_ALGORITHM_SHARED)
    configurations = []
    for auth_algorithm in auth_algs:
        for i in range(len(wep_keys)):
            wep_config = xmlrpc_security_types.WEPConfig(
                    wep_keys,
                    wep_default_key=i,
                    auth_algorithm=auth_algorithm)
            ap_config = hostap_config.HostapConfig(
                    frequency=2412,
                    mode=hostap_config.HostapConfig.MODE_11G,
                    security_config=wep_config)
            assoc_params = xmlrpc_datatypes.AssociationParameters(
                    security_config=wep_config)
            configurations.append((ap_config, assoc_params))
    job.run_test('network_WiFi_SuspendStress',
                 host=host,
                 tag=NAME.split('.')[1],
                 suspends=5,
                 raw_cmdline_args=args,
                 additional_params=configurations)


parallel_simple(run, machines)
