# Copyright 2013 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = 'network_WiFi_AttenuatedPerf.vht40_ch036'
METADATA = {
    'contacts': ['chromeos-wifi-champs@google.com'],
    'requirements': ['wifi-gen-0002-v01', 'wifi-proc-0009-v01', 'wifi-proc-0012-v01', 'wifi-proc-0013-v01', 'wifi-proc-0016-v01', 'wifi-proc-0020-v01'],
    # ChromeOS > Platform > Connectivity > WiFi
    'bug_component': 'b:893827',
    # netperf is used for measuring the throughput.
    # Network: Open VHT40 802.11ac, Channel 36.
    'criteria': 'Measure the maximal receiving and transmitting throughput on a DUT across multiple attenuation levels',
    'hw_agnostic': False,
}
ATTRIBUTES = "suite:wifi_atten_perf"
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell, peripheral_wifi_state:WORKING'

from autotest_lib.server.cros.network import hostap_config


def run(machine):
    host = hosts.create_host(machine)
    ap_config = hostap_config.HostapConfig(
            channel=36,
            mode=hostap_config.HostapConfig.MODE_11AC_PURE,
            n_capabilities=[hostap_config.HostapConfig.N_CAPABILITY_HT40],
            ac_capabilities=[hostap_config.HostapConfig.AC_CAPABILITY_MAX_A_MPDU_LEN_EXP7],
            vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_40,
            spectrum_mgmt_required=True)
    attenuation_increment = 6
    final_attenuation = 100
    job.run_test('network_WiFi_AttenuatedPerf',
                 tag=NAME.split('.')[1],
                 host=host,
                 raw_cmdline_args=args,
                 additional_params=(ap_config, attenuation_increment, final_attenuation))


parallel_simple(run, machines)
