Re: [PATCH v3 2/3] kunit: fix bug in the order of lines in debugfs logs

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

 



On Wed, 8 Mar 2023 at 06:39, Rae Moar <rmoar@xxxxxxxxxx> wrote:
>
> Fix bug in debugfs logs that causes an incorrect order of lines in the
> debugfs log.
>
> Currently, the test counts lines that show the number of tests passed,
> failed, and skipped, as well as any suite diagnostic lines,
> appear prior to the individual results, which is a bug.
>
> Ensure the order of printing for the debugfs log is correct. Additionally,
> add a KTAP header to so the debugfs logs can be valid KTAP.
>
> This is an example of a log prior to these fixes:
>
>      KTAP version 1
>
>      # Subtest: kunit_status
>      1..2
>  # kunit_status: pass:2 fail:0 skip:0 total:2
>  # Totals: pass:2 fail:0 skip:0 total:2
>      ok 1 kunit_status_set_failure_test
>      ok 2 kunit_status_mark_skipped_test
>  ok 1 kunit_status
>
> Note the two lines with stats are out of order. This is the same debugfs
> log after the fixes (in combination with the third patch to remove the
> extra line):
>
>  KTAP version 1
>  1..1
>      KTAP version 1
>      # Subtest: kunit_status
>      1..2
>      ok 1 kunit_status_set_failure_test
>      ok 2 kunit_status_mark_skipped_test
>  # kunit_status: pass:2 fail:0 skip:0 total:2
>  # Totals: pass:2 fail:0 skip:0 total:2
>  ok 1 kunit_status
>
> Signed-off-by: Rae Moar <rmoar@xxxxxxxxxx>
> ---

Looks good to me.

Reviewed-by: David Gow <davidgow@xxxxxxxxxx>

Cheers,
-- David


>
> Changes from v2 -> v3:
> - No changes.
>
> Changes from v1 -> v2:
> - Add KTAP header.
> - Ensure test result number is 1.
>
>  lib/kunit/debugfs.c | 14 ++++++++++++--
>  lib/kunit/test.c    | 21 ++++++++++++++-------
>  2 files changed, 26 insertions(+), 9 deletions(-)
>
> diff --git a/lib/kunit/debugfs.c b/lib/kunit/debugfs.c
> index de0ee2e03ed6..b08bb1fba106 100644
> --- a/lib/kunit/debugfs.c
> +++ b/lib/kunit/debugfs.c
> @@ -55,14 +55,24 @@ static int debugfs_print_results(struct seq_file *seq, void *v)
>         enum kunit_status success = kunit_suite_has_succeeded(suite);
>         struct kunit_case *test_case;
>
> -       if (!suite || !suite->log)
> +       if (!suite)
>                 return 0;
>
> -       seq_printf(seq, "%s", suite->log);
> +       /* Print KTAP header so the debugfs log can be parsed as valid KTAP. */
> +       seq_puts(seq, "KTAP version 1\n");
> +       seq_puts(seq, "1..1\n");
> +
> +       /* Print suite header because it is not stored in the test logs. */
> +       seq_puts(seq, KUNIT_SUBTEST_INDENT "KTAP version 1\n");
> +       seq_printf(seq, KUNIT_SUBTEST_INDENT "# Subtest: %s\n", suite->name);
> +       seq_printf(seq, KUNIT_SUBTEST_INDENT "1..%zd\n", kunit_suite_num_test_cases(suite));
>
>         kunit_suite_for_each_test_case(suite, test_case)
>                 debugfs_print_result(seq, suite, test_case);
>
> +       if (suite->log)
> +               seq_printf(seq, "%s", suite->log);
> +
>         seq_printf(seq, "%s %d %s\n",
>                    kunit_status_to_ok_not_ok(success), 1, suite->name);
>         return 0;
> diff --git a/lib/kunit/test.c b/lib/kunit/test.c
> index c4d6304edd61..811fcc376d2f 100644
> --- a/lib/kunit/test.c
> +++ b/lib/kunit/test.c
> @@ -152,10 +152,18 @@ EXPORT_SYMBOL_GPL(kunit_suite_num_test_cases);
>
>  static void kunit_print_suite_start(struct kunit_suite *suite)
>  {
> -       kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n");
> -       kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s",
> +       /*
> +        * We do not log the test suite header as doing so would
> +        * mean debugfs display would consist of the test suite
> +        * header prior to individual test results.
> +        * Hence directly printk the suite status, and we will
> +        * separately seq_printf() the suite header for the debugfs
> +        * representation.
> +        */
> +       pr_info(KUNIT_SUBTEST_INDENT "KTAP version 1\n");
> +       pr_info(KUNIT_SUBTEST_INDENT "# Subtest: %s\n",
>                   suite->name);
> -       kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "1..%zd",
> +       pr_info(KUNIT_SUBTEST_INDENT "1..%zd\n",
>                   kunit_suite_num_test_cases(suite));
>  }
>
> @@ -172,10 +180,9 @@ static void kunit_print_ok_not_ok(void *test_or_suite,
>
>         /*
>          * We do not log the test suite results as doing so would
> -        * mean debugfs display would consist of the test suite
> -        * description and status prior to individual test results.
> -        * Hence directly printk the suite status, and we will
> -        * separately seq_printf() the suite status for the debugfs
> +        * mean debugfs display would consist of an incorrect test
> +        * number. Hence directly printk the suite result, and we will
> +        * separately seq_printf() the suite results for the debugfs
>          * representation.
>          */
>         if (suite)
> --
> 2.40.0.rc0.216.gc4246ad0f0-goog
>

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature


[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux