[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