From: Patrick Robb <probb@iol.unh.edu>
To: Paul.Szczepanek@arm.com
Cc: dev@dpdk.org, Luca.Vizzarro@arm.com, npratte@iol.unh.edu,
thomas.wilks@arm.com, dmarx@iol.unh.edu,
Jeremy Spewock <jspewock@iol.unh.edu>,
Patrick Robb <probb@iol.unh.edu>
Subject: [PATCH 2/2] dts: add port control testing suite
Date: Wed, 23 Apr 2025 21:44:12 -0400 [thread overview]
Message-ID: <20250424014412.3849896-3-probb@iol.unh.edu> (raw)
In-Reply-To: <20250424014412.3849896-1-probb@iol.unh.edu>
From: Jeremy Spewock <jspewock@iol.unh.edu>
This patch ports over the port_control test suite from the legacy
framework and adapts the functionality to fit with the current testing
framework. The test suite provides validation of basic port control
functions such as starting, stopping, and closing ports. It should
be noted that this test suite is not completely 1-to-1 with the one
from Old DTS as it does exclude test cases that use QEMU for testing as
this is not something we are looking to add to the framework in the
near future. It also excludes test cases for resetting ports as this
feature is something that is not supported by all devices and does not
expose a capability regarding if it is through testpmd.
Signed-off-by: Jeremy Spewock <jspewock@iol.unh.edu>
Signed-off-by: Patrick Robb <probb@iol.unh.edu>
Tested-by: Patrick Robb <probb@iol.unh.edu>
---
dts/framework/config/conf_yaml_schema.json | 0
dts/tests/TestSuite_port_control.py | 105 +++++++++++++++++++++
2 files changed, 105 insertions(+)
delete mode 100644 dts/framework/config/conf_yaml_schema.json
create mode 100644 dts/tests/TestSuite_port_control.py
diff --git a/dts/framework/config/conf_yaml_schema.json b/dts/framework/config/conf_yaml_schema.json
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/dts/tests/TestSuite_port_control.py b/dts/tests/TestSuite_port_control.py
new file mode 100644
index 0000000000..a6a694dcbe
--- /dev/null
+++ b/dts/tests/TestSuite_port_control.py
@@ -0,0 +1,105 @@
+# SPDX-License-Identifier: BSD-3-Clause
+# Copyright(c) 2024 University of New Hampshire
+"""Port Control Testing Suite.
+
+This test suite serves to show that ports within testpmd support basic configuration functions.
+Things such as starting a port, stopping a port, and closing a port should all be supported by the
+device. Additionally, after each of these configuration steps (outside of closing the port) it
+should still be possible to start the port again and verify that the port is able to forward a
+large amount of packets (100 are sent in the test cases).
+"""
+
+from scapy.layers.l2 import Ether
+from scapy.packet import Packet, Raw
+
+from framework.params.testpmd import SimpleForwardingModes
+from framework.remote_session.testpmd_shell import TestPmdShell
+from framework.test_suite import TestSuite, func_test
+
+
+class TestPortControl(TestSuite):
+ """DPDK Port Control Testing Suite."""
+
+ def send_packets_and_verify(self) -> None:
+ """Send 100 packets and verify that all packets were forwarded back.
+
+ Packets sent are identical and are all ethernet frames with a payload of 30 "X" characters.
+ This payload is used to differentiate noise on the wire from packets sent by this
+ framework.
+ """
+ payload = ("X" * 30)
+ num_pakts = 100
+ send_p = Ether() / Raw(payload.encode("utf-8"))
+ recv_pakts: list[Packet] = []
+ for _ in range(int(num_pakts / 25)):
+ recv_pakts += self.send_packets_and_capture([send_p] * 25)
+ recv_pakts += self.send_packets_and_capture([send_p] * (num_pakts % 25))
+ recv_pakts = [
+ p
+ for p in recv_pakts
+ if
+ (
+ # Remove padding from the bytes.
+ hasattr(p, "load") and p.load.decode("utf-8").replace("\x00", "") == payload
+ )
+ ]
+ self.verify(
+ len(recv_pakts) == num_pakts,
+ f"Received {len(recv_pakts)} packets when {num_pakts} were expected.",
+ )
+
+ @func_test
+ def test_start_ports(self) -> None:
+ """Start all ports and send a small number of packets.
+
+ Steps:
+ Start all ports
+ Start forwarding in MAC mode
+ Send 100 generic packets to the SUT
+
+ Verify:
+ Check that all the packets sent are sniffed on the TG receive port.
+ """
+ with TestPmdShell(forward_mode=SimpleForwardingModes.mac) as testpmd:
+ testpmd.start_all_ports()
+ testpmd.start()
+ self.send_packets_and_verify()
+
+ @func_test
+ def test_stop_ports(self) -> None:
+ """Stop all ports, then start all ports, amd then send a small number of packets.
+
+ Steps:
+ Stop all ports
+ Start all ports
+ Start forwarding in MAC mode
+ Send 100 generic packets to the SUT
+
+ Verify:
+ Check that stopping the testpmd ports brings down their links
+ Check that all the packets sent are sniffed on the TG receive port.
+ """
+ with TestPmdShell(forward_mode=SimpleForwardingModes.mac) as testpmd:
+ testpmd.stop_all_ports()
+ self.verify(
+ all(not p.is_link_up for p in testpmd.show_port_info_all()),
+ "Failed to stop all ports.",
+ )
+ testpmd.start()
+ self.send_packets_and_verify()
+
+ @func_test
+ def test_close_ports(self) -> None:
+ """Close all the ports via testpmd.
+
+ Steps:
+ Close all the testpmd ports
+
+ Verify:
+ Check that testpmd no longer reports having any ports
+ """
+ with TestPmdShell() as testpmd:
+ testpmd.close_all_ports()
+ self.verify(
+ len(testpmd.show_port_info_all()) == 0, "Failed to close all ports in testpmd."
+ )
--
2.48.1
prev parent reply other threads:[~2025-04-24 1:48 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-14 18:20 [PATCH v1 0/2] dts: port over port_control " jspewock
2024-08-14 18:20 ` [PATCH v1 1/2] dts: add methods for closing ports to testpmd jspewock
2024-08-14 18:20 ` [PATCH v1 2/2] dts: add port control testing suite jspewock
2024-09-23 16:44 ` [PATCH v2 0/2] dts: port over port_control " jspewock
2024-09-23 16:44 ` [PATCH v2 1/2] dts: add method for closing ports to testpmd jspewock
2024-09-23 16:44 ` [PATCH v2 2/2] dts: add port control testing suite jspewock
2025-04-24 1:44 ` [PATCH 0/2] dts: port over port_control " Patrick Robb
2025-04-24 1:44 ` [PATCH 1/2] dts: add method for closing ports to testpmd Patrick Robb
2025-04-24 1:44 ` Patrick Robb [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250424014412.3849896-3-probb@iol.unh.edu \
--to=probb@iol.unh.edu \
--cc=Luca.Vizzarro@arm.com \
--cc=Paul.Szczepanek@arm.com \
--cc=dev@dpdk.org \
--cc=dmarx@iol.unh.edu \
--cc=jspewock@iol.unh.edu \
--cc=npratte@iol.unh.edu \
--cc=thomas.wilks@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).