f-stack/dpdk/dts/tests/TestSuite_smoke_tests.py

108 lines
3.8 KiB
Python
Raw Normal View History

2025-01-10 11:50:43 +00:00
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2023 University of New Hampshire
import re
from framework.config import PortConfig
from framework.remote_session import TestPmdShell
from framework.settings import SETTINGS
from framework.test_suite import TestSuite
from framework.utils import REGEX_FOR_PCI_ADDRESS
class SmokeTests(TestSuite):
is_blocking = True
# dicts in this list are expected to have two keys:
# "pci_address" and "current_driver"
nics_in_node: list[PortConfig] = []
def set_up_suite(self) -> None:
"""
Setup:
Set the build directory path and generate a list of NICs in the SUT node.
"""
self.dpdk_build_dir_path = self.sut_node.remote_dpdk_build_dir
self.nics_in_node = self.sut_node.config.ports
def test_unit_tests(self) -> None:
"""
Test:
Run the fast-test unit-test suite through meson.
"""
self.sut_node.main_session.send_command(
f"meson test -C {self.dpdk_build_dir_path} --suite fast-tests -t 60",
480,
verify=True,
privileged=True,
)
def test_driver_tests(self) -> None:
"""
Test:
Run the driver-test unit-test suite through meson.
"""
vdev_args = ""
for dev in self.sut_node.virtual_devices:
vdev_args += f"--vdev {dev} "
vdev_args = vdev_args[:-1]
driver_tests_command = f"meson test -C {self.dpdk_build_dir_path} --suite driver-tests"
if vdev_args:
self._logger.info(
f"Running driver tests with the following virtual devices: {vdev_args}"
)
driver_tests_command += f' --test-args "{vdev_args}"'
self.sut_node.main_session.send_command(
driver_tests_command,
300,
verify=True,
privileged=True,
)
def test_devices_listed_in_testpmd(self) -> None:
"""
Test:
Uses testpmd driver to verify that devices have been found by testpmd.
"""
testpmd_driver = self.sut_node.create_interactive_shell(TestPmdShell, privileged=True)
dev_list = [str(x) for x in testpmd_driver.get_devices()]
for nic in self.nics_in_node:
self.verify(
nic.pci in dev_list,
f"Device {nic.pci} was not listed in testpmd's available devices, "
"please check your configuration",
)
def test_device_bound_to_driver(self) -> None:
"""
Test:
Ensure that all drivers listed in the config are bound to the correct
driver.
"""
path_to_devbind = self.sut_node.path_to_devbind_script
all_nics_in_dpdk_devbind = self.sut_node.main_session.send_command(
f"{path_to_devbind} --status | awk '{REGEX_FOR_PCI_ADDRESS}'",
SETTINGS.timeout,
).stdout
for nic in self.nics_in_node:
# This regular expression finds the line in the above string that starts
# with the address for the nic we are on in the loop and then captures the
# name of the driver in a group
devbind_info_for_nic = re.search(
f"{nic.pci}[^\\n]*drv=([\\d\\w-]*) [^\\n]*",
all_nics_in_dpdk_devbind,
)
self.verify(
devbind_info_for_nic is not None,
f"Failed to find configured device ({nic.pci}) using dpdk-devbind.py",
)
# We know this isn't None, but mypy doesn't
assert devbind_info_for_nic is not None
self.verify(
devbind_info_for_nic.group(1) == nic.os_driver_for_dpdk,
f"Driver for device {nic.pci} does not match driver listed in "
f"configuration (bound to {devbind_info_for_nic.group(1)})",
)