From: Jakub Kicinski <kuba@kernel.org>
To: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Cc: Paolo Abeni <pabeni@redhat.com>,
netdev@vger.kernel.org, davem@davemloft.net, edumazet@google.com,
ncardwell@google.com, shuah@kernel.org,
linux-kselftest@vger.kernel.org, fw@strlen.de,
Willem de Bruijn <willemb@google.com>,
"Matthieu Baerts (NGI0)" <matttbe@kernel.org>,
martineau@kernel.org
Subject: Re: [PATCH net-next RFC] selftests/net: integrate packetdrill with ksft
Date: Wed, 28 Aug 2024 09:01:20 -0700 [thread overview]
Message-ID: <20240828090120.71be0b20@kernel.org> (raw)
In-Reply-To: <66cf2e4bd8e89_33815c294b2@willemb.c.googlers.com.notmuch>
On Wed, 28 Aug 2024 10:03:55 -0400 Willem de Bruijn wrote:
> > > A single script is much
> > > simpler, optionally with nested KTAP (not supported yet by ksft). But,
> > > I'm afraid that running time without intermediate output will be very
> > > long when we integrate all packetdrill scripts.
> >
> > If I read correctly, this runs the scripts in the given directory
> > sequentially (as opposed to the default pktdrill run_all.py behavior
> > that uses many concurrent threads).
> >
> > I guess/fear that running all the pktdrill tests in a single batch would
> > take quite a long time, which in turn could be not so good for CI
> > integration. Currently there are a couple of CI test-cases with runtime
> > > 1h, but that is bad ;)
>
> Very good point, thanks! This is the third packetdrill runner that I'm
> writing. I should know this by now.. Let me see whether I can use
> run_all.py rather than reinvent the wheel here.
Do we have to worry about this now? If you're planning to add a runner
specifically for packetdrill... IDK if we should. We already have a few
runners, not to mention that run_kselftest.sh itself can run all the
test cases in parallel in separate network namespaces!
What I was wondering is whether we can use shebang to direct the .pkt
files to be "executed" by the python script. Alternatively we can add
support to specifying "interpreter" for a given test in ksft infra
(kinda like we can pass cmd line arguments to a test). Completely
untested but it should give better idea what I mean than a description:
diff --git a/tools/testing/selftests/kselftest/runner.sh b/tools/testing/selftests/kselftest/runner.sh
index 74954f6a8f94..429c279e9c6e 100644
--- a/tools/testing/selftests/kselftest/runner.sh
+++ b/tools/testing/selftests/kselftest/runner.sh
@@ -56,6 +56,7 @@ run_one()
export kselftest_timeout="$kselftest_default_timeout"
# Safe default if tr not available
+ kselftest_interp_ref="KSELFTEST_INTERP"
kselftest_cmd_args_ref="KSELFTEST_ARGS"
# Optional arguments for this command, possibly defined as an
@@ -78,6 +79,14 @@ run_one()
$TR_CMD [:lower:] [:upper:])
kselftest_cmd_args_ref="KSELFTEST_${BASENAME_SANITIZED}_ARGS"
fi
+ # Optional interpreter to run the test case
+ if [ -n "$TR_CMD" ]; then
+ SUFFIX_SANITIZED=$(echo "${BASENAME_TEST#*.}" | \
+ $TR_CMD -d "[:blank:][:cntrl:]" | \
+ $TR_CMD -c "[:alnum:]_" "_" | \
+ $TR_CMD [:lower:] [:upper:])
+ kselftest_interp_ref="KSELFTEST_${SUFFIX_SANITIZED}_INTERP"
+ fi
# Load per-test-directory kselftest "settings" file.
settings="$BASE_DIR/$DIR/settings"
@@ -110,8 +119,12 @@ run_one()
if [ -x /usr/bin/stdbuf ]; then
stdbuf="/usr/bin/stdbuf --output=L "
fi
+ eval kselftest_interp="\$${kselftest_interp_ref:-}"
+ # Add a space at the end if interpreter is set to work in $cmd
+ [ -n "$kselftest_interp" ] && \
+ kselftest_interp="$kselftest_interp "
eval kselftest_cmd_args="\$${kselftest_cmd_args_ref:-}"
- cmd="$stdbuf ./$BASENAME_TEST $kselftest_cmd_args"
+ cmd="$stdbuf ./$kselftest_interp$BASENAME_TEST $kselftest_cmd_args"
if [ ! -x "$TEST" ]; then
echo "# Warning: file $TEST is not executable"
next prev parent reply other threads:[~2024-08-28 16:01 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-27 19:32 [PATCH net-next RFC] selftests/net: integrate packetdrill with ksft Willem de Bruijn
2024-08-28 0:39 ` Jakub Kicinski
2024-08-28 13:58 ` Willem de Bruijn
2024-08-28 8:20 ` Paolo Abeni
2024-08-28 14:03 ` Willem de Bruijn
2024-08-28 16:01 ` Jakub Kicinski [this message]
2024-08-28 19:33 ` Willem de Bruijn
2024-08-28 21:00 ` Jakub Kicinski
2024-08-30 15:20 ` Willem de Bruijn
2024-08-30 17:33 ` Jakub Kicinski
2024-08-30 18:47 ` Willem de Bruijn
2024-08-30 21:44 ` Jakub Kicinski
2024-08-30 21:52 ` Willem de Bruijn
2024-09-01 21:15 ` Willem de Bruijn
2024-09-02 16:46 ` Jakub Kicinski
2024-09-02 16:56 ` Jakub Kicinski
2024-09-02 20:50 ` Willem de Bruijn
2024-09-05 3:27 ` Willem de Bruijn
2024-08-30 21:46 ` Willem de Bruijn
2024-08-28 16:26 ` Matthieu Baerts
2024-08-28 15:01 ` Stanislav Fomichev
2024-08-28 15:36 ` Jakub Kicinski
2024-08-28 15:43 ` Willem de Bruijn
2024-08-28 17:20 ` Stanislav Fomichev
2024-08-28 18:23 ` Jakub Kicinski
2024-08-28 18:36 ` Stanislav Fomichev
2024-08-28 18:26 ` Mina Almasry
2024-08-28 18:39 ` Jakub Kicinski
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=20240828090120.71be0b20@kernel.org \
--to=kuba@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fw@strlen.de \
--cc=linux-kselftest@vger.kernel.org \
--cc=martineau@kernel.org \
--cc=matttbe@kernel.org \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=shuah@kernel.org \
--cc=willemb@google.com \
--cc=willemdebruijn.kernel@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.