# Copyright 2021 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 = 'bfreed'
NAME = 'network_WiFi_BluetoothStreamPerf.11g'
ATTRIBUTES = 'suite:bluetooth_flaky'
TIME = 'MEDIUM'
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell, working_bluetooth_btpeer:1'

DOC = """
This test uses netperf to measure the maximal receiving and transmitting
throughput on a DUT with an open 802.11g network while operating bluetooth.
"""


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)

    mode = hostap_config.HostapConfig.MODE_11G
    configs = [hostap_config.HostapConfig(channel=channel, mode=mode)
               for channel in (6,)]

    job.run_test('network_WiFi_BluetoothStreamPerf', tag=NAME.split('.')[1],
                 host=host, raw_cmdline_args=args, args_dict=args_dict,
                 additional_params=configs, test_name='coex_test')

parallel_simple(run, machines)
