[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Thu, 4 Apr 2024 10:47:50 -0600
From: Shuah Khan <skhan@...uxfoundation.org>
To: Shengyu Li <shengyu.li.evgeny@...il.com>, shuah@...nel.org,
Mirsad Todorovac <mirsad.todorovac@....unizg.hr>,
Jason Gunthorpe <jgg@...dia.com>, Joao Martins <joao.m.martins@...cle.com>
Cc: linux-kernel@...r.kernel.org, linux-kselftest@...r.kernel.org,
luto@...capital.net, wad@...omium.org, Shuah Khan <skhan@...uxfoundation.org>
Subject: Re: [PATCH v2] selftests/harness: Prevent infinite loop due to Assert
in FIXTURE_TEARDOWN
On 3/26/24 15:13, Shengyu Li wrote:
> This patch addresses an issue in the selftests/harness where an
> assertion within FIXTURE_TEARDOWN could trigger an infinite loop.
> The problem arises because the teardown procedure is meant to
> execute once, but the presence of failing assertions (ASSERT_EQ(0, 1))
> leads to repeated attempts to execute teardown due to
> the long jump mechanism used by the harness for handling assertions.
>
> To resolve this, the patch ensures that the teardown process
> runs only once, regardless of assertion outcomes, preventing
> the infinite loop and allowing tests to fail.
>
> A simple test demo(test.c):
> #include "kselftest_harness.h"
>
> FIXTURE(f)
> {
> int fd;
> };
>
> FIXTURE_SETUP(f)
> {
> self->fd = 0;
> }
>
> FIXTURE_TEARDOWN(f)
> {
> TH_LOG("TEARDOWN");
> ASSERT_EQ(0, 1);
> self->fd = -1;
> }
>
> TEST_F(f, open_close)
> {
> ASSERT_NE(self->fd, 1);
> }
>
> TEST_HARNESS_MAIN
>
> will always output the following output due to a dead loop until timeout:
> # test.c:15:open_close:TEARDOWN
> # test.c:16:open_close:Expected 0 (0) == 1 (1)
> # test.c:15:open_close:TEARDOWN
> # test.c:16:open_close:Expected 0 (0) == 1 (1)
> ...
>
> But here's what we should and expect to get:
> TAP version 13
> 1..1
> # Starting 1 tests from 2 test cases.
> # RUN f.open_close ...
> # test.c:15:open_close:TEARDOWN
> # test.c:16:open_close:Expected 0 (0) == 1 (1)
> # open_close: Test terminated by assertion
> # FAIL f.open_close
> not ok 1 f.open_close
> # FAILED: 0 / 1 tests passed.
> # Totals: pass:0 fail:1 xfail:0 xpass:0 skip:0 error:0
>
> also this is related to the issue mentioned in this patch
> https://patchwork.kernel.org/project/linux-kselftest/patch/e2ba3f8c-80e6-477d-9cea-1c9af820e0ed@alu.unizg.hr/
>
Adding people who participated in the above thread discussion.
Please try this patch out to see if this fixes the problem
with iommu test.
>
>
> Signed-off-by: Shengyu Li <shengyu.li.evgeny@...il.com>
Than you for finding and fixing this. Applied now to linux-kselftes fixes
branch for the next rc.
thanks,
-- Shuah
Powered by blists - more mailing lists