* [nft PATCH v2 0/7] Run all test suites via 'make check'
@ 2025-08-29 15:51 Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 1/7] tests: Prepare exit codes for automake Phil Sutter
` (6 more replies)
0 siblings, 7 replies; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:51 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Help me (and maybe others) to not occasionally forget to run this or
that test suite in this or that mode: Implement "run all variants"
mode in test runners (patches 2 and 3), make sure their exit codes
match Automake expectations (patch 1) and register them with Automake
(patch 7). Also fix for running 'make check' as non-root (patches 4 and
5) and calling build test suite from outside its directory (patch 6).
Changes since v1:
- Also integrate build test suite
- Populate TESTS variable only for non-distcheck builds, so 'make
distcheck' does not run any test suite
Phil Sutter (7):
tests: Prepare exit codes for automake
tests: monitor: Support running all tests in one go
tests: py: Set default options based on RUN_FULL_TESTSUITE
tests: json_echo: Skip if run as non-root
tests: shell: Skip packetpath/nat_ftp in fake root env
tests: build: Do not assume caller's CWD
Makefile: Enable support for 'make check'
Makefile.am | 10 +++++++
configure.ac | 5 ++++
tests/build/run-tests.sh | 2 ++
tests/json_echo/run-test.py | 4 +++
tests/monitor/run-tests.sh | 34 ++++++++++++++----------
tests/py/nft-test.py | 19 +++++++++----
tests/shell/run-tests.sh | 2 +-
tests/shell/testcases/packetpath/nat_ftp | 3 +++
8 files changed, 59 insertions(+), 20 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [nft PATCH v2 1/7] tests: Prepare exit codes for automake
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
@ 2025-08-29 15:51 ` Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go Phil Sutter
` (5 subsequent siblings)
6 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:51 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Make the test suite runners exit 77 when requiring root and running as
regular user, exit 99 for internal errors (unrelated to test cases) and
exit 1 (or any free non-zero value) to indicate test failures.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/monitor/run-tests.sh | 11 ++++-------
tests/py/nft-test.py | 12 +++++++-----
tests/shell/run-tests.sh | 2 +-
3 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/tests/monitor/run-tests.sh b/tests/monitor/run-tests.sh
index 67d3e618cee07..969afe249201b 100755
--- a/tests/monitor/run-tests.sh
+++ b/tests/monitor/run-tests.sh
@@ -12,18 +12,15 @@ err() {
echo "$*" >&2
}
-die() {
- err "$*"
- exit 1
-}
-
if [ "$(id -u)" != "0" ] ; then
- die "this requires root!"
+ err "this requires root!"
+ exit 77
fi
testdir=$(mktemp -d)
if [ ! -d $testdir ]; then
- die "Failed to create test directory"
+ err "Failed to create test directory"
+ exit 99
fi
trap 'rm -rf $testdir; $nft flush ruleset' EXIT
diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
index 984f2b937a077..78f3fa9b27df7 100755
--- a/tests/py/nft-test.py
+++ b/tests/py/nft-test.py
@@ -1519,7 +1519,7 @@ def set_delete_elements(set_element, set_name, table, filename=None,
if os.getuid() != 0:
print("You need to be root to run this, sorry")
- return
+ return 77
if not args.no_netns and not spawn_netns():
print_warning("cannot run in own namespace, connectivity might break")
@@ -1538,11 +1538,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
if check_lib_path and not os.path.exists(args.library):
print("The nftables library at '%s' does not exist. "
"You need to build the project." % args.library)
- return
+ return 99
if args.enable_schema and not args.enable_json:
print_error("Option --schema requires option --json")
- return
+ return 99
global nftables
nftables = Nftables(sofile = args.library)
@@ -1555,7 +1555,7 @@ def set_delete_elements(set_element, set_name, table, filename=None,
print_info("Log will be available at %s" % LOGFILE)
except IOError:
print_error("Cannot open log file %s" % LOGFILE)
- return
+ return 99
file_list = []
if args.filenames:
@@ -1601,5 +1601,7 @@ def set_delete_elements(set_element, set_name, table, filename=None,
print("%d test files, %d files passed, %d unit tests, " % (test_files, files_ok, tests))
print("%d error, %d warning" % (errors, warnings))
+ return errors != 0
+
if __name__ == '__main__':
- main()
+ sys.exit(main())
diff --git a/tests/shell/run-tests.sh b/tests/shell/run-tests.sh
index 2d2e0ad146c80..46f523b962b13 100755
--- a/tests/shell/run-tests.sh
+++ b/tests/shell/run-tests.sh
@@ -96,7 +96,7 @@ _msg() {
printf '%s\n' "$level: $*"
fi
if [ "$level" = E ] ; then
- exit 1
+ exit 99
fi
}
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 1/7] tests: Prepare exit codes for automake Phil Sutter
@ 2025-08-29 15:51 ` Phil Sutter
2025-09-02 14:43 ` Pablo Neira Ayuso
2025-08-29 15:51 ` [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE Phil Sutter
` (4 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:51 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Detect RUN_FULL_TESTSUITE env variable set by automake and do an
"unattended" full testrun.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/monitor/run-tests.sh | 23 ++++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/tests/monitor/run-tests.sh b/tests/monitor/run-tests.sh
index 969afe249201b..b8589344a9732 100755
--- a/tests/monitor/run-tests.sh
+++ b/tests/monitor/run-tests.sh
@@ -58,7 +58,7 @@ json_output_filter() { # (filename)
monitor_run_test() {
monitor_output=$(mktemp -p $testdir)
monitor_args=""
- $test_json && monitor_args="vm json"
+ $json_mode && monitor_args="vm json"
local rc=0
$nft -nn monitor $monitor_args >$monitor_output &
@@ -77,7 +77,7 @@ monitor_run_test() {
sleep 0.5
kill $monitor_pid
wait >/dev/null 2>&1
- $test_json && json_output_filter $monitor_output
+ $json_mode && json_output_filter $monitor_output
mydiff -q $monitor_output $output_file >/dev/null 2>&1
if [[ $rc == 0 && $? != 0 ]]; then
err "monitor output differs!"
@@ -156,20 +156,29 @@ while [ -n "$1" ]; do
esac
done
-if $test_json; then
- variants="monitor"
+if [[ $RUN_FULL_TESTSUITE == 1 ]]; then
+ variants="monitor_json monitor echo"
+elif $test_json; then
+ variants="monitor_json"
else
variants="monitor echo"
fi
rc=0
for variant in $variants; do
+ orig_variant=$variant
+ if [[ $variant =~ .*_json ]]; then
+ variant=${variant%_json}
+ json_mode=true
+ else
+ json_mode=false
+ fi
run_test=${variant}_run_test
output_append=${variant}_output_append
for testcase in ${testcases:-testcases/*.t}; do
filename=$(basename $testcase)
- echo "$variant: running tests from file $filename"
+ echo "$orig_variant: running tests from file $filename"
rc_start=$rc
# files are like this:
@@ -194,11 +203,11 @@ for variant in $variants; do
;;
O)
input_complete=true
- $test_json || $output_append "$line"
+ $json_mode || $output_append "$line"
;;
J)
input_complete=true
- $test_json && $output_append "$line"
+ $json_mode && $output_append "$line"
;;
'#'|'')
# ignore comments and empty lines
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 1/7] tests: Prepare exit codes for automake Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go Phil Sutter
@ 2025-08-29 15:51 ` Phil Sutter
2025-09-02 15:33 ` Pablo Neira Ayuso
2025-08-29 15:52 ` [nft PATCH v2 4/7] tests: json_echo: Skip if run as non-root Phil Sutter
` (3 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:51 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Automake is supposed to set this for a full testrun.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/py/nft-test.py | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
index 78f3fa9b27df7..52be394c1975a 100755
--- a/tests/py/nft-test.py
+++ b/tests/py/nft-test.py
@@ -1517,6 +1517,13 @@ def set_delete_elements(set_element, set_name, table, filename=None,
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
+ try:
+ if os.environ["RUN_FULL_TESTSUITE"] != 0:
+ enable_json_option = True
+ enable_json_schema = True
+ except KeyError:
+ pass
+
if os.getuid() != 0:
print("You need to be root to run this, sorry")
return 77
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 4/7] tests: json_echo: Skip if run as non-root
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
` (2 preceding siblings ...)
2025-08-29 15:51 ` [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE Phil Sutter
@ 2025-08-29 15:52 ` Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 5/7] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
` (2 subsequent siblings)
6 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:52 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
The test suite manipulates the kernel ruleset. Use the well-known return
code 77 to indicate test execution being skipped.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/json_echo/run-test.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/json_echo/run-test.py b/tests/json_echo/run-test.py
index a6bdfc61afd7b..a3085b35ade6b 100755
--- a/tests/json_echo/run-test.py
+++ b/tests/json_echo/run-test.py
@@ -6,6 +6,10 @@ import os
import json
import argparse
+if os.getuid() != 0:
+ print("You need to be root to run this, sorry")
+ sys.exit(77)
+
TESTS_PATH = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.join(TESTS_PATH, '../../py/'))
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 5/7] tests: shell: Skip packetpath/nat_ftp in fake root env
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
` (3 preceding siblings ...)
2025-08-29 15:52 ` [nft PATCH v2 4/7] tests: json_echo: Skip if run as non-root Phil Sutter
@ 2025-08-29 15:52 ` Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 6/7] tests: build: Do not assume caller's CWD Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 7/7] Makefile: Enable support for 'make check' Phil Sutter
6 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:52 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
The script relies upon a call to modprobe which does not work in
fake root environments.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/shell/testcases/packetpath/nat_ftp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/shell/testcases/packetpath/nat_ftp b/tests/shell/testcases/packetpath/nat_ftp
index c2fb3a1c8ebcd..d0faf2ef59c57 100755
--- a/tests/shell/testcases/packetpath/nat_ftp
+++ b/tests/shell/testcases/packetpath/nat_ftp
@@ -4,6 +4,9 @@
# NFT_TEST_REQUIRES(NFT_TEST_HAVE_curl)
# NFT_TEST_REQUIRES(NFT_TEST_HAVE_vsftpd)
+# modprobe does not work in fake root env
+[ "$NFT_TEST_HAS_REALROOT" != y ] && exit 77
+
. $NFT_TEST_LIBRARY_FILE
cleanup()
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 6/7] tests: build: Do not assume caller's CWD
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
` (4 preceding siblings ...)
2025-08-29 15:52 ` [nft PATCH v2 5/7] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
@ 2025-08-29 15:52 ` Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 7/7] Makefile: Enable support for 'make check' Phil Sutter
6 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:52 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Cover for being called from a different directory by changing into the
test suite's directory first.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/build/run-tests.sh | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/build/run-tests.sh b/tests/build/run-tests.sh
index 674383cb6cc74..a5e026a97dd5b 100755
--- a/tests/build/run-tests.sh
+++ b/tests/build/run-tests.sh
@@ -1,5 +1,7 @@
#!/bin/bash
+cd $(dirname $0)
+
log_file="$(pwd)/tests.log"
dir=../..
argument=( --without-cli --with-cli=linenoise --with-cli=editline --enable-debug --with-mini-gmp
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [nft PATCH v2 7/7] Makefile: Enable support for 'make check'
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
` (5 preceding siblings ...)
2025-08-29 15:52 ` [nft PATCH v2 6/7] tests: build: Do not assume caller's CWD Phil Sutter
@ 2025-08-29 15:52 ` Phil Sutter
2025-09-02 14:45 ` Pablo Neira Ayuso
6 siblings, 1 reply; 16+ messages in thread
From: Phil Sutter @ 2025-08-29 15:52 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Add the various testsuite runners to TESTS variable and have make call
them with RUN_FULL_TESTSUITE=1 env var.
Most of the test suites require privileged execution, 'make distcheck'
usually doesn't and probably shouldn't. Assuming the latter is used
during the release process, it may even not run on a machine which is up
to date enough to generate meaningful test suite results. Hence spare
the release process from the likely pointless delay imposed by 'make
check' by keeping TESTS variable empty when in a distcheck environment.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
Changes since v1:
- Add an internal configure option set by the distcheck target when
building the project
- Have this configure option define BUILD_DISTCHECK automake variable
- Leave TESTS empty if BUILD_DISTCHECK is set to avoid test suite runs
with 'make distcheck'
---
Makefile.am | 10 ++++++++++
configure.ac | 5 +++++
2 files changed, 15 insertions(+)
diff --git a/Makefile.am b/Makefile.am
index 5190a49ae69f1..f65e8d51b501e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -23,6 +23,7 @@ libnftables_LIBVERSION = 2:0:1
###############################################################################
ACLOCAL_AMFLAGS = -I m4
+AM_DISTCHECK_CONFIGURE_FLAGS = --enable-distcheck
EXTRA_DIST =
BUILT_SOURCES =
@@ -429,3 +430,12 @@ doc_DATA = files/nftables/main.nft
tools/nftables.service: tools/nftables.service.in ${top_builddir}/config.status
${AM_V_GEN}${MKDIR_P} tools
${AM_V_at}sed -e 's|@''sbindir''@|${sbindir}|g;s|@''pkgsysconfdir''@|${pkgsysconfdir}|g' <${srcdir}/tools/nftables.service.in >$@
+
+AM_TESTS_ENVIRONMENT = RUN_FULL_TESTSUITE=1; export RUN_FULL_TESTSUITE;
+if !BUILD_DISTCHECK
+TESTS = tests/build/run-tests.sh \
+ tests/json_echo/run-test.py \
+ tests/monitor/run-tests.sh \
+ tests/py/nft-test.py \
+ tests/shell/run-tests.sh
+endif
diff --git a/configure.ac b/configure.ac
index da16a6e257c91..8073d4d8193e2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -155,6 +155,11 @@ AC_CONFIG_COMMANDS([nftversion.h], [
AC_SUBST([MAKE_STAMP], ["\$(shell date +%s)"])
CFLAGS="${CFLAGS} -DMAKE_STAMP=\${MAKE_STAMP}"
+AC_ARG_ENABLE([distcheck],
+ AS_HELP_STRING([--enable-distcheck], [Build for distcheck]),
+ [enable_distcheck=yes], [])
+AM_CONDITIONAL([BUILD_DISTCHECK], [test "x$enable_distcheck" = "xyes"])
+
AC_CONFIG_FILES([ \
Makefile \
libnftables.pc \
--
2.51.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go
2025-08-29 15:51 ` [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go Phil Sutter
@ 2025-09-02 14:43 ` Pablo Neira Ayuso
2025-09-03 11:04 ` Phil Sutter
0 siblings, 1 reply; 16+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-02 14:43 UTC (permalink / raw)
To: Phil Sutter; +Cc: netfilter-devel
On Fri, Aug 29, 2025 at 05:51:58PM +0200, Phil Sutter wrote:
> Detect RUN_FULL_TESTSUITE env variable set by automake and do an
> "unattended" full testrun.
This test is so small that I think it is better to enable both modes:
w/json and w/o json by default.
> Signed-off-by: Phil Sutter <phil@nwl.cc>
> ---
> tests/monitor/run-tests.sh | 23 ++++++++++++++++-------
> 1 file changed, 16 insertions(+), 7 deletions(-)
>
> diff --git a/tests/monitor/run-tests.sh b/tests/monitor/run-tests.sh
> index 969afe249201b..b8589344a9732 100755
> --- a/tests/monitor/run-tests.sh
> +++ b/tests/monitor/run-tests.sh
> @@ -58,7 +58,7 @@ json_output_filter() { # (filename)
> monitor_run_test() {
> monitor_output=$(mktemp -p $testdir)
> monitor_args=""
> - $test_json && monitor_args="vm json"
> + $json_mode && monitor_args="vm json"
> local rc=0
>
> $nft -nn monitor $monitor_args >$monitor_output &
> @@ -77,7 +77,7 @@ monitor_run_test() {
> sleep 0.5
> kill $monitor_pid
> wait >/dev/null 2>&1
> - $test_json && json_output_filter $monitor_output
> + $json_mode && json_output_filter $monitor_output
> mydiff -q $monitor_output $output_file >/dev/null 2>&1
> if [[ $rc == 0 && $? != 0 ]]; then
> err "monitor output differs!"
> @@ -156,20 +156,29 @@ while [ -n "$1" ]; do
> esac
> done
>
> -if $test_json; then
> - variants="monitor"
> +if [[ $RUN_FULL_TESTSUITE == 1 ]]; then
> + variants="monitor_json monitor echo"
> +elif $test_json; then
> + variants="monitor_json"
> else
> variants="monitor echo"
> fi
>
> rc=0
> for variant in $variants; do
> + orig_variant=$variant
> + if [[ $variant =~ .*_json ]]; then
> + variant=${variant%_json}
> + json_mode=true
> + else
> + json_mode=false
> + fi
> run_test=${variant}_run_test
> output_append=${variant}_output_append
>
> for testcase in ${testcases:-testcases/*.t}; do
> filename=$(basename $testcase)
> - echo "$variant: running tests from file $filename"
> + echo "$orig_variant: running tests from file $filename"
> rc_start=$rc
>
> # files are like this:
> @@ -194,11 +203,11 @@ for variant in $variants; do
> ;;
> O)
> input_complete=true
> - $test_json || $output_append "$line"
> + $json_mode || $output_append "$line"
> ;;
> J)
> input_complete=true
> - $test_json && $output_append "$line"
> + $json_mode && $output_append "$line"
> ;;
> '#'|'')
> # ignore comments and empty lines
> --
> 2.51.0
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 7/7] Makefile: Enable support for 'make check'
2025-08-29 15:52 ` [nft PATCH v2 7/7] Makefile: Enable support for 'make check' Phil Sutter
@ 2025-09-02 14:45 ` Pablo Neira Ayuso
2025-09-03 11:06 ` Phil Sutter
0 siblings, 1 reply; 16+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-02 14:45 UTC (permalink / raw)
To: Phil Sutter; +Cc: netfilter-devel
On Fri, Aug 29, 2025 at 05:52:03PM +0200, Phil Sutter wrote:
> Add the various testsuite runners to TESTS variable and have make call
> them with RUN_FULL_TESTSUITE=1 env var.
Given you add a env var for every test, would you instead use
distcheck-hook: in Makefile.am to short circuit the test run and
display SKIPPED?
> Most of the test suites require privileged execution, 'make distcheck'
> usually doesn't and probably shouldn't. Assuming the latter is used
> during the release process, it may even not run on a machine which is up
> to date enough to generate meaningful test suite results. Hence spare
> the release process from the likely pointless delay imposed by 'make
> check' by keeping TESTS variable empty when in a distcheck environment.
>
> Signed-off-by: Phil Sutter <phil@nwl.cc>
> ---
> Changes since v1:
> - Add an internal configure option set by the distcheck target when
> building the project
> - Have this configure option define BUILD_DISTCHECK automake variable
> - Leave TESTS empty if BUILD_DISTCHECK is set to avoid test suite runs
> with 'make distcheck'
> ---
> Makefile.am | 10 ++++++++++
> configure.ac | 5 +++++
> 2 files changed, 15 insertions(+)
>
> diff --git a/Makefile.am b/Makefile.am
> index 5190a49ae69f1..f65e8d51b501e 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -23,6 +23,7 @@ libnftables_LIBVERSION = 2:0:1
> ###############################################################################
>
> ACLOCAL_AMFLAGS = -I m4
> +AM_DISTCHECK_CONFIGURE_FLAGS = --enable-distcheck
>
> EXTRA_DIST =
> BUILT_SOURCES =
> @@ -429,3 +430,12 @@ doc_DATA = files/nftables/main.nft
> tools/nftables.service: tools/nftables.service.in ${top_builddir}/config.status
> ${AM_V_GEN}${MKDIR_P} tools
> ${AM_V_at}sed -e 's|@''sbindir''@|${sbindir}|g;s|@''pkgsysconfdir''@|${pkgsysconfdir}|g' <${srcdir}/tools/nftables.service.in >$@
> +
> +AM_TESTS_ENVIRONMENT = RUN_FULL_TESTSUITE=1; export RUN_FULL_TESTSUITE;
> +if !BUILD_DISTCHECK
> +TESTS = tests/build/run-tests.sh \
> + tests/json_echo/run-test.py \
> + tests/monitor/run-tests.sh \
> + tests/py/nft-test.py \
> + tests/shell/run-tests.sh
> +endif
> diff --git a/configure.ac b/configure.ac
> index da16a6e257c91..8073d4d8193e2 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -155,6 +155,11 @@ AC_CONFIG_COMMANDS([nftversion.h], [
> AC_SUBST([MAKE_STAMP], ["\$(shell date +%s)"])
> CFLAGS="${CFLAGS} -DMAKE_STAMP=\${MAKE_STAMP}"
>
> +AC_ARG_ENABLE([distcheck],
> + AS_HELP_STRING([--enable-distcheck], [Build for distcheck]),
> + [enable_distcheck=yes], [])
> +AM_CONDITIONAL([BUILD_DISTCHECK], [test "x$enable_distcheck" = "xyes"])
> +
> AC_CONFIG_FILES([ \
> Makefile \
> libnftables.pc \
> --
> 2.51.0
>
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE
2025-08-29 15:51 ` [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE Phil Sutter
@ 2025-09-02 15:33 ` Pablo Neira Ayuso
2025-09-03 11:13 ` Phil Sutter
0 siblings, 1 reply; 16+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-02 15:33 UTC (permalink / raw)
To: Phil Sutter; +Cc: netfilter-devel
On Fri, Aug 29, 2025 at 05:51:59PM +0200, Phil Sutter wrote:
> Automake is supposed to set this for a full testrun.
>
> Signed-off-by: Phil Sutter <phil@nwl.cc>
> ---
> tests/py/nft-test.py | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> index 78f3fa9b27df7..52be394c1975a 100755
> --- a/tests/py/nft-test.py
> +++ b/tests/py/nft-test.py
> @@ -1517,6 +1517,13 @@ def set_delete_elements(set_element, set_name, table, filename=None,
> signal.signal(signal.SIGINT, signal_handler)
> signal.signal(signal.SIGTERM, signal_handler)
>
> + try:
> + if os.environ["RUN_FULL_TESTSUITE"] != 0:
> + enable_json_option = True
> + enable_json_schema = True
> + except KeyError:
> + pass
I would revisit options for tests to:
1) Run all tests by default, ie. native syntax and json.
2) Add options to run native syntax (-pick-one-here) and json test only (-j).
Option 1) (default) will be fine for make check... and CI in general.
Option 2) will be only useful for development, for troubleshooting
broken tests.
Then, add the env variable to shortcircuit tests with distcheck-hook:
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go
2025-09-02 14:43 ` Pablo Neira Ayuso
@ 2025-09-03 11:04 ` Phil Sutter
0 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-09-03 11:04 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Tue, Sep 02, 2025 at 04:43:59PM +0200, Pablo Neira Ayuso wrote:
> On Fri, Aug 29, 2025 at 05:51:58PM +0200, Phil Sutter wrote:
> > Detect RUN_FULL_TESTSUITE env variable set by automake and do an
> > "unattended" full testrun.
>
> This test is so small that I think it is better to enable both modes:
> w/json and w/o json by default.
ACK, good point. I just investigated and it is feasible to use the
stored JSON output for testing '--echo --json' as well. So I can extend
the test suite to test echo and monitor mode for both standard and JSON
syntax.
Thanks, Phil
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 7/7] Makefile: Enable support for 'make check'
2025-09-02 14:45 ` Pablo Neira Ayuso
@ 2025-09-03 11:06 ` Phil Sutter
2025-09-03 11:11 ` Pablo Neira Ayuso
0 siblings, 1 reply; 16+ messages in thread
From: Phil Sutter @ 2025-09-03 11:06 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Tue, Sep 02, 2025 at 04:45:43PM +0200, Pablo Neira Ayuso wrote:
> On Fri, Aug 29, 2025 at 05:52:03PM +0200, Phil Sutter wrote:
> > Add the various testsuite runners to TESTS variable and have make call
> > them with RUN_FULL_TESTSUITE=1 env var.
>
> Given you add a env var for every test, would you instead use
> distcheck-hook: in Makefile.am to short circuit the test run and
> display SKIPPED?
I don't follow, sorry. The RUN_FULL_TESTSUITE variable is merely used to
enable "run all variants"-mode in test suites. Test suites are skipped
only if they require root and caller is not - one may still run 'make
check' as root or not, irrespective of the hack to leave 'make
distcheck' alone.
Cheers, Phil
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 7/7] Makefile: Enable support for 'make check'
2025-09-03 11:06 ` Phil Sutter
@ 2025-09-03 11:11 ` Pablo Neira Ayuso
2025-09-03 11:17 ` Phil Sutter
0 siblings, 1 reply; 16+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-03 11:11 UTC (permalink / raw)
To: Phil Sutter, netfilter-devel
On Wed, Sep 03, 2025 at 01:06:43PM +0200, Phil Sutter wrote:
> On Tue, Sep 02, 2025 at 04:45:43PM +0200, Pablo Neira Ayuso wrote:
> > On Fri, Aug 29, 2025 at 05:52:03PM +0200, Phil Sutter wrote:
> > > Add the various testsuite runners to TESTS variable and have make call
> > > them with RUN_FULL_TESTSUITE=1 env var.
> >
> > Given you add a env var for every test, would you instead use
> > distcheck-hook: in Makefile.am to short circuit the test run and
> > display SKIPPED?
>
> I don't follow, sorry. The RUN_FULL_TESTSUITE variable is merely used to
> enable "run all variants"-mode in test suites.
For make check, I think tests should be updated to run all variants by
default. Then provide options to run independent variants.
> Test suites are skipped only if they require root and caller is not
> - one may still run 'make check' as root or not, irrespective of the
> hack to leave 'make distcheck' alone.
Right, I call diskcheck as non-root.
Maybe we can just skip tests for non-root when make check is called.
If the tests are updated to run all variants by default, then
RUN_FULL_TESTSUITE is not needed.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE
2025-09-02 15:33 ` Pablo Neira Ayuso
@ 2025-09-03 11:13 ` Phil Sutter
0 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-09-03 11:13 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Tue, Sep 02, 2025 at 05:33:34PM +0200, Pablo Neira Ayuso wrote:
> On Fri, Aug 29, 2025 at 05:51:59PM +0200, Phil Sutter wrote:
> > Automake is supposed to set this for a full testrun.
> >
> > Signed-off-by: Phil Sutter <phil@nwl.cc>
> > ---
> > tests/py/nft-test.py | 7 +++++++
> > 1 file changed, 7 insertions(+)
> >
> > diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> > index 78f3fa9b27df7..52be394c1975a 100755
> > --- a/tests/py/nft-test.py
> > +++ b/tests/py/nft-test.py
> > @@ -1517,6 +1517,13 @@ def set_delete_elements(set_element, set_name, table, filename=None,
> > signal.signal(signal.SIGINT, signal_handler)
> > signal.signal(signal.SIGTERM, signal_handler)
> >
> > + try:
> > + if os.environ["RUN_FULL_TESTSUITE"] != 0:
> > + enable_json_option = True
> > + enable_json_schema = True
> > + except KeyError:
> > + pass
>
> I would revisit options for tests to:
>
> 1) Run all tests by default, ie. native syntax and json.
> 2) Add options to run native syntax (-pick-one-here) and json test only (-j).
Ah, that's indeed a sensible measure - I did the same for
iptables-test.py and the nice side-effect is that adding a new test-mode
won't require education for callers, they just run it as well.
>
> Option 1) (default) will be fine for make check... and CI in general.
> Option 2) will be only useful for development, for troubleshooting
> broken tests.
>
> Then, add the env variable to shortcircuit tests with distcheck-hook:
The interesting part is missing here. ;)
I didn't find a better way to avoid test suite runs from 'make
distcheck' while retaining 'make check'.
Cheers, Phil
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [nft PATCH v2 7/7] Makefile: Enable support for 'make check'
2025-09-03 11:11 ` Pablo Neira Ayuso
@ 2025-09-03 11:17 ` Phil Sutter
0 siblings, 0 replies; 16+ messages in thread
From: Phil Sutter @ 2025-09-03 11:17 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Wed, Sep 03, 2025 at 01:11:15PM +0200, Pablo Neira Ayuso wrote:
> On Wed, Sep 03, 2025 at 01:06:43PM +0200, Phil Sutter wrote:
> > On Tue, Sep 02, 2025 at 04:45:43PM +0200, Pablo Neira Ayuso wrote:
> > > On Fri, Aug 29, 2025 at 05:52:03PM +0200, Phil Sutter wrote:
> > > > Add the various testsuite runners to TESTS variable and have make call
> > > > them with RUN_FULL_TESTSUITE=1 env var.
> > >
> > > Given you add a env var for every test, would you instead use
> > > distcheck-hook: in Makefile.am to short circuit the test run and
> > > display SKIPPED?
> >
> > I don't follow, sorry. The RUN_FULL_TESTSUITE variable is merely used to
> > enable "run all variants"-mode in test suites.
>
> For make check, I think tests should be updated to run all variants by
> default. Then provide options to run independent variants.
>
> > Test suites are skipped only if they require root and caller is not
> > - one may still run 'make check' as root or not, irrespective of the
> > hack to leave 'make distcheck' alone.
>
> Right, I call diskcheck as non-root.
>
> Maybe we can just skip tests for non-root when make check is called.
I had considered this, but dropping the fakeroot functionality from
shell test suite just for that feels wrong (and is pretty tedious as
well). Keeping it, letting 'make check' run as much as possible and
making sure 'make distcheck' remains unaffected is a cleaner solution
IMO.
> If the tests are updated to run all variants by default, then
> RUN_FULL_TESTSUITE is not needed.
ACK, I'll work on that. It will also improve live for non-"make check"
users.
Thanks, Phil
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2025-09-03 11:17 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-29 15:51 [nft PATCH v2 0/7] Run all test suites via 'make check' Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 1/7] tests: Prepare exit codes for automake Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 2/7] tests: monitor: Support running all tests in one go Phil Sutter
2025-09-02 14:43 ` Pablo Neira Ayuso
2025-09-03 11:04 ` Phil Sutter
2025-08-29 15:51 ` [nft PATCH v2 3/7] tests: py: Set default options based on RUN_FULL_TESTSUITE Phil Sutter
2025-09-02 15:33 ` Pablo Neira Ayuso
2025-09-03 11:13 ` Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 4/7] tests: json_echo: Skip if run as non-root Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 5/7] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 6/7] tests: build: Do not assume caller's CWD Phil Sutter
2025-08-29 15:52 ` [nft PATCH v2 7/7] Makefile: Enable support for 'make check' Phil Sutter
2025-09-02 14:45 ` Pablo Neira Ayuso
2025-09-03 11:06 ` Phil Sutter
2025-09-03 11:11 ` Pablo Neira Ayuso
2025-09-03 11:17 ` Phil Sutter
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).