# 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_ch149'
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 149.
    '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=149,
            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)
