# Copyright (c) 2023 The Chromium OS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

NAME = 'network_WiFi_Perf.he20_aes'
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',
    # iperf and netperf are used to measure the throughput.
    # Network: AES encypted HE20 802.11ax
    'criteria': 'Measure and verify the maximal receiving and transmitting throughput on a DUT',
    'hw_agnostic': False,
}
ATTRIBUTES = 'suite:wifi_perf_openwrt'
TIME = 'SHORT'
MAX_RESULT_SIZE_KB = 512000
TEST_TYPE = 'Server'
DEPENDENCIES = 'wificell, peripheral_wifi_state:WORKING'


from autotest_lib.server.cros.network import hostap_config
from autotest_lib.client.common_lib.cros.network import xmlrpc_security_types


def run(machine):
    n_caps = [hostap_config.HostapConfig.N_CAPABILITY_HT20,
              hostap_config.HostapConfig.N_CAPABILITY_LDPC]
    host = hosts.create_host(machine)
    wpa_config = xmlrpc_security_types.WPAConfig(
            psk='test0000',
            wpa_mode=xmlrpc_security_types.WPAConfig.MODE_PURE_WPA2,
            wpa_ciphers=[xmlrpc_security_types.WPAConfig.CIPHER_CCMP])
    configs = [hostap_config.HostapConfig(
                        channel=channel,
                        mode=hostap_config.HostapConfig.MODE_11AX_PURE,
                        n_capabilities=n_caps,
                        vht_channel_width=hostap_config.HostapConfig.VHT_CHANNEL_WIDTH_20,
                        ac_capabilities=[],
                        ax_capabilities=[],
                        he_channel_width=hostap_config.HostapConfig.HE_CHANNEL_WIDTH_20,
                        security_config=wpa_config)
               for channel in (36, 157)]
    use_iperf = True
    job.run_test('network_WiFi_Perf', tag=NAME.split('.')[1],
                 host=host, raw_cmdline_args=args,
                 additional_params=(configs, use_iperf))


parallel_simple(run, machines)
