* [nft PATCH v4 0/8] Run all test suites via 'make check'
@ 2025-09-04 15:24 Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 1/8] tests: monitor: Excercise all syntaxes and variants by default Phil Sutter
` (8 more replies)
0 siblings, 9 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 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:
Have test suites execute all variants by default (patches 1 and 2), make
sure their exit codes match Automake expectations (patch 3) and register
them with Automake (patch 8). Also fix for running 'make check' as
non-root (patches 4 and 5) and calling build test suite from outside its
directory (patch 6).
There is a "funny" problem with build test suite calling 'make
distcheck' which behaves differently under the environment polluted by
the calling 'make check' invocation, details in patch 7.
Changes since v3:
- Applied the initial monitor test suite enhancements already
- gitignore generated logs and reports
- New patch 7
Changes since v2:
- Drop the need for RUN_FULL_TESTSUITE env var by making the "all
variants" mode the default in all test suites
- Implement JSON echo testing into monitor test suite, stored JSON
output matches echo output after minor adjustment
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 (8):
tests: monitor: Excercise all syntaxes and variants by default
tests: py: Enable JSON and JSON schema by default
tests: Prepare exit codes for automake
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
tests: build: Avoid a recursive 'make check' run
Makefile: Enable support for 'make check'
.gitignore | 13 ++
Makefile.am | 9 ++
configure.ac | 5 +
tests/build/run-tests.sh | 6 +
tests/json_echo/run-test.py | 4 +
tests/monitor/run-tests.sh | 145 +++++++++++++----------
tests/py/nft-test.py | 28 +++--
tests/shell/run-tests.sh | 2 +-
tests/shell/testcases/packetpath/nat_ftp | 3 +
9 files changed, 143 insertions(+), 72 deletions(-)
--
2.51.0
^ permalink raw reply [flat|nested] 14+ messages in thread
* [nft PATCH v4 1/8] tests: monitor: Excercise all syntaxes and variants by default
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema " Phil Sutter
` (7 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Introduce -s/--standard flag to restrict execution to standard syntax
and let users select a specific variant by means of -e/--echo and
-m/--monitor flags. Run all four possible combinations by default.
To keep indenting sane, introduce run_testcase() executing tests in a
single test case for a given syntax and variant.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/monitor/run-tests.sh | 134 ++++++++++++++++++++++---------------
1 file changed, 79 insertions(+), 55 deletions(-)
diff --git a/tests/monitor/run-tests.sh b/tests/monitor/run-tests.sh
index b09b72ae034cb..32b1b86e0cc6e 100755
--- a/tests/monitor/run-tests.sh
+++ b/tests/monitor/run-tests.sh
@@ -154,14 +154,28 @@ if $netns; then
fi
testcases=""
+variants=""
+syntaxes=""
while [ -n "$1" ]; do
case "$1" in
-d|--debug)
debug=true
shift
;;
+ -s|--standard)
+ syntaxes+=" standard"
+ shift
+ ;;
-j|--json)
- test_json=true
+ syntaxes+=" json"
+ shift
+ ;;
+ -e|--echo)
+ variants+=" echo"
+ shift
+ ;;
+ -m|--monitor)
+ variants+=" monitor"
shift
;;
--no-netns)
@@ -179,64 +193,74 @@ while [ -n "$1" ]; do
echo "unknown option '$1'"
;&
-h|--help)
- echo "Usage: $(basename $0) [-j|--json] [-d|--debug] [testcase ...]"
+ echo "Usage: $(basename $0) [(-e|--echo)|(-m|--monitor)] [(-j|--json)|(-s|--standard)] [-d|--debug] [testcase ...]"
exit 1
;;
esac
done
-variants="monitor echo"
-rc=0
-for variant in $variants; do
- 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"
- rc_start=$rc
-
- # files are like this:
- #
- # I add table ip t
- # O add table ip t
- # I add chain ip t c
- # O add chain ip t c
-
- $nft flush ruleset
-
- input_complete=false
- while read dir line; do
- case $dir in
- I)
- $input_complete && {
- $run_test
- let "rc += $?"
- }
- input_complete=false
- cmd_append "$line"
- ;;
- O)
- input_complete=true
- $test_json || $output_append "$line"
- ;;
- J)
- input_complete=true
- $test_json && $output_append "$line"
- ;;
- '#'|'')
- # ignore comments and empty lines
- ;;
- esac
- done <$testcase
- $input_complete && {
- $run_test
- let "rc += $?"
- }
-
- let "rc_diff = rc - rc_start"
- [[ $rc_diff -ne 0 ]] && \
- echo "$variant: $rc_diff tests from file $filename failed"
+# run the single test in $1
+# expect $variant and $test_json to be set appropriately
+run_testcase() {
+ testcase="$1"
+ filename=$(basename $testcase)
+ rc=0
+ $test_json && printf "json-"
+ echo "$variant: running tests from file $filename"
+
+ # files are like this:
+ #
+ # I add table ip t
+ # O add table ip t
+ # I add chain ip t c
+ # O add chain ip t c
+
+ $nft flush ruleset
+
+ input_complete=false
+ while read dir line; do
+ case $dir in
+ I)
+ $input_complete && {
+ ${variant}_run_test
+ $run_test
+ let "rc += $?"
+ }
+ input_complete=false
+ cmd_append "$line"
+ ;;
+ O)
+ input_complete=true
+ $test_json || ${variant}_output_append "$line"
+ ;;
+ J)
+ input_complete=true
+ $test_json && ${variant}_output_append "$line"
+ ;;
+ '#'|'')
+ # ignore comments and empty lines
+ ;;
+ esac
+ done <$testcase
+ $input_complete && {
+ ${variant}_run_test
+ let "rc += $?"
+ }
+
+ [[ $rc -ne 0 ]] && \
+ echo "$variant: $rc tests from file $filename failed"
+ return $rc
+}
+
+total_rc=0
+for syntax in ${syntaxes:-standard json}; do
+ [ $syntax == json ] && test_json=true || test_json=false
+ for variant in ${variants:-echo monitor}; do
+ for testcase in ${testcases:-testcases/*.t}; do
+ run_testcase "$testcase"
+ let "total_rc += $?"
+ done
done
done
-exit $rc
+
+exit $total_rc
--
2.51.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema by default
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 1/8] tests: monitor: Excercise all syntaxes and variants by default Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:29 ` Pablo Neira Ayuso
2025-09-04 15:24 ` [nft PATCH v4 3/8] tests: Prepare exit codes for automake Phil Sutter
` (6 subsequent siblings)
8 siblings, 1 reply; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
Introduce -J/--disable-json and -S/--no-schema to explicitly disable
them if desired.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/py/nft-test.py | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
index 984f2b937a077..12c6174b01257 100755
--- a/tests/py/nft-test.py
+++ b/tests/py/nft-test.py
@@ -1488,7 +1488,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
parser.add_argument('-j', '--enable-json', action='store_true',
dest='enable_json',
- help='test JSON functionality as well')
+ help='test JSON functionality as well (default)')
+
+ parser.add_argument('-J', '--disable-json', action='store_true',
+ dest='disable_json',
+ help='Do not test JSON functionality as well')
parser.add_argument('-l', '--library', default=None,
help='path to libntables.so.1, overrides --host')
@@ -1499,7 +1503,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
parser.add_argument('-s', '--schema', action='store_true',
dest='enable_schema',
- help='verify json input/output against schema')
+ help='verify json input/output against schema (default)')
+
+ parser.add_argument('-S', '--no-schema', action='store_true',
+ dest='disable_schema',
+ help='Do not verify json input/output against schema')
parser.add_argument('-v', '--version', action='version',
version='1.0',
@@ -1510,8 +1518,8 @@ def set_delete_elements(set_element, set_name, table, filename=None,
debug_option = args.debug
need_fix_option = args.need_fix_line
force_all_family_option = args.force_all_family
- enable_json_option = args.enable_json
- enable_json_schema = args.enable_schema
+ enable_json_option = not args.disable_json
+ enable_json_schema = not args.disable_json and not args.disable_schema
specific_file = False
signal.signal(signal.SIGINT, signal_handler)
--
2.51.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [nft PATCH v4 3/8] tests: Prepare exit codes for automake
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 1/8] tests: monitor: Excercise all syntaxes and variants by default Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema " Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 4/8] tests: json_echo: Skip if run as non-root Phil Sutter
` (5 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 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 32b1b86e0cc6e..44f21a285b17c 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 12c6174b01257..35b29fc90870b 100755
--- a/tests/py/nft-test.py
+++ b/tests/py/nft-test.py
@@ -1527,7 +1527,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")
@@ -1546,11 +1546,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)
@@ -1563,7 +1563,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:
@@ -1609,5 +1609,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] 14+ messages in thread
* [nft PATCH v4 4/8] tests: json_echo: Skip if run as non-root
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (2 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 3/8] tests: Prepare exit codes for automake Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 5/8] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
` (4 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 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] 14+ messages in thread
* [nft PATCH v4 5/8] tests: shell: Skip packetpath/nat_ftp in fake root env
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (3 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 4/8] tests: json_echo: Skip if run as non-root Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 6/8] tests: build: Do not assume caller's CWD Phil Sutter
` (3 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 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] 14+ messages in thread
* [nft PATCH v4 6/8] tests: build: Do not assume caller's CWD
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (4 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 5/8] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 7/8] tests: build: Avoid a recursive 'make check' run Phil Sutter
` (2 subsequent siblings)
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 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] 14+ messages in thread
* [nft PATCH v4 7/8] tests: build: Avoid a recursive 'make check' run
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (5 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 6/8] tests: build: Do not assume caller's CWD Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 8/8] Makefile: Enable support for 'make check' Phil Sutter
2025-09-11 16:14 ` [nft PATCH v4 0/8] Run all test suites via " Phil Sutter
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
When called by 'make check', the test suite runs with a MAKEFLAGS
variable in environment which defines TEST_LOGS variable with the test
suites' corresponding logs as value. This in turn causes the called
'make distcheck' to run test suites although it is not supposed to.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/build/run-tests.sh | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/build/run-tests.sh b/tests/build/run-tests.sh
index a5e026a97dd5b..80fa10168d003 100755
--- a/tests/build/run-tests.sh
+++ b/tests/build/run-tests.sh
@@ -20,6 +20,10 @@ fi
git clone "$dir" "$tmpdir" &>>"$log_file"
cd "$tmpdir" || exit
+# do not leak data from a calling 'make check' run into the new build otherwise
+# this will defeat the test suite invocation prevention for 'make distcheck'
+unset MAKEFLAGS
+
if ! autoreconf -fi &>>"$log_file" ; then
echo "Something went wrong. Check the log '${log_file}' for details."
exit 1
--
2.51.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [nft PATCH v4 8/8] Makefile: Enable support for 'make check'
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (6 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 7/8] tests: build: Avoid a recursive 'make check' run Phil Sutter
@ 2025-09-04 15:24 ` Phil Sutter
2025-09-11 16:14 ` [nft PATCH v4 0/8] Run all test suites via " Phil Sutter
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 15:24 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
With all test suites running all variants by default, add the various
testsuite runners to TESTS variable so 'make check' will execute them.
Introduce --enable-distcheck configure flag for internal use during
builds triggered by 'make distcheck'. This flag will force TESTS
variable to remain empty, so 'make check' run as part of distcheck will
not call any test suite: 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'.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
Changes since v3:
- gitignore 'make check' generated logs and reports
Changes since v2:
- Drop RUN_FULL_TESTSUITE env var, it is not needed anymore
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'
---
.gitignore | 13 +++++++++++++
Makefile.am | 9 +++++++++
configure.ac | 5 +++++
3 files changed, 27 insertions(+)
diff --git a/.gitignore b/.gitignore
index 1e3bc5146b2f1..db329eafa5298 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,6 +23,19 @@ nftversion.h
*.payload.got
tests/build/tests.log
+# make check results
+/test-suite.log
+/tests/build/run-tests.sh.log
+/tests/build/run-tests.sh.trs
+/tests/json_echo/run-test.py.log
+/tests/json_echo/run-test.py.trs
+/tests/monitor/run-tests.sh.log
+/tests/monitor/run-tests.sh.trs
+/tests/py/nft-test.py.log
+/tests/py/nft-test.py.trs
+/tests/shell/run-tests.sh.log
+/tests/shell/run-tests.sh.trs
+
# Debian package build temporary files
build-stamp
diff --git a/Makefile.am b/Makefile.am
index 5190a49ae69f1..9112faa2d5c04 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,11 @@ 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 >$@
+
+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] 14+ messages in thread
* Re: [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema by default
2025-09-04 15:24 ` [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema " Phil Sutter
@ 2025-09-04 15:29 ` Pablo Neira Ayuso
2025-09-04 16:13 ` Phil Sutter
0 siblings, 1 reply; 14+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-04 15:29 UTC (permalink / raw)
To: Phil Sutter; +Cc: netfilter-devel
On Thu, Sep 04, 2025 at 05:24:48PM +0200, Phil Sutter wrote:
> Introduce -J/--disable-json and -S/--no-schema to explicitly disable
> them if desired.
>
> Signed-off-by: Phil Sutter <phil@nwl.cc>
> ---
> tests/py/nft-test.py | 16 ++++++++++++----
> 1 file changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> index 984f2b937a077..12c6174b01257 100755
> --- a/tests/py/nft-test.py
> +++ b/tests/py/nft-test.py
> @@ -1488,7 +1488,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
>
> parser.add_argument('-j', '--enable-json', action='store_true',
> dest='enable_json',
> - help='test JSON functionality as well')
> + help='test JSON functionality as well (default)')
> +
> + parser.add_argument('-J', '--disable-json', action='store_true',
> + dest='disable_json',
> + help='Do not test JSON functionality as well')
Would it be possible to have common options to the different tests?
1/8 uses -s and -j.
I am not sure we have to worry about breaking backward for test
syntax, we only run this.
Thanks.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema by default
2025-09-04 15:29 ` Pablo Neira Ayuso
@ 2025-09-04 16:13 ` Phil Sutter
2025-09-04 16:56 ` Pablo Neira Ayuso
0 siblings, 1 reply; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 16:13 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Thu, Sep 04, 2025 at 05:29:54PM +0200, Pablo Neira Ayuso wrote:
> On Thu, Sep 04, 2025 at 05:24:48PM +0200, Phil Sutter wrote:
> > Introduce -J/--disable-json and -S/--no-schema to explicitly disable
> > them if desired.
> >
> > Signed-off-by: Phil Sutter <phil@nwl.cc>
> > ---
> > tests/py/nft-test.py | 16 ++++++++++++----
> > 1 file changed, 12 insertions(+), 4 deletions(-)
> >
> > diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> > index 984f2b937a077..12c6174b01257 100755
> > --- a/tests/py/nft-test.py
> > +++ b/tests/py/nft-test.py
> > @@ -1488,7 +1488,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
> >
> > parser.add_argument('-j', '--enable-json', action='store_true',
> > dest='enable_json',
> > - help='test JSON functionality as well')
> > + help='test JSON functionality as well (default)')
> > +
> > + parser.add_argument('-J', '--disable-json', action='store_true',
> > + dest='disable_json',
> > + help='Do not test JSON functionality as well')
>
> Would it be possible to have common options to the different tests?
>
> 1/8 uses -s and -j.
>
> I am not sure we have to worry about breaking backward for test
> syntax, we only run this.
It's a bit of a mess with nft-test.py as it always performs standard
syntax testing and JSON syntax is an add-on one may enable (or not). So
to test JSON only, I'd have to refactor the ~300 lines long rule_add()
function. Not the worst thing to do, but much more work than "just"
having --enable-json being the default.
Cheers, Phil
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema by default
2025-09-04 16:13 ` Phil Sutter
@ 2025-09-04 16:56 ` Pablo Neira Ayuso
2025-09-04 18:33 ` Phil Sutter
0 siblings, 1 reply; 14+ messages in thread
From: Pablo Neira Ayuso @ 2025-09-04 16:56 UTC (permalink / raw)
To: Phil Sutter, netfilter-devel
On Thu, Sep 04, 2025 at 06:13:06PM +0200, Phil Sutter wrote:
> On Thu, Sep 04, 2025 at 05:29:54PM +0200, Pablo Neira Ayuso wrote:
> > On Thu, Sep 04, 2025 at 05:24:48PM +0200, Phil Sutter wrote:
> > > Introduce -J/--disable-json and -S/--no-schema to explicitly disable
> > > them if desired.
> > >
> > > Signed-off-by: Phil Sutter <phil@nwl.cc>
> > > ---
> > > tests/py/nft-test.py | 16 ++++++++++++----
> > > 1 file changed, 12 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> > > index 984f2b937a077..12c6174b01257 100755
> > > --- a/tests/py/nft-test.py
> > > +++ b/tests/py/nft-test.py
> > > @@ -1488,7 +1488,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
> > >
> > > parser.add_argument('-j', '--enable-json', action='store_true',
> > > dest='enable_json',
> > > - help='test JSON functionality as well')
> > > + help='test JSON functionality as well (default)')
> > > +
> > > + parser.add_argument('-J', '--disable-json', action='store_true',
> > > + dest='disable_json',
> > > + help='Do not test JSON functionality as well')
> >
> > Would it be possible to have common options to the different tests?
> >
> > 1/8 uses -s and -j.
> >
> > I am not sure we have to worry about breaking backward for test
> > syntax, we only run this.
>
> It's a bit of a mess with nft-test.py as it always performs standard
> syntax testing and JSON syntax is an add-on one may enable (or not). So
> to test JSON only, I'd have to refactor the ~300 lines long rule_add()
> function. Not the worst thing to do, but much more work than "just"
> having --enable-json being the default.
Oh, I see, so this is:
* no -j, then only standard is tested.
* -j, both standard and json are tested.
Maybe more simple is to reverse this logic, ie.
* no -j, then both standard and json syntax are tested.
* -s, only standard is tested.
Does this help?
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema by default
2025-09-04 16:56 ` Pablo Neira Ayuso
@ 2025-09-04 18:33 ` Phil Sutter
0 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-04 18:33 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Thu, Sep 04, 2025 at 06:56:08PM +0200, Pablo Neira Ayuso wrote:
> On Thu, Sep 04, 2025 at 06:13:06PM +0200, Phil Sutter wrote:
> > On Thu, Sep 04, 2025 at 05:29:54PM +0200, Pablo Neira Ayuso wrote:
> > > On Thu, Sep 04, 2025 at 05:24:48PM +0200, Phil Sutter wrote:
> > > > Introduce -J/--disable-json and -S/--no-schema to explicitly disable
> > > > them if desired.
> > > >
> > > > Signed-off-by: Phil Sutter <phil@nwl.cc>
> > > > ---
> > > > tests/py/nft-test.py | 16 ++++++++++++----
> > > > 1 file changed, 12 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/tests/py/nft-test.py b/tests/py/nft-test.py
> > > > index 984f2b937a077..12c6174b01257 100755
> > > > --- a/tests/py/nft-test.py
> > > > +++ b/tests/py/nft-test.py
> > > > @@ -1488,7 +1488,11 @@ def set_delete_elements(set_element, set_name, table, filename=None,
> > > >
> > > > parser.add_argument('-j', '--enable-json', action='store_true',
> > > > dest='enable_json',
> > > > - help='test JSON functionality as well')
> > > > + help='test JSON functionality as well (default)')
> > > > +
> > > > + parser.add_argument('-J', '--disable-json', action='store_true',
> > > > + dest='disable_json',
> > > > + help='Do not test JSON functionality as well')
> > >
> > > Would it be possible to have common options to the different tests?
> > >
> > > 1/8 uses -s and -j.
> > >
> > > I am not sure we have to worry about breaking backward for test
> > > syntax, we only run this.
> >
> > It's a bit of a mess with nft-test.py as it always performs standard
> > syntax testing and JSON syntax is an add-on one may enable (or not). So
> > to test JSON only, I'd have to refactor the ~300 lines long rule_add()
> > function. Not the worst thing to do, but much more work than "just"
> > having --enable-json being the default.
>
> Oh, I see, so this is:
>
> * no -j, then only standard is tested.
> * -j, both standard and json are tested.
>
> Maybe more simple is to reverse this logic, ie.
>
> * no -j, then both standard and json syntax are tested.
> * -s, only standard is tested.
So basically rename -J to -s in my patch? ;)
Note that -s clashes with --schema (although one could drop it as my
patch enables it by default, as well).
> Does this help?
Let me suggest an alternative: I promise to refactor that famous italian
pasta style function into smaller chunks like:
- Gather test data from files
- Instantiate a rule object with methods:
- apply()
- json_apply()
- validate_payload()
- validate_listing()
- Perform checks as per user choice (-j, -s, both/none)
And we live with the inconsistent UI for now?
Cheers, Phil
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [nft PATCH v4 0/8] Run all test suites via 'make check'
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
` (7 preceding siblings ...)
2025-09-04 15:24 ` [nft PATCH v4 8/8] Makefile: Enable support for 'make check' Phil Sutter
@ 2025-09-11 16:14 ` Phil Sutter
8 siblings, 0 replies; 14+ messages in thread
From: Phil Sutter @ 2025-09-11 16:14 UTC (permalink / raw)
To: Pablo Neira Ayuso; +Cc: netfilter-devel
On Thu, Sep 04, 2025 at 05:24:46PM +0200, Phil Sutter wrote:
> Help me (and maybe others) to not occasionally forget to run this or
> that test suite in this or that mode:
>
> Have test suites execute all variants by default (patches 1 and 2), make
> sure their exit codes match Automake expectations (patch 3) and register
> them with Automake (patch 8). Also fix for running 'make check' as
> non-root (patches 4 and 5) and calling build test suite from outside its
> directory (patch 6).
>
> There is a "funny" problem with build test suite calling 'make
> distcheck' which behaves differently under the environment polluted by
> the calling 'make check' invocation, details in patch 7.
>
> Changes since v3:
> - Applied the initial monitor test suite enhancements already
> - gitignore generated logs and reports
> - New patch 7
>
> Changes since v2:
> - Drop the need for RUN_FULL_TESTSUITE env var by making the "all
> variants" mode the default in all test suites
> - Implement JSON echo testing into monitor test suite, stored JSON
> output matches echo output after minor adjustment
>
> 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 (8):
> tests: monitor: Excercise all syntaxes and variants by default
> tests: py: Enable JSON and JSON schema by default
> tests: Prepare exit codes for automake
> 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
> tests: build: Avoid a recursive 'make check' run
> Makefile: Enable support for 'make check'
Series applied. I will follow up with the promised refactoring of
rule_add() function to finally align cmdline options with other test
suite runners.
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-09-11 16:14 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-04 15:24 [nft PATCH v4 0/8] Run all test suites via 'make check' Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 1/8] tests: monitor: Excercise all syntaxes and variants by default Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 2/8] tests: py: Enable JSON and JSON schema " Phil Sutter
2025-09-04 15:29 ` Pablo Neira Ayuso
2025-09-04 16:13 ` Phil Sutter
2025-09-04 16:56 ` Pablo Neira Ayuso
2025-09-04 18:33 ` Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 3/8] tests: Prepare exit codes for automake Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 4/8] tests: json_echo: Skip if run as non-root Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 5/8] tests: shell: Skip packetpath/nat_ftp in fake root env Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 6/8] tests: build: Do not assume caller's CWD Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 7/8] tests: build: Avoid a recursive 'make check' run Phil Sutter
2025-09-04 15:24 ` [nft PATCH v4 8/8] Makefile: Enable support for 'make check' Phil Sutter
2025-09-11 16:14 ` [nft PATCH v4 0/8] Run all test suites via " 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).