# Copyright 2018 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 = 'pauletti'
NAME = 'network_WiFi_SimpleConnect.wifi_check5VHT40'
TIME = 'SHORT'
TEST_TYPE = 'Server'
ATTRIBUTES = ('suite:wifi_flaky', 'subsystem:wifi')
DEPENDENCIES = 'wificell'

DOC = """
This test verifies that DUT can connect to an open 802.11ac network
on channel 120 with a channel width of 40MHz.
"""


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


def run(machine):
    n_caps = [hostap_config.HostapConfig.N_CAPABILITY_HT40]
    ac_mode = hostap_config.HostapConfig.MODE_11AC_PURE
    channel_width = hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40
    configurations = [(hostap_config.HostapConfig(
                                  channel=120,
                                  mode=ac_mode,
                                  n_capabilities=n_caps,
                                  vht_channel_width=channel_width),
                       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)
