# 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_check24HT20'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_correctness_cros_core, suite:wifi_matfunc,'
              'suite:wifi_matfunc_noservo,'
              'suite:wifi_matfunc_bcm4371, suite:wifi_release, subsystem:wifi,'
              'suite:android_wifi_connect')
DEPENDENCIES = 'wificell'

DOC = """
This test verifies that DUT can connect to an open 802.11n network
on 2.4 GHz channels (20MHz channels only).
"""


from autotest_lib.client.common_lib.cros.network import xmlrpc_datatypes
from autotest_lib.server.cros.network import hostap_config


def run(machine):
    caps = [hostap_config.HostapConfig.N_CAPABILITY_GREENFIELD,
            hostap_config.HostapConfig.N_CAPABILITY_HT20]
    n = hostap_config.HostapConfig.MODE_11N_PURE
    configurations = [
            (hostap_config.HostapConfig(channel=1, mode=n, n_capabilities=caps),
             xmlrpc_datatypes.AssociationParameters()),
            (hostap_config.HostapConfig(channel=6, mode=n, n_capabilities=caps),
             xmlrpc_datatypes.AssociationParameters()),
            (hostap_config.HostapConfig(channel=11, mode=n, n_capabilities=caps),
             xmlrpc_datatypes.AssociationParameters())]
    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)
