# Copyright 2019 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 = 'briannorris'
NAME = 'network_WiFi_APSupportedRates.11ac'
TIME = 'SHORT'
TEST_TYPE = 'Server'
# TODO(crbug.com/953702): move to wifi_matfunc once stable.
ATTRIBUTES = ('suite:wifi_flaky')
DEPENDENCIES = 'wificell'

DOC = """
Verify that we respond accurately to APs that disable certain legacy bitrates.
"""

from autotest_lib.server.cros.network import hostap_config

def run(machine):
    ap_config = hostap_config.HostapConfig(
        channel=157, mode=hostap_config.HostapConfig.MODE_11AC_MIXED,
        vht_center_channel=155,
        vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_80,
        supported_rates=[36, 48, 54],
        basic_rates=[36],
        n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS])

    job.run_test('network_WiFi_APSupportedRates',
                 host=hosts.create_host(machine),
                 raw_cmdline_args=args,
                 additional_params=ap_config)


parallel_simple(run, machines)
