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