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

From: David Gow
Date: Wed Mar 08 2023 - 00:05:19 EST


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