Re: [PATCH bpf-next] selftests/bpf: consolidate common code in run_one_test function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Apr 13, 2022 at 10:05 PM Mykola Lysenko <mykolal@xxxxxx> wrote:
>
> This is a pre-req to add separate logging for each subtest.
>
> Move all the mutable test data to the test_result struct.
> Move per-test init/de-init into the run_one_test function.
> Consolidate data aggregation and final log output in
> calculate_and_print_summary function.
> As a side effect, this patch fixes double counting of errors
> for subtests and possible duplicate output of subtest log
> on failures.
>
> Also, add prog_tests_framework.c test to verify some of the
> counting logic.
>
> As part of verification, confirmed that number of reported
> tests is the same before and after the change for both parallel
> and sequential test execution.
>
> Signed-off-by: Mykola Lysenko <mykolal@xxxxxx>
> ---

The consolidation of the per-test logic in one place is great, thanks
for tackling this! But I tried this locally and understood what you
were mentioning as completely buffered output. It really sucks and is
a big step back, I think :(

Running sudo ./test_progs -j I see no output for a long while and only
then get entire output at the end:

#239 xdp_noinline:OK
#240 xdp_perf:OK
#241 xdpwall:OK

All error logs:

#58 fexit_sleep:FAIL
test_fexit_sleep:PASS:fexit_skel_load 0 nsec
test_fexit_sleep:PASS:fexit_attach 0 nsec
test_fexit_sleep:PASS:clone 0 nsec
test_fexit_sleep:PASS:fexit_cnt 0 nsec
test_fexit_sleep:PASS:waitpid 0 nsec
test_fexit_sleep:PASS:exitstatus 0 nsec
test_fexit_sleep:FAIL:fexit_cnt 2
Summary: 240/1156 PASSED, 34 SKIPPED, 1 FAILED


First, just not seeing the progress made me wonder for a good minute
or more whether something is just stuck and deadlock. Which is anxiety
inducing and I'd rather avoid this :)

Second, as you can see, fexit_sleep actually failed (it does sometimes
in parallel mode). But I saw this only at the very end, while normally
I'd notice it as soon as it completes. In this case I know fexit_sleep
can fail and I'd ignore, but if there was some subtest that suddenly
breaks, I don't wait for all the tests to finish, I ctrl-C and go
investigate. Now I can't do that.

How much of a problem is it to preserve old behavior of streaming
results of tests as they come, but consolidate duplicate logic in one
place?

>  .../bpf/prog_tests/prog_tests_framework.c     |  55 ++++
>  tools/testing/selftests/bpf/test_progs.c      | 301 +++++++-----------
>  tools/testing/selftests/bpf/test_progs.h      |  32 +-
>  3 files changed, 195 insertions(+), 193 deletions(-)
>  create mode 100644 tools/testing/selftests/bpf/prog_tests/prog_tests_framework.c
>
> diff --git a/tools/testing/selftests/bpf/prog_tests/prog_tests_framework.c b/tools/testing/selftests/bpf/prog_tests/prog_tests_framework.c
> new file mode 100644
> index 000000000000..7a5be06653f7
> --- /dev/null
> +++ b/tools/testing/selftests/bpf/prog_tests/prog_tests_framework.c
> @@ -0,0 +1,55 @@
> +// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
> +
> +#include "test_progs.h"
> +#include "testing_helpers.h"
> +
> +static void clear_test_result(struct test_result *result)
> +{
> +       result->error_cnt = 0;
> +       result->sub_succ_cnt = 0;
> +       result->skip_cnt = 0;
> +}
> +
> +void test_prog_tests_framework(void)
> +{
> +       struct test_result *result = env.test_result;
> +
> +       // in all the ASSERT calls below we need to return on the first
> +       // error due to the fact that we are cleaning the test state after
> +       // each dummy subtest
> +
> +       // test we properly count skipped tests with subtests

C++ comments, please use /* */


> +       if (test__start_subtest("test_good_subtest"))
> +               test__end_subtest();
> +       if (!ASSERT_EQ(result->skip_cnt, 0, "skip_cnt_check"))
> +               return;
> +       if (!ASSERT_EQ(result->error_cnt, 0, "error_cnt_check"))
> +               return;
> +       if (!ASSERT_EQ(result->subtest_num, 1, "subtest_num_check"))
> +               return;
> +       clear_test_result(result);
> +

[...]



[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux