[Buildroot] [PATCH v4 3/3] RFC: support/testing: add grout runtime test
Maxime Leroy
maxime at leroys.fr
Thu Apr 3 15:39:50 UTC 2025
This adds a runtime test for Grout, inspired by test_dpdk.py.
It uses the smoke test normally used to validate development on Grout.
The smoke test are copied into the image by enabled the new option
BR2_PACKAGE_GROUT_TESTS.
Signed-off-by: Maxime Leroy <maxime at leroys.fr>
---
DEVELOPERS | 1 +
package/grout/Config.in | 24 +++++++++++
package/grout/grout.mk | 15 +++++++
support/testing/tests/package/test_grout.py | 47 +++++++++++++++++++++
4 files changed, 87 insertions(+)
create mode 100644 support/testing/tests/package/test_grout.py
diff --git a/DEVELOPERS b/DEVELOPERS
index 1cbbf829c5..baec4959fc 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -2386,6 +2386,7 @@ F: package/linux-tools/linux-tool-rtla.mk.in
N: Maxime Leroy <maxime at leroys.fr>
F: package/grout
+F: support/testing/tests/package/test_grout.py
N: Meena Murthy <meena.murthy at amarulasolutions.com>
F: board/engicam/px30core/
diff --git a/package/grout/Config.in b/package/grout/Config.in
index a39c3283eb..5e39697665 100644
--- a/package/grout/Config.in
+++ b/package/grout/Config.in
@@ -11,3 +11,27 @@ config BR2_PACKAGE_GROUT
Graph router based on DPDK
NOTE: grout needs a working UTF-8 locale (BR2_GENERATE_LOCALE)
+
+if BR2_PACKAGE_GROUT
+
+config BR2_PACKAGE_GROUT_TESTS
+ bool "Install tests"
+ select BR2_PACKAGE_BASH
+ select BR2_PACKAGE_BUSYBOX_SHOW_OTHERS if BR2_PACKAGE_BUSYBOX
+ select BR2_PACKAGE_IPUTILS
+ select BR2_PACKAGE_IPUTILS_PING
+ select BR2_PACKAGE_SOCAT
+ select BR2_PACKAGE_IPROUTE2
+ select BR2_PACKAGE_TRACEROUTE
+ select BR2_PACKAGE_NDISC6
+ select BR2_PACKAGE_NDISC6_RDISC6
+ select BR2_PACKAGE_UTIL_LINUX
+ select BR2_PACKAGE_UTIL_LINUX_SCHEDUTILS
+
+ help
+ Install smoke tests.
+
+ These tests check basic functionality like packet forwarding,
+ SRv6, VLAN, ICMP, etc.
+
+endif
diff --git a/package/grout/grout.mk b/package/grout/grout.mk
index a75af27978..702249668f 100644
--- a/package/grout/grout.mk
+++ b/package/grout/grout.mk
@@ -21,4 +21,19 @@ GROUT_DEPENDENCIES = \
libecoli \
util-linux
+ifeq ($(BR2_PACKAGE_GROUT_TESTS),y)
+define GROUT_INSTALL_TEST_SCRIPTS
+ $(INSTALL) -d $(TARGET_DIR)/usr/share/grout-test/
+ $(INSTALL) -D -m 0755 $(@D)/smoke/*.sh $(TARGET_DIR)/usr/share/grout-test
+endef
+GROUT_POST_INSTALL_TARGET_HOOKS += GROUT_INSTALL_TEST_SCRIPTS
+
+define GROUT_LINUX_CONFIG_FIXUPS
+ $(call KCONFIG_ENABLE_OPT,CONFIG_VLAN_8021Q)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_NET_IPIP)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_IPV6_SEG6_LWTUNNEL)
+ $(call KCONFIG_ENABLE_OPT,CONFIG_TUN)
+endef
+endif
+
$(eval $(meson-package))
diff --git a/support/testing/tests/package/test_grout.py b/support/testing/tests/package/test_grout.py
new file mode 100644
index 0000000000..f14e481c52
--- /dev/null
+++ b/support/testing/tests/package/test_grout.py
@@ -0,0 +1,47 @@
+import os
+
+import infra.basetest
+
+
+class TestGrout(infra.basetest.BRTest):
+ config = \
+ """
+ BR2_x86_64=y
+ BR2_x86_nehalem=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.13.8"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config"
+ BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
+ BR2_PACKAGE_DPDK=y
+ BR2_ENABLE_LOCALE=y
+ BR2_ENABLE_LOCALE_WHITELIST="C.UTF-8"
+ BR2_GENERATE_LOCALE="C.UTF-8"
+ BR2_PACKAGE_GROUT=y
+ BR2_PACKAGE_GROUT_TESTS=y
+ BR2_TARGET_ROOTFS_EXT2=y
+ BR2_TARGET_ROOTFS_EXT2_SIZE="300M"
+ # BR2_TARGET_ROOTFS_TAR is not set
+ """
+
+ def test_run(self):
+ img = os.path.join(self.builddir, "images", "rootfs.ext2")
+ kern = os.path.join(self.builddir, "images", "bzImage")
+ self.emulator.boot(arch="x86_64",
+ kernel=kern,
+ kernel_cmdline=["root=/dev/vda", "console=ttyS0"],
+ options=["-cpu", "Nehalem", "-m", "2G",
+ "-smp", "6",
+ "-device", "virtio-rng-pci",
+ "-drive", f"file={img},format=raw,if=virtio",
+ "-net", "nic,model=virtio",
+ "-net", "user"])
+ self.emulator.login()
+
+ # Remove graph, no needs to check we can generate svg (only for developpement)
+ self.assertRunOk("rm /usr/share/grout-test/graph_svg_test.sh")
+
+ # Run smoke tests
+ self.assertRunOk("/usr/share/grout-test/run.sh .", timeout=600)
--
2.43.0
More information about the buildroot
mailing list