# Copyright 2023 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_Perf.he40_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 encrypted HE40 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_HT40,
              hostap_config.HostapConfig.N_CAPABILITY_LDPC]
    host = hosts.create_host(machine)
    wpa_config = xmlrpc_security_types.WPAConfig(
            psk='chromeos',
            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_40,
                        vht_center_channel=he_center_channel,
                        ac_capabilities=[hostap_config.HostapConfig.AC_CAPABILITY_MAX_A_MPDU_LEN_EXP6],
                        he_channel_width=hostap_config.HostapConfig.HE_CHANNEL_WIDTH_40,
                        he_center_channel=he_center_channel,
                        ax_capabilities=[],
                        security_config=wpa_config)
               for channel, he_center_channel in [(36, 38)]]
    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)
