Message ID | 20221104194705.3245738-1-rmoar@google.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp604051wru; Fri, 4 Nov 2022 12:48:31 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4GuE1/Zn8lQuuzE/I8BbHMjm8XwfUt1hb3AW/Rw6z43bO2HgWE2T3VTVXzYZ/YKWR7PWRk X-Received: by 2002:a05:6a00:1706:b0:56d:3028:23f0 with SMTP id h6-20020a056a00170600b0056d302823f0mr33596975pfc.59.1667591311016; Fri, 04 Nov 2022 12:48:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667591311; cv=none; d=google.com; s=arc-20160816; b=pNrkU1gHlJzSGTD7rK8iYp2fQ5gg1Qwz4JcK8/n7UxvTeKRN71s2MtjQ2FrmyAnDXT CKBtftoo8nG0KN/jdaH1qPD8RQGl1Lhlc2XgQSMXbSI7Bgez6FUcWUnF50TbeDyg9Gw8 hNAa5betXi1RluC/TGAL6Ot+dJYXi93gbWE4a7Gz5PZbGRit5V9VyNjs2G7lcQ24sNSz VpfU3yqbxHsR58uLy6GC8OU4L2TcaoIZW4k7npYVpbwAtwcsoi4r2SVsdaVsq67LGSbw Tu3KYA1xdeYLB7VE2T3yPe5kiK+XHkwcfEZrORE0iw9zMOpSDNfadayNR5OC4Mc8TDtP fRkg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:message-id:mime-version:date :dkim-signature; bh=2bUeD5ryefkaAP3EviNA21y9Ow7pZ1M96u/IoQ0qxoI=; b=Yn+rnf/KYAwk3jWof0feGIWxt6QLB4zzNFRhbnSVNYYWDgPlsGt3IYVUBg0TRjr26G zWnUm9jcYrooOe46PKF/rkV9r/T16taydEGgx/AWL4HMYoH2WXCb3QZnywLDPOGa89PS 7HReR0YlW9ruJlnGZdhEhhnfzlxkvdbrxh2Qmsj0Sw5tGQYYTjcclJ4gsRwDg7UOuC3g FUnRYm1Q9MpQfmRUgNLq9NQYn+6FXsqZwu6iZB0SUlKi/myHGK47zk1dDHLw88oIxyCI k3hm8dPy3+XdC5XH8pLkIGp5X5k2xdz8MtOHPC3HyokKgpw3lRcNyK1JoCGJcIiPHDft jNOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=YaMKPHlx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id az8-20020a170902a58800b00174f3a4935fsi389371plb.249.2022.11.04.12.48.16; Fri, 04 Nov 2022 12:48:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=YaMKPHlx; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229648AbiKDTsN (ORCPT <rfc822;hjfbswb@gmail.com> + 99 others); Fri, 4 Nov 2022 15:48:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41704 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229619AbiKDTsL (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 4 Nov 2022 15:48:11 -0400 Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A74402C665 for <linux-kernel@vger.kernel.org>; Fri, 4 Nov 2022 12:48:09 -0700 (PDT) Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-373582569edso54735697b3.2 for <linux-kernel@vger.kernel.org>; Fri, 04 Nov 2022 12:48:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=2bUeD5ryefkaAP3EviNA21y9Ow7pZ1M96u/IoQ0qxoI=; b=YaMKPHlxllqPZ2vZAbyCAJhIsE2fCVjETNrDBwTKTaMYWSnJY/XMvkmxwORj69K0sq 0BtGbu/xP2uIqvv+taFyl3bA6mjZ3G7OGW3dg8QBDW2Gni38+3BviMEaJBpPrZ5Ubf6H Qc8YNfqdAp9oCJHMvyPZYcU99U4EGRi7twWVQ/jSsbGdJEGVUyeC07T0eau1msopD2D5 wngbzRBrXgoxvgt+6TbATOp6wukwI2wy0Kz5lq2iFy4B3Snv9aKONfSGDYuVvAP8To4w Mp1/45dn8qs2+VwioIE9vxGzTL/J9iNtLFgxmZBGAQuQvQNggXRs1ezIzoixl7V18vBk 1A2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=2bUeD5ryefkaAP3EviNA21y9Ow7pZ1M96u/IoQ0qxoI=; b=AIoUTZ6Guhov5Mkncqx6G/cxiyJWRAxtsIraLtJz4Al5aXEfhhK+k4/HnsMAyRfyIL FM4noshGiaBvwniCSG0h7g2/mE1JmNBrgAkcYtzo8q/9D8xbKku/L/jEZBAsx82hGp/1 b5sd4F45gole03+8dMnPBCASldld0FyelxP6bwPVdhSzJFXqJC7kQZ9kJIsoaKgX8g8+ D+2yWgGtLoSj1dLbBEk8ccP8unexzXvCficArCSd+VHTIDjy4Vc+VWk89/hV22VMfKwf zYQWuzay90gV0kY8lv5Yr2LVdbi2bfoqPvSg/4bcCDi5QeNKT7IXaVaiKu7TCCHTj+YR 6A9A== X-Gm-Message-State: ACrzQf2EoF8relBNd1m9GY/y9fiZfXImy+KJPheAdhWCyUQCX8aJxdTG 9IpnhSrng16Qdfv88UCYvXzzXKqjvg== X-Received: from rmoar.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:4259]) (user=rmoar job=sendgmr) by 2002:a81:17d1:0:b0:36a:6185:fb06 with SMTP id 200-20020a8117d1000000b0036a6185fb06mr35749150ywx.351.1667591289013; Fri, 04 Nov 2022 12:48:09 -0700 (PDT) Date: Fri, 4 Nov 2022 19:47:04 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.38.1.431.g37b22c650d-goog Message-ID: <20221104194705.3245738-1-rmoar@google.com> Subject: [PATCH v1 1/2] kunit: improve KTAP compliance of KUnit test output From: Rae Moar <rmoar@google.com> To: brendanhiggins@google.com, davidgow@google.com, dlatypov@google.com Cc: skhan@linuxfoundation.org, mauro.chehab@linux.intel.com, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Rae Moar <rmoar@google.com> Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1748596226860107652?= X-GMAIL-MSGID: =?utf-8?q?1748596226860107652?= |
Series |
[v1,1/2] kunit: improve KTAP compliance of KUnit test output
|
|
Commit Message
Rae Moar
Nov. 4, 2022, 7:47 p.m. UTC
Change KUnit test output to comply with KTAP version 1 specifications
found here: https://kernel.org/doc/html/latest/dev-tools/ktap.html.
1) Use "KTAP version 1" instead of "TAP version 14" as test output header
2) Remove '-' between test number and test name on test result lines
2) Add KTAP version lines to each subtest header as well
Original output:
TAP version 14
1..1
# Subtest: kunit-test-suite
1..3
ok 1 - kunit_test_1
ok 2 - kunit_test_2
ok 3 - kunit_test_3
# kunit-test-suite: pass:3 fail:0 skip:0 total:3
# Totals: pass:3 fail:0 skip:0 total:3
ok 1 - kunit-test-suite
New output:
KTAP version 1
1..1
# Subtest: kunit-test-suite
KTAP version 1
1..3
ok 1 kunit_test_1
ok 2 kunit_test_2
ok 3 kunit_test_3
# kunit-test-suite: pass:3 fail:0 skip:0 total:3
# Totals: pass:3 fail:0 skip:0 total:3
ok 1 kunit-test-suite
Signed-off-by: Rae Moar <rmoar@google.com>
---
lib/kunit/executor.c | 6 +++---
lib/kunit/test.c | 5 +++--
2 files changed, 6 insertions(+), 5 deletions(-)
base-commit: 6fe1ad4a156095859721fef85073df3ed43081d4
Comments
On Fri, Nov 4, 2022 at 12:48 PM Rae Moar <rmoar@google.com> wrote: > > Change KUnit test output to comply with KTAP version 1 specifications > found here: https://kernel.org/doc/html/latest/dev-tools/ktap.html. > 1) Use "KTAP version 1" instead of "TAP version 14" as test output header > 2) Remove '-' between test number and test name on test result lines > 2) Add KTAP version lines to each subtest header as well > > Original output: > > TAP version 14 > 1..1 > # Subtest: kunit-test-suite > 1..3 > ok 1 - kunit_test_1 > ok 2 - kunit_test_2 > ok 3 - kunit_test_3 > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > # Totals: pass:3 fail:0 skip:0 total:3 > ok 1 - kunit-test-suite > > New output: > > KTAP version 1 > 1..1 > # Subtest: kunit-test-suite > KTAP version 1 > 1..3 > ok 1 kunit_test_1 > ok 2 kunit_test_2 > ok 3 kunit_test_3 > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > # Totals: pass:3 fail:0 skip:0 total:3 > ok 1 kunit-test-suite > > Signed-off-by: Rae Moar <rmoar@google.com> Reviewed-by: Daniel Latypov <dlatypov@google.com> I had been worried initially that this needed kunit_parser.py changes to work. But it doesn't, this change can go in now with minimal side effects. More details below: This code treats the new "KTAP version 1" subheaders as random kernel output, so it puts it into the `test.log` E.g. if I change to `not ok 1 kunit_test_1`, it'll print KTAP version 1 1..3 not ok 1 kunit_test_1 After the next patch, it just prints not ok 1 kunit_test_1 This bit of extra output on failure is something we can live with, esp. since it gets addressed by the next patch.
On Sat, Nov 5, 2022 at 3:48 AM Rae Moar <rmoar@google.com> wrote: > > Change KUnit test output to comply with KTAP version 1 specifications > found here: https://kernel.org/doc/html/latest/dev-tools/ktap.html. > 1) Use "KTAP version 1" instead of "TAP version 14" as test output header > 2) Remove '-' between test number and test name on test result lines > 2) Add KTAP version lines to each subtest header as well > > Original output: > > TAP version 14 > 1..1 > # Subtest: kunit-test-suite > 1..3 > ok 1 - kunit_test_1 > ok 2 - kunit_test_2 > ok 3 - kunit_test_3 > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > # Totals: pass:3 fail:0 skip:0 total:3 > ok 1 - kunit-test-suite > > New output: > > KTAP version 1 > 1..1 > # Subtest: kunit-test-suite > KTAP version 1 > 1..3 > ok 1 kunit_test_1 > ok 2 kunit_test_2 > ok 3 kunit_test_3 > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > # Totals: pass:3 fail:0 skip:0 total:3 > ok 1 kunit-test-suite > > Signed-off-by: Rae Moar <rmoar@google.com> > --- Thanks very much for doing this. It's always been slightly embarrassing that we weren't perfectly following our own spec! I think this series is good enough, but have a minor suggestion: could we swap the order of these two patches? I'd rather have the parser changes go in first. I'd also be curious to see if this is likely to break anyone else's (K)TAP parsers. +Isabella, Anders: do these changes break the IGT or LKFT TAP/KTAP parsing? From a quick look at [1] and [2], we're probably okay?? [1]: https://gitlab.freedesktop.org/isinyaaa/igt-gpu-tools/-/commit/1a84306425e975377eb79c031bf1de147bd44e46 [2]: https://github.com/Linaro/test-definitions/blob/master/automated/linux/kunit/kunit.sh I also looked into the possibility of moving or removing the Subtest line, but upon further thought (see below), it's probably best to keep it as-is here for now. That should be the closest to the current spec, and we can possibly find a better way to provide the name in KTAPv2. Reviewed-by: David Gow <davidgow@google.com> Cheers, -- David > lib/kunit/executor.c | 6 +++--- > lib/kunit/test.c | 5 +++-- > 2 files changed, 6 insertions(+), 5 deletions(-) > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > index 9bbc422c284b..74982b83707c 100644 > --- a/lib/kunit/executor.c > +++ b/lib/kunit/executor.c > @@ -166,7 +166,7 @@ static void kunit_exec_run_tests(struct suite_set *suite_set) > { > size_t num_suites = suite_set->end - suite_set->start; > > - pr_info("TAP version 14\n"); > + pr_info("KTAP version 1\n"); > pr_info("1..%zu\n", num_suites); > > __kunit_test_suites_init(suite_set->start, num_suites); > @@ -177,8 +177,8 @@ static void kunit_exec_list_tests(struct suite_set *suite_set) > struct kunit_suite * const *suites; > struct kunit_case *test_case; > > - /* Hack: print a tap header so kunit.py can find the start of KUnit output. */ > - pr_info("TAP version 14\n"); > + /* Hack: print a ktap header so kunit.py can find the start of KUnit output. */ > + pr_info("KTAP version 1\n"); > > for (suites = suite_set->start; suites < suite_set->end; suites++) > kunit_suite_for_each_test_case((*suites), test_case) { > diff --git a/lib/kunit/test.c b/lib/kunit/test.c > index 90640a43cf62..b541d59a05c3 100644 > --- a/lib/kunit/test.c > +++ b/lib/kunit/test.c > @@ -151,6 +151,7 @@ static void kunit_print_suite_start(struct kunit_suite *suite) > { > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s", > suite->name); > + kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n"); Would it make sense to have the Subtest line _after_ the KTAP line here? Given KTAP doesn't specify the "Subtest" line at all, I guess it doesn't matter. A part of me feels that the "KTAP version 1" line should be the _first_ line of the subtest output, but that would introduce a line between it and the test plan, which goes against the spec. We could also just get rid of the "Subtest" line, given it's not technically required, though having the test name before the results is really useful. Having tried all three options while writing this email, I think it's probably best to leave this patch as is (with the Subtest line followed by the KTAP line), and discuss standardising something similar as part of the KTAP v2 spec. > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "1..%zd", > kunit_suite_num_test_cases(suite)); > } > @@ -175,13 +176,13 @@ static void kunit_print_ok_not_ok(void *test_or_suite, > * representation. > */ > if (suite) > - pr_info("%s %zd - %s%s%s\n", > + pr_info("%s %zd %s%s%s\n", > kunit_status_to_ok_not_ok(status), > test_number, description, directive_header, > (status == KUNIT_SKIPPED) ? directive : ""); > else > kunit_log(KERN_INFO, test, > - KUNIT_SUBTEST_INDENT "%s %zd - %s%s%s", > + KUNIT_SUBTEST_INDENT "%s %zd %s%s%s", > kunit_status_to_ok_not_ok(status), > test_number, description, directive_header, > (status == KUNIT_SKIPPED) ? directive : ""); > > base-commit: 6fe1ad4a156095859721fef85073df3ed43081d4 > -- > 2.38.1.431.g37b22c650d-goog >
On Tue, Nov 15, 2022 at 2:27 AM David Gow <davidgow@google.com> wrote: > > On Sat, Nov 5, 2022 at 3:48 AM Rae Moar <rmoar@google.com> wrote: > > > > Change KUnit test output to comply with KTAP version 1 specifications > > found here: https://kernel.org/doc/html/latest/dev-tools/ktap.html. > > 1) Use "KTAP version 1" instead of "TAP version 14" as test output header > > 2) Remove '-' between test number and test name on test result lines > > 2) Add KTAP version lines to each subtest header as well > > > > Original output: > > > > TAP version 14 > > 1..1 > > # Subtest: kunit-test-suite > > 1..3 > > ok 1 - kunit_test_1 > > ok 2 - kunit_test_2 > > ok 3 - kunit_test_3 > > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > > # Totals: pass:3 fail:0 skip:0 total:3 > > ok 1 - kunit-test-suite > > > > New output: > > > > KTAP version 1 > > 1..1 > > # Subtest: kunit-test-suite > > KTAP version 1 > > 1..3 > > ok 1 kunit_test_1 > > ok 2 kunit_test_2 > > ok 3 kunit_test_3 > > # kunit-test-suite: pass:3 fail:0 skip:0 total:3 > > # Totals: pass:3 fail:0 skip:0 total:3 > > ok 1 kunit-test-suite > > > > Signed-off-by: Rae Moar <rmoar@google.com> > > --- > > Thanks very much for doing this. It's always been slightly > embarrassing that we weren't perfectly following our own spec! > > I think this series is good enough, but have a minor suggestion: could > we swap the order of these two patches? > I'd rather have the parser changes go in first. Hi David! Yes, I agree. I think it does make more sense to provide KTAP compatibility with the parser before changing the test output. This would also help to solve the issue that Daniel brought up on this patch about the "KTAP version 1" line and test plan being stored in the test.log as random kernel output. I will swap the patches in the v2 of this patch series. > > I'd also be curious to see if this is likely to break anyone else's > (K)TAP parsers. > > +Isabella, Anders: do these changes break the IGT or LKFT TAP/KTAP > parsing? From a quick look at [1] and [2], we're probably okay?? > > [1]: https://gitlab.freedesktop.org/isinyaaa/igt-gpu-tools/-/commit/1a84306425e975377eb79c031bf1de147bd44e46 > [2]: https://github.com/Linaro/test-definitions/blob/master/automated/linux/kunit/kunit.sh > > I also looked into the possibility of moving or removing the Subtest > line, but upon further thought (see below), it's probably best to keep > it as-is here for now. That should be the closest to the current spec, > and we can possibly find a better way to provide the name in KTAPv2. > > Reviewed-by: David Gow <davidgow@google.com> > > Cheers, > -- David > > > lib/kunit/executor.c | 6 +++--- > > lib/kunit/test.c | 5 +++-- > > 2 files changed, 6 insertions(+), 5 deletions(-) > > > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > > index 9bbc422c284b..74982b83707c 100644 > > --- a/lib/kunit/executor.c > > +++ b/lib/kunit/executor.c > > @@ -166,7 +166,7 @@ static void kunit_exec_run_tests(struct suite_set *suite_set) > > { > > size_t num_suites = suite_set->end - suite_set->start; > > > > - pr_info("TAP version 14\n"); > > + pr_info("KTAP version 1\n"); > > pr_info("1..%zu\n", num_suites); > > > > __kunit_test_suites_init(suite_set->start, num_suites); > > @@ -177,8 +177,8 @@ static void kunit_exec_list_tests(struct suite_set *suite_set) > > struct kunit_suite * const *suites; > > struct kunit_case *test_case; > > > > - /* Hack: print a tap header so kunit.py can find the start of KUnit output. */ > > - pr_info("TAP version 14\n"); > > + /* Hack: print a ktap header so kunit.py can find the start of KUnit output. */ > > + pr_info("KTAP version 1\n"); > > > > for (suites = suite_set->start; suites < suite_set->end; suites++) > > kunit_suite_for_each_test_case((*suites), test_case) { > > diff --git a/lib/kunit/test.c b/lib/kunit/test.c > > index 90640a43cf62..b541d59a05c3 100644 > > --- a/lib/kunit/test.c > > +++ b/lib/kunit/test.c > > @@ -151,6 +151,7 @@ static void kunit_print_suite_start(struct kunit_suite *suite) > > { > > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s", > > suite->name); > > + kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n"); > > Would it make sense to have the Subtest line _after_ the KTAP line here? > > Given KTAP doesn't specify the "Subtest" line at all, I guess it doesn't matter. > > A part of me feels that the "KTAP version 1" line should be the > _first_ line of the subtest output, but that would introduce a line > between it and the test plan, which goes against the spec. > > We could also just get rid of the "Subtest" line, given it's not > technically required, though having the test name before the results > is really useful. > > Having tried all three options while writing this email, I think it's > probably best to leave this patch as is (with the Subtest line > followed by the KTAP line), and discuss standardising something > similar as part of the KTAP v2 spec. > I also struggle to decide how the "Subtest" line should be handled. Since the current KTAP v1 spec does not provide a way to declare the name of a test with subtests prior to the results, I think it is important to continue to include this Subtest line because it provides that functionality. Additionally, the line is not expected to be very disruptive for other parsers because it is read as a diagnostic line. The location of the "Subtest" line before the KTAP version line is potentially not the most optimal but it seems to be the best choice while ensuring compatibility with the current KTAP v1 spec. I recommend that we discuss a standardized replacement for this "Subtest" line in the KTAP v2 spec. > > > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "1..%zd", > > kunit_suite_num_test_cases(suite)); > > } > > @@ -175,13 +176,13 @@ static void kunit_print_ok_not_ok(void *test_or_suite, > > * representation. > > */ > > if (suite) > > - pr_info("%s %zd - %s%s%s\n", > > + pr_info("%s %zd %s%s%s\n", > > kunit_status_to_ok_not_ok(status), > > test_number, description, directive_header, > > (status == KUNIT_SKIPPED) ? directive : ""); > > else > > kunit_log(KERN_INFO, test, > > - KUNIT_SUBTEST_INDENT "%s %zd - %s%s%s", > > + KUNIT_SUBTEST_INDENT "%s %zd %s%s%s", > > kunit_status_to_ok_not_ok(status), > > test_number, description, directive_header, > > (status == KUNIT_SKIPPED) ? directive : ""); > > > > base-commit: 6fe1ad4a156095859721fef85073df3ed43081d4 > > -- > > 2.38.1.431.g37b22c650d-goog > >
On Tue, Nov 15, 2022 at 12:18 PM Rae Moar <rmoar@google.com> wrote: > Yes, I agree. I think it does make more sense to provide KTAP > compatibility with the parser before changing the test output. This > would also help to solve the issue that Daniel brought up on this > patch about the "KTAP version 1" line and test plan being stored > in the test.log as random kernel output. I will swap the patches in > the v2 of this patch series. > > > > > I'd also be curious to see if this is likely to break anyone else's > > (K)TAP parsers. > > > > +Isabella, Anders: do these changes break the IGT or LKFT TAP/KTAP > > parsing? From a quick look at [1] and [2], we're probably okay?? > > > > [1]: https://gitlab.freedesktop.org/isinyaaa/igt-gpu-tools/-/commit/1a84306425e975377eb79c031bf1de147bd44e46 > > [2]: https://github.com/Linaro/test-definitions/blob/master/automated/linux/kunit/kunit.sh > > > > I also looked into the possibility of moving or removing the Subtest > > line, but upon further thought (see below), it's probably best to keep > > it as-is here for now. That should be the closest to the current spec, > > and we can possibly find a better way to provide the name in KTAPv2. > > > > Reviewed-by: David Gow <davidgow@google.com> > > > > Cheers, > > -- David > > > > > lib/kunit/executor.c | 6 +++--- > > > lib/kunit/test.c | 5 +++-- > > > 2 files changed, 6 insertions(+), 5 deletions(-) > > > > > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > > > index 9bbc422c284b..74982b83707c 100644 > > > --- a/lib/kunit/executor.c > > > +++ b/lib/kunit/executor.c > > > @@ -166,7 +166,7 @@ static void kunit_exec_run_tests(struct suite_set *suite_set) > > > { > > > size_t num_suites = suite_set->end - suite_set->start; > > > > > > - pr_info("TAP version 14\n"); > > > + pr_info("KTAP version 1\n"); > > > pr_info("1..%zu\n", num_suites); > > > > > > __kunit_test_suites_init(suite_set->start, num_suites); > > > @@ -177,8 +177,8 @@ static void kunit_exec_list_tests(struct suite_set *suite_set) > > > struct kunit_suite * const *suites; > > > struct kunit_case *test_case; > > > > > > - /* Hack: print a tap header so kunit.py can find the start of KUnit output. */ > > > - pr_info("TAP version 14\n"); > > > + /* Hack: print a ktap header so kunit.py can find the start of KUnit output. */ > > > + pr_info("KTAP version 1\n"); > > > > > > for (suites = suite_set->start; suites < suite_set->end; suites++) > > > kunit_suite_for_each_test_case((*suites), test_case) { > > > diff --git a/lib/kunit/test.c b/lib/kunit/test.c > > > index 90640a43cf62..b541d59a05c3 100644 > > > --- a/lib/kunit/test.c > > > +++ b/lib/kunit/test.c > > > @@ -151,6 +151,7 @@ static void kunit_print_suite_start(struct kunit_suite *suite) > > > { > > > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s", > > > suite->name); > > > + kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n"); > > > > Would it make sense to have the Subtest line _after_ the KTAP line here? > > > > Given KTAP doesn't specify the "Subtest" line at all, I guess it doesn't matter. > > > > A part of me feels that the "KTAP version 1" line should be the > > _first_ line of the subtest output, but that would introduce a line > > between it and the test plan, which goes against the spec. > > > > We could also just get rid of the "Subtest" line, given it's not > > technically required, though having the test name before the results > > is really useful. > > > > Having tried all three options while writing this email, I think it's > > probably best to leave this patch as is (with the Subtest line > > followed by the KTAP line), and discuss standardising something > > similar as part of the KTAP v2 spec. > > > > I also struggle to decide how the "Subtest" line should be handled. Since > the current KTAP v1 spec does not provide a way to declare the name of > a test with subtests prior to the results, I think it is important to continue > to include this Subtest line because it provides that functionality. > Additionally, > the line is not expected to be very disruptive for other parsers because it > is read as a diagnostic line. Yeah, since it's going to be ignored as a diagnostic line, I think we're largely free to put it where we want? I'm actually leaning towards making things more uniform e.g. KTAP version 1 # Subtest: optionally set for the top-level test! 1..2 KTAP version 1 # Subtest: suite1 1..1 ok 1 - test1 ok 1 -suite1 // etc. Then we can simplify the parser by not differentiating (as much) between the top-level test and subtests. This also simplifies parsing multiple KTAP documents (e.g. for supporting modules, etc.) We'll probably talk about this offline soon, but I wanted to put this out there. Daniel > > The location of the "Subtest" line before the KTAP version line is potentially > not the most optimal but it seems to be the best choice while ensuring > compatibility with the current KTAP v1 spec. I recommend that we discuss > a standardized replacement for this "Subtest" line in the KTAP v2 spec.
On Tue, Nov 15, 2022 at 5:41 PM Daniel Latypov <dlatypov@google.com> wrote: > > On Tue, Nov 15, 2022 at 12:18 PM Rae Moar <rmoar@google.com> wrote: > > Yes, I agree. I think it does make more sense to provide KTAP > > compatibility with the parser before changing the test output. This > > would also help to solve the issue that Daniel brought up on this > > patch about the "KTAP version 1" line and test plan being stored > > in the test.log as random kernel output. I will swap the patches in > > the v2 of this patch series. > > > > > > > > I'd also be curious to see if this is likely to break anyone else's > > > (K)TAP parsers. > > > > > > +Isabella, Anders: do these changes break the IGT or LKFT TAP/KTAP > > > parsing? From a quick look at [1] and [2], we're probably okay?? > > > > > > [1]: https://gitlab.freedesktop.org/isinyaaa/igt-gpu-tools/-/commit/1a84306425e975377eb79c031bf1de147bd44e46 > > > [2]: https://github.com/Linaro/test-definitions/blob/master/automated/linux/kunit/kunit.sh > > > > > > I also looked into the possibility of moving or removing the Subtest > > > line, but upon further thought (see below), it's probably best to keep > > > it as-is here for now. That should be the closest to the current spec, > > > and we can possibly find a better way to provide the name in KTAPv2. > > > > > > Reviewed-by: David Gow <davidgow@google.com> > > > > > > Cheers, > > > -- David > > > > > > > lib/kunit/executor.c | 6 +++--- > > > > lib/kunit/test.c | 5 +++-- > > > > 2 files changed, 6 insertions(+), 5 deletions(-) > > > > > > > > diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c > > > > index 9bbc422c284b..74982b83707c 100644 > > > > --- a/lib/kunit/executor.c > > > > +++ b/lib/kunit/executor.c > > > > @@ -166,7 +166,7 @@ static void kunit_exec_run_tests(struct suite_set *suite_set) > > > > { > > > > size_t num_suites = suite_set->end - suite_set->start; > > > > > > > > - pr_info("TAP version 14\n"); > > > > + pr_info("KTAP version 1\n"); > > > > pr_info("1..%zu\n", num_suites); > > > > > > > > __kunit_test_suites_init(suite_set->start, num_suites); > > > > @@ -177,8 +177,8 @@ static void kunit_exec_list_tests(struct suite_set *suite_set) > > > > struct kunit_suite * const *suites; > > > > struct kunit_case *test_case; > > > > > > > > - /* Hack: print a tap header so kunit.py can find the start of KUnit output. */ > > > > - pr_info("TAP version 14\n"); > > > > + /* Hack: print a ktap header so kunit.py can find the start of KUnit output. */ > > > > + pr_info("KTAP version 1\n"); > > > > > > > > for (suites = suite_set->start; suites < suite_set->end; suites++) > > > > kunit_suite_for_each_test_case((*suites), test_case) { > > > > diff --git a/lib/kunit/test.c b/lib/kunit/test.c > > > > index 90640a43cf62..b541d59a05c3 100644 > > > > --- a/lib/kunit/test.c > > > > +++ b/lib/kunit/test.c > > > > @@ -151,6 +151,7 @@ static void kunit_print_suite_start(struct kunit_suite *suite) > > > > { > > > > kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s", > > > > suite->name); > > > > + kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n"); > > > > > > Would it make sense to have the Subtest line _after_ the KTAP line here? > > > > > > Given KTAP doesn't specify the "Subtest" line at all, I guess it doesn't matter. > > > > > > A part of me feels that the "KTAP version 1" line should be the > > > _first_ line of the subtest output, but that would introduce a line > > > between it and the test plan, which goes against the spec. > > > > > > We could also just get rid of the "Subtest" line, given it's not > > > technically required, though having the test name before the results > > > is really useful. > > > > > > Having tried all three options while writing this email, I think it's > > > probably best to leave this patch as is (with the Subtest line > > > followed by the KTAP line), and discuss standardising something > > > similar as part of the KTAP v2 spec. > > > > > > > I also struggle to decide how the "Subtest" line should be handled. Since > > the current KTAP v1 spec does not provide a way to declare the name of > > a test with subtests prior to the results, I think it is important to continue > > to include this Subtest line because it provides that functionality. > > Additionally, > > the line is not expected to be very disruptive for other parsers because it > > is read as a diagnostic line. > > Yeah, since it's going to be ignored as a diagnostic line, I think > we're largely free to put it where we want? > > I'm actually leaning towards making things more uniform e.g. > > KTAP version 1 > # Subtest: optionally set for the top-level test! > 1..2 > KTAP version 1 > # Subtest: suite1 > 1..1 > ok 1 - test1 > ok 1 -suite1 > // etc. > > Then we can simplify the parser by not differentiating (as much) > between the top-level test and subtests. > This also simplifies parsing multiple KTAP documents (e.g. for > supporting modules, etc.) > > We'll probably talk about this offline soon, but I wanted to put this out there. > > Daniel > This was partially discussed off the mailing list. I am still a bit wary to change the output to this format because it is not strictly compliant with the KTAP v1 spec which requires the test plan to be the line directly below the version line. However, I do think that this location makes much more sense for the "# Subtest" line and since this is a diagnostic line and likely won't break any existing parsers, I will be changing to this format in v2 as well as adjusting the parser to allow for this format instead. The optional top-level "# Subtest" line was also discussed off the mailing list. It was generally agreed that this could be useful in the future but not as an addition for this patch. However, the parser should be altered such that if the line is present, the parser will not crash but also not actively print the provided test name. As discussed previously in this patch series, a test name line could be helpful to propose for KTAP v2 as a replacement to this "# Subtest" line, which is present in the TAP version 14 spec. Rae > > > > > The location of the "Subtest" line before the KTAP version line is potentially > > not the most optimal but it seems to be the best choice while ensuring > > compatibility with the current KTAP v1 spec. I recommend that we discuss > > a standardized replacement for this "Subtest" line in the KTAP v2 spec.
diff --git a/lib/kunit/executor.c b/lib/kunit/executor.c index 9bbc422c284b..74982b83707c 100644 --- a/lib/kunit/executor.c +++ b/lib/kunit/executor.c @@ -166,7 +166,7 @@ static void kunit_exec_run_tests(struct suite_set *suite_set) { size_t num_suites = suite_set->end - suite_set->start; - pr_info("TAP version 14\n"); + pr_info("KTAP version 1\n"); pr_info("1..%zu\n", num_suites); __kunit_test_suites_init(suite_set->start, num_suites); @@ -177,8 +177,8 @@ static void kunit_exec_list_tests(struct suite_set *suite_set) struct kunit_suite * const *suites; struct kunit_case *test_case; - /* Hack: print a tap header so kunit.py can find the start of KUnit output. */ - pr_info("TAP version 14\n"); + /* Hack: print a ktap header so kunit.py can find the start of KUnit output. */ + pr_info("KTAP version 1\n"); for (suites = suite_set->start; suites < suite_set->end; suites++) kunit_suite_for_each_test_case((*suites), test_case) { diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 90640a43cf62..b541d59a05c3 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -151,6 +151,7 @@ static void kunit_print_suite_start(struct kunit_suite *suite) { kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "# Subtest: %s", suite->name); + kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "KTAP version 1\n"); kunit_log(KERN_INFO, suite, KUNIT_SUBTEST_INDENT "1..%zd", kunit_suite_num_test_cases(suite)); } @@ -175,13 +176,13 @@ static void kunit_print_ok_not_ok(void *test_or_suite, * representation. */ if (suite) - pr_info("%s %zd - %s%s%s\n", + pr_info("%s %zd %s%s%s\n", kunit_status_to_ok_not_ok(status), test_number, description, directive_header, (status == KUNIT_SKIPPED) ? directive : ""); else kunit_log(KERN_INFO, test, - KUNIT_SUBTEST_INDENT "%s %zd - %s%s%s", + KUNIT_SUBTEST_INDENT "%s %zd %s%s%s", kunit_status_to_ok_not_ok(status), test_number, description, directive_header, (status == KUNIT_SKIPPED) ? directive : "");