# Copyright 2014 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 = 'wiley, pstew, quiche'
NAME = 'network_WiFi_Perf.vht80'
# Add to the suite when crbug.com/444207 is fixed
# SUITE = ('wifi_perf, wifi_perf_bcm4356, wifi_perf_marvell8897,'
#         'wifi_perf_intel7265')
TIME = 'SHORT'
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell'

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


from autotest_lib.server.cros.network import hostap_config


def run(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)]]
    host = hosts.create_host(machine)
    job.run_test('network_WiFi_Perf', tag=NAME.split('.')[1],
                 host=host, raw_cmdline_args=args,
                 additional_params=configs)


parallel_simple(run, machines)
