# Copyright 2021 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_BluetoothStreamPerf.11ac'
METADATA = {
    'requirements': ['wifi-coex-0001-v01'],
    'contacts': ['chromeos-wifi-champs@google.com'],
    # ChromeOS > Platform > Connectivity > WiFi
    'bug_component': 'b:893827',
    # netperf is used for measuring the throughput.
    # Network: Open 802.11ac, Channels 44 and 157.
    'criteria': 'Measure the maximal receiving and transmitting throughput on a DUT while operating bluetooth',
    'hw_agnostic': False,
}
ATTRIBUTES = 'suite:bluetooth_wifi_coex'
# This test is flaky but adding to  'suite:bluetooth_flaky' will use up
# a lot of lab capacity
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell, working_bluetooth_btpeer:1, peripheral_wifi_state:WORKING'

from autotest_lib.server import utils
from autotest_lib.server.cros.network import hostap_config

args_dict = utils.args_to_dict(args)

def run(machine):
    host = hosts.create_host(machine)

    n_caps = [hostap_config.HostapConfig.N_CAPABILITY_HT40_PLUS]
    ac_caps = [hostap_config.HostapConfig.AC_CAPABILITY_SHORT_GI_80]
    ac_mode = hostap_config.HostapConfig.MODE_11AC_MIXED
    channel_width_80_mhz = hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_80
    configs = [hostap_config.HostapConfig(
                    channel=channel,
                    mode=ac_mode,
                    n_capabilities=n_caps,
                    vht_channel_width=channel_width_80_mhz,
                    vht_center_channel=vht_center_channel,
                    ac_capabilities=ac_caps)
               for channel, vht_center_channel in [(44, 42), (157, 155)]]
    use_iperf=True
    job.run_test('network_WiFi_BluetoothStreamPerf', tag=NAME.split('.')[1],
                 host=host, raw_cmdline_args=args, args_dict=args_dict,
                 additional_params=(configs, use_iperf), test_name='coex_test')

parallel_simple(run, machines)
