blob: 5c45faf4747f037eb6ca0438f31e07be1ee27332 [file] [log] [blame]
# Copyright (c) 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.
from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros.network import ping_runner
from autotest_lib.server.cros.network import ip_config_context_manager
from autotest_lib.server.cros.network import wifi_cell_test_base
class WiFiCellPerfTestBase(wifi_cell_test_base.WiFiCellTestBase):
"""An abstract base class for autotests in WiFi performance cells.
Similar to WiFiCellTestBase with one major exception:
The pcap device is also used as an endpoint in performance tests, so the
router and pcap device must have a direct Ethernet connection over their LAN
ports in a WiFiCellPerfTestBase.
"""
def configure_and_connect_to_ap(self, ap_config):
"""Configure the router as an AP with the given config and connect
the DUT to it.
@param ap_config HostapConfig object.
@return name of the configured AP
"""
# self.context.configure has a similar check - but that one only
# errors out if the AP *requires* VHT i.e. AP is requesting
# MODE_11AC_PURE and the client does not support it.
# For performance tests we don't want to run MODE_11AC_MIXED on the AP if
# the client does not support VHT, as we are guaranteed to get the
# same results at 802.11n/HT40 in that case.
if ap_config.is_11ac and not self.context.client.is_vht_supported():
raise error.TestNAError('Client does not have AC support')
return super(WiFiCellPerfTestBase,
self).configure_and_connect_to_ap(ap_config)
def _verify_additional_setup_requirements(self):
"""Ensure that the router and pcap device in the cell have a direct
connection available over their respective LAN ports. Raises a test NA
error if this connection cannot be verified.
"""
router_lan_ip_addr = "192.168.1.50"
pcap_lan_ip_addr = "192.168.1.51"
router_lan_iface_name = "eth1"
pcap_lan_iface_name = "eth1"
with ip_config_context_manager.IpConfigContextManager() as ip_context:
try:
ip_context.bring_interface_up(self.context.router.host,
router_lan_iface_name)
ip_context.bring_interface_up(self.context.pcap_host.host,
pcap_lan_iface_name)
ip_context.assign_ip_addr_to_iface(self.context.router.host,
router_lan_ip_addr,
router_lan_iface_name)
ip_context.assign_ip_addr_to_iface(self.context.pcap_host.host,
pcap_lan_ip_addr,
pcap_lan_iface_name)
ping_config = ping_runner.PingConfig(
pcap_lan_ip_addr,
count=5,
source_iface=router_lan_iface_name)
self.context.router.ping(ping_config)
except:
raise error.TestNAError(
'Could not verify connection between router and pcap '
'devices. Router and pcap device must have a direct '
'Ethernet connection over their LAN ports to run '
'performance tests.')