# 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_check5HT40'
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 5 GHz channel (40MHz-channel with the second 20MHz chunk of the 40MHz
channel on the channel below the center channel).
"""


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_HT40_MINUS]
    n = hostap_config.HostapConfig.MODE_11N_PURE
    configurations = [(hostap_config.HostapConfig(frequency=5240,
                                                  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)
