# Copyright 2022 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_PerfNoisyEnv.vht40_gaussian_ch036'
METADATA = {
    'contacts': ['chromeos-wifi-champs@google.com'],
    # ChromeOS > Platform > Connectivity > WiFi
    'bug_component': 'b:893827',
    # Network: Open VHT40 802.11ac, Channel 36.
    'criteria': 'Measure the maximal receiving and transmitting throughput and point of disconnection on a DUT while broadcasting gaussian noise at multiple gain values',
    'hw_agnostic': False,
}
ATTRIBUTES = ''
MAX_RESULT_SIZE_KB = 512000
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)
    noise_file = 'gaussian_noise_sample_rate_8M_amplitude_1_signed_8bit.iq'
    frequency = 5180000000
    start_gain=30
    gain_increment=1
    noise_parameters = (noise_file, frequency, start_gain, gain_increment)
    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)
    use_iperf = True
    job.run_test('network_WiFi_PerfNoisyEnv', tag=NAME.split('.')[1],
                 host=host, raw_cmdline_args=args,
                 additional_params=(noise_parameters, ap_config, use_iperf))

parallel_simple(run, machines)
