From: "Mickaël Salaün" <mic@digikod.net>
To: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Cc: Jakub Kicinski <kuba@kernel.org>, Mark Brown <broonie@kernel.org>,
keescook@chromium.org, davem@davemloft.net,
netdev@vger.kernel.org, edumazet@google.com, pabeni@redhat.com,
shuah@kernel.org, linux-kselftest@vger.kernel.org,
linux-security-module@vger.kernel.org, jakub@cloudflare.com
Subject: Re: [PATCH v4 00/12] selftests: kselftest_harness: support using xfail
Date: Tue, 5 Mar 2024 17:39:44 +0100 [thread overview]
Message-ID: <20240305.thuo4ahNaeng@digikod.net> (raw)
In-Reply-To: <20240305.hoi8ja1eeg4C@digikod.net>
On Tue, Mar 05, 2024 at 05:00:13PM +0100, Mickaël Salaün wrote:
> On Tue, Mar 05, 2024 at 04:48:06PM +0100, Przemek Kitszel wrote:
> > On 3/5/24 00:04, Jakub Kicinski wrote:
> > > On Mon, 4 Mar 2024 22:20:03 +0000 Mark Brown wrote:
> > > > On Wed, Feb 28, 2024 at 04:59:07PM -0800, Jakub Kicinski wrote:
> > > >
> > > > > When running selftests for our subsystem in our CI we'd like all
> > > > > tests to pass. Currently some tests use SKIP for cases they
> > > > > expect to fail, because the kselftest_harness limits the return
> > > > > codes to pass/fail/skip. XFAIL which would be a great match
> > > > > here cannot be used.
> > > > >
> > > > > Remove the no_print handling and use vfork() to run the test in
> > > > > a different process than the setup. This way we don't need to
> > > > > pass "failing step" via the exit code. Further clean up the exit
> > > > > codes so that we can use all KSFT_* values. Rewrite the result
> > > > > printing to make handling XFAIL/XPASS easier. Support tests
> > > > > declaring combinations of fixture + variant they expect to fail.
> > > >
> > > > This series landed in -next today and has caused breakage on all
> > > > platforms in the ALSA pcmtest-driver test. When run on systems that
> > > > don't have the driver it needs loaded the test skip but since this
> > > > series was merged skipped tests are logged but then reported back as
> > > > failures:
> > > >
> > > > # selftests: alsa: test-pcmtest-driver
> > > > # TAP version 13
> > > > # 1..5
> > > > # # Starting 5 tests from 1 test cases.
> > > > # # RUN pcmtest.playback ...
> > > > # # SKIP Can't read patterns. Probably, module isn't loaded
> > > > # # playback: Test failed
> > > > # # FAIL pcmtest.playback
> > > > # not ok 1 pcmtest.playback # Can't read patterns. Probably, module isn't loaded
> > > > # # RUN pcmtest.capture ...
> > > > # # SKIP Can't read patterns. Probably, module isn't loaded
> > > > # # capture: Test failed
> > > > # # FAIL pcmtest.capture
> > > > # not ok 2 pcmtest.capture # Can't read patterns. Probably, module isn't loaded
> > > > # # RUN pcmtest.ni_capture ...
> > > > # # SKIP Can't read patterns. Probably, module isn't loaded
> > > > # # ni_capture: Test failed
> > > > # # FAIL pcmtest.ni_capture
> > > > # not ok 3 pcmtest.ni_capture # Can't read patterns. Probably, module isn't loaded
> > > > # # RUN pcmtest.ni_playback ...
> > > > # # SKIP Can't read patterns. Probably, module isn't loaded
> > > > # # ni_playback: Test failed
> > > > # # FAIL pcmtest.ni_playback
> > > > # not ok 4 pcmtest.ni_playback # Can't read patterns. Probably, module isn't loaded
> > > > # # RUN pcmtest.reset_ioctl ...
> > > > # # SKIP Can't read patterns. Probably, module isn't loaded
> > > > # # reset_ioctl: Test failed
> > > > # # FAIL pcmtest.reset_ioctl
> > > > # not ok 5 pcmtest.reset_ioctl # Can't read patterns. Probably, module isn't loaded
> > > > # # FAILED: 0 / 5 tests passed.
> > > > # # Totals: pass:0 fail:5 xfail:0 xpass:0 skip:0 error:0
> > > >
> > > > I haven't completely isolated the issue due to some other breakage
> > > > that's making it harder that it should be to test.
> > > >
> > > > A sample full log can be seen at:
> > > >
> > > > https://lava.sirena.org.uk/scheduler/job/659576#L1349
> > >
> > > Thanks! the exit() inside the skip evaded my grep, I'm testing this:
> > >
> > > diff --git a/tools/testing/selftests/alsa/test-pcmtest-driver.c b/tools/testing/selftests/alsa/test-pcmtest-driver.c
> > > index a52ecd43dbe3..7ab81d6f9e05 100644
> > > --- a/tools/testing/selftests/alsa/test-pcmtest-driver.c
> > > +++ b/tools/testing/selftests/alsa/test-pcmtest-driver.c
> > > @@ -127,11 +127,11 @@ FIXTURE_SETUP(pcmtest) {
> > > int err;
> > > if (geteuid())
> > > - SKIP(exit(-1), "This test needs root to run!");
> > > + SKIP(exit(KSFT_SKIP), "This test needs root to run!");
> > > err = read_patterns();
> > > if (err)
> > > - SKIP(exit(-1), "Can't read patterns. Probably, module isn't loaded");
> > > + SKIP(exit(KSFT_SKIP), "Can't read patterns. Probably, module isn't loaded");
> > > card_name = malloc(127);
> > > ASSERT_NE(card_name, NULL);
> > > diff --git a/tools/testing/selftests/mm/hmm-tests.c b/tools/testing/selftests/mm/hmm-tests.c
> > > index 20294553a5dd..356ba5f3b68c 100644
> > > --- a/tools/testing/selftests/mm/hmm-tests.c
> > > +++ b/tools/testing/selftests/mm/hmm-tests.c
> > > @@ -138,7 +138,7 @@ FIXTURE_SETUP(hmm)
> > > self->fd = hmm_open(variant->device_number);
> > > if (self->fd < 0 && hmm_is_coherent_type(variant->device_number))
> > > - SKIP(exit(0), "DEVICE_COHERENT not available");
> > > + SKIP(exit(KSFT_SKIP), "DEVICE_COHERENT not available");
> > > ASSERT_GE(self->fd, 0);
> > > }
> > > @@ -149,7 +149,7 @@ FIXTURE_SETUP(hmm2)
> > > self->fd0 = hmm_open(variant->device_number0);
> > > if (self->fd0 < 0 && hmm_is_coherent_type(variant->device_number0))
> > > - SKIP(exit(0), "DEVICE_COHERENT not available");
> > > + SKIP(exit(KSFT_SKIP), "DEVICE_COHERENT not available");
> > > ASSERT_GE(self->fd0, 0);
> > > self->fd1 = hmm_open(variant->device_number1);
> > > ASSERT_GE(self->fd1, 0);
> > >
> > > > but there's no more context. I'm also seeing some breakage in the
> > > > seccomp selftests which also use kselftest-harness:
> > > >
> > > > # # RUN TRAP.dfl ...
> > > > # # dfl: Test exited normally instead of by signal (code: 0)
> > > > # # FAIL TRAP.dfl
> > > > # not ok 56 TRAP.dfl
> > > > # # RUN TRAP.ign ...
> > > > # # ign: Test exited normally instead of by signal (code: 0)
> > > > # # FAIL TRAP.ign
> > > > # not ok 57 TRAP.ign
> > >
> > > Ugh, I'm guessing vfork() "eats" the signal, IOW grandchild signals,
> > > child exits? vfork() and signals.. I'd rather leave to Kees || Mickael.
> > >
> >
> > Hi, sorry for not trying to reproduce it locally and still commenting,
> > but my vfork() man page says:
> >
> > | The child must not return from the current function or call
> > | exit(3) (which would have the effect of calling exit handlers
> > | established by the parent process and flushing the parent's stdio(3)
> > | buffers), but may call _exit(2).
> >
> > And you still have some exit(3) calls.
>
> Correct, exit(3) should be replaced with _exit(2).
Well, I think we should be good even if some exit(3) calls remain
because the envirenment in which the vfork() call happen is already
dedicated to the running test (with flushed stdio, setpgrp() call), see
__run_test() and the fork() call just before running the
fixture/test/teardown. Even if the test configures its own exit
handlers, they will not be run by its parent because it never calls
exit(), and the returned function either ends with a call to _exit() or
a signal.
prev parent reply other threads:[~2024-03-05 16:40 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-29 0:59 [PATCH v4 00/12] selftests: kselftest_harness: support using xfail Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 01/12] selftests/landlock: Redefine TEST_F() as TEST_F_FORK() Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 02/12] selftests/harness: Merge TEST_F_FORK() into TEST_F() Jakub Kicinski
2024-03-04 19:27 ` Mickaël Salaün
2024-03-04 19:31 ` Mickaël Salaün
2024-03-05 15:47 ` Mickaël Salaün
2024-03-05 15:56 ` [PATCH v1 0/2] " Mickaël Salaün
2024-03-05 15:56 ` [PATCH v1 1/2] selftests/landlock: Redefine TEST_F() as TEST_F_FORK() Mickaël Salaün
2024-03-05 15:56 ` [PATCH v1 2/2] selftests/harness: Merge TEST_F_FORK() into TEST_F() Mickaël Salaün
2024-02-29 0:59 ` [PATCH v4 03/12] selftests: kselftest_harness: use KSFT_* exit codes Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 04/12] selftests: kselftest_harness: generate test name once Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 05/12] selftests: kselftest_harness: save full exit code in metadata Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 06/12] selftests: kselftest_harness: use exit code to store skip Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 07/12] selftests: kselftest: add ksft_test_result_code(), handling all exit codes Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 08/12] selftests: kselftest_harness: print test name for SKIP Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 09/12] selftests: kselftest_harness: separate diagnostic message with # in ksft_test_result_code() Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 10/12] selftests: kselftest_harness: let PASS / FAIL provide diagnostic Jakub Kicinski
2024-04-16 14:11 ` Muhammad Usama Anjum
2024-02-29 0:59 ` [PATCH v4 11/12] selftests: kselftest_harness: support using xfail Jakub Kicinski
2024-02-29 0:59 ` [PATCH v4 12/12] selftests: ip_local_port_range: use XFAIL instead of SKIP Jakub Kicinski
2024-02-29 20:19 ` Jakub Sitnicki
2024-02-29 23:25 ` Xin Long
2024-03-01 10:40 ` Jakub Sitnicki
2024-03-01 10:40 ` [PATCH v4 00/12] selftests: kselftest_harness: support using xfail patchwork-bot+netdevbpf
2024-03-04 22:20 ` Mark Brown
2024-03-04 23:04 ` Jakub Kicinski
2024-03-04 23:14 ` Kees Cook
2024-03-04 23:39 ` Jakub Kicinski
2024-03-05 9:43 ` Kees Cook
2024-03-05 16:05 ` Mickaël Salaün
2024-03-05 18:06 ` Jakub Kicinski
2024-03-05 19:14 ` Mickaël Salaün
2024-03-05 20:10 ` [PATCH] selftests/harness: Fix TEST_F()'s vfork handling Mickaël Salaün
2024-03-05 20:25 ` Jakub Kicinski
2024-03-06 7:25 ` Mickaël Salaün
2024-03-06 7:32 ` Mickaël Salaün
2024-03-05 20:31 ` Kees Cook
2024-03-06 13:25 ` Mark Brown
2024-03-07 4:40 ` patchwork-bot+netdevbpf
2024-05-02 18:42 ` [PATCH v4 00/12] selftests: kselftest_harness: support using xfail Sean Christopherson
2024-05-02 21:07 ` Mickaël Salaün
2024-03-05 15:48 ` Przemek Kitszel
2024-03-05 16:00 ` Mickaël Salaün
2024-03-05 16:39 ` Mickaël Salaün [this message]
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=20240305.thuo4ahNaeng@digikod.net \
--to=mic@digikod.net \
--cc=broonie@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jakub@cloudflare.com \
--cc=keescook@chromium.org \
--cc=kuba@kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=przemyslaw.kitszel@intel.com \
--cc=shuah@kernel.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).