lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CABVgOSmgtssQCcoH2FROr2aXP8uKDhHCQKjHD9QkeF_WmGd7-w@mail.gmail.com>
Date:   Wed, 8 Mar 2023 13:04:59 +0800
From:   David Gow <davidgow@...gle.com>
To:     Rae Moar <rmoar@...gle.com>
Cc:     brendanhiggins@...gle.com, dlatypov@...gle.com,
        skhan@...uxfoundation.org, kunit-dev@...glegroups.com,
        linux-kernel@...r.kernel.org, linux-kselftest@...r.kernel.org
Subject: Re: [PATCH v3 2/3] kunit: fix bug in the order of lines in debugfs logs

On Wed, 8 Mar 2023 at 06:39, Rae Moar <rmoar@...gle.com> 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@...gle.com>
> ---

Looks good to me.

Reviewed-by: David Gow <davidgow@...gle.com>

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
>

Download attachment "smime.p7s" of type "application/pkcs7-signature" (4003 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ