From: Phil Sutter <phil@nwl.cc>
To: Pablo Neira Ayuso <pablo@netfilter.org>
Cc: netfilter-devel@vger.kernel.org
Subject: [nft PATCH 8/9] tests: monitor: Support running external commands
Date: Wed, 2 Oct 2024 21:38:52 +0200 [thread overview]
Message-ID: <20241002193853.13818-9-phil@nwl.cc> (raw)
In-Reply-To: <20241002193853.13818-1-phil@nwl.cc>
Accept '@'-prefixed lines mixed in between 'I'-prefixed ones and apply
nft input and run commands in specified ordering.
To keep things simple, ignore such test cases when in echo mode for now.
Signed-off-by: Phil Sutter <phil@nwl.cc>
---
tests/monitor/run-tests.sh | 61 ++++++++++++++++++++++++++++++++++----
1 file changed, 56 insertions(+), 5 deletions(-)
diff --git a/tests/monitor/run-tests.sh b/tests/monitor/run-tests.sh
index 214512d269e8d..36fc800c10520 100755
--- a/tests/monitor/run-tests.sh
+++ b/tests/monitor/run-tests.sh
@@ -59,6 +59,44 @@ json_output_filter() { # (filename)
# unify handle values
sed -i -e 's/\("handle":\) [0-9][0-9]*/\1 0/g' "$1"
}
+apply_commands_from_file() { # (command_file)
+ grep -q '^# run: ' $1 || {
+ $nft -f - <$1 || {
+ err "nft command failed!"
+ return 1
+ }
+ return 0
+ }
+ local nft_cmd=""
+ local sep=""
+ local line=""
+ while read line; do
+ [[ $line =~ ^#\ run: ]] || {
+ nft_cmd+="$sep$line"
+ sep="; "
+ continue
+ }
+ [[ -n $nft_cmd ]] && {
+ $nft -f - <<<"$nft_cmd" || {
+ err "nft command failed!"
+ return 1
+ }
+ }
+ nft_cmd=""
+ sep=""
+ ${line#\# run: } || {
+ err "custom command failed!"
+ return 1
+ }
+ done <$1
+ [[ -n $nft_cmd ]] && {
+ $nft -f - <<<"$nft_cmd" || {
+ err "nft command failed!"
+ return 1
+ }
+ }
+ return 0
+}
monitor_run_test() {
monitor_output=$(mktemp -p $testdir)
monitor_args=""
@@ -74,10 +112,7 @@ monitor_run_test() {
echo "command file:"
cat $command_file
}
- $nft -f - <$command_file || {
- err "nft command failed!"
- rc=1
- }
+ apply_commands_from_file $command_file || rc=1
sleep 0.5
kill $monitor_pid
wait >/dev/null 2>&1
@@ -103,6 +138,17 @@ echo_run_test() {
echo "command file:"
cat $command_file
}
+ grep -q '^# run: ' $command_file && {
+ $debug && {
+ echo "skipping unsuitable test case in command file:"
+ cat $command_file
+ }
+ rm $command_file
+ rm $output_file
+ touch $command_file
+ touch $output_file
+ return 0
+ }
$nft -nn -e -f - <$command_file >$echo_output || {
err "nft command failed!"
rc=1
@@ -182,18 +228,23 @@ for variant in $variants; do
# O add table ip t
# I add chain ip t c
# O add chain ip t c
+ # I <nft input1>
+ # @ <command to run after nft input1>
+ # I <nft input2>
+ # O ...
$nft flush ruleset
input_complete=false
while read dir line; do
case $dir in
- I)
+ I|@)
$input_complete && {
$run_test
let "rc += $?"
}
input_complete=false
+ [[ $dir == '@' ]] && line="# run: $line"
cmd_append "$line"
;;
O)
--
2.43.0
next prev parent reply other threads:[~2024-10-02 19:38 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-10-02 19:38 [nft PATCH 0/9] Support wildcard netdev hooks and events Phil Sutter
2024-10-02 19:38 ` [nft PATCH 1/9] json: Support typeof in set and map types Phil Sutter
2024-10-02 19:38 ` [nft PATCH 2/9] tests: py: Fix for storing payload into missing file Phil Sutter
2024-10-02 19:38 ` [nft PATCH 3/9] monitor: Recognize flowtable add/del events Phil Sutter
2024-10-02 19:38 ` [nft PATCH 4/9] tests: monitor: Run in own netns Phil Sutter
2024-10-02 19:38 ` [nft PATCH 5/9] mnl: Support simple wildcards in netdev hooks Phil Sutter
2024-10-02 19:38 ` [nft PATCH 6/9] parser_bison: Accept ASTERISK_STRING in flowtable_expr_member Phil Sutter
2024-10-02 19:38 ` [nft PATCH 7/9] tests: shell: Adjust to ifname-based flowtables Phil Sutter
2024-10-02 19:38 ` Phil Sutter [this message]
2024-10-02 19:38 ` [nft PATCH 9/9] monitor: Support NFT_MSG_(NEW|DEL)DEV events Phil Sutter
2024-10-02 19:55 ` Phil Sutter
2024-10-31 22:08 ` [nft PATCH 0/9] Support wildcard netdev hooks and events Florian Westphal
2024-10-31 22:13 ` Pablo Neira Ayuso
2024-11-06 10:01 ` Phil Sutter
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=20241002193853.13818-9-phil@nwl.cc \
--to=phil@nwl.cc \
--cc=netfilter-devel@vger.kernel.org \
--cc=pablo@netfilter.org \
/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).