From patchwork Tue Mar 7 22:39:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 65930 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp7374wrd; Tue, 7 Mar 2023 14:57:39 -0800 (PST) X-Google-Smtp-Source: AK7set8bsSauk2FpuqVHW/RA86tdYP3kxceoxwxnt9gUedCQmCMMSkfJIIbJZmXz8cbhKifJnJfs X-Received: by 2002:aa7:da96:0:b0:49d:a60f:7827 with SMTP id q22-20020aa7da96000000b0049da60f7827mr14962733eds.6.1678229859095; Tue, 07 Mar 2023 14:57:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678229859; cv=none; d=google.com; s=arc-20160816; b=b2cghozonNy0SuxFp4UnQUbDSaYjanpjcAR5aTx0vBulPZ1ZcHrWkQ6Yq84XTrFJhp uXpLn1si194CPtPCfZd5eTdSVyTcQZYEIeKhYk/bGr8lIV4SNs+yUsFEIo4+xAZQnXNX X/EgF//LDUuJtF6z3kvSUXYX5sLBX0PX9OxxDXbdOyxZQMqBD/z/3T5kC9kb+RwrVKpH FBbgnCezbESlzr4r14YHnotgqK5p3RCoj9sY8lga8M3mAcQ81sxnEbubrGCTodVvL0sG 4m6cMk1WVvugMAA4TYuSSJ73b3BeslB3Fy8gnN8pC2x1yOAua8DEoN2TqEvvD3+xc/6L U3wg== 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=d5sV/9QBhMVgVGTAWq7/DnOA4YA0+xQYxnQrYod4TUo=; b=RbIU/AfGg2dfmv+4/uXrZQIMS2rVNoiIZ+4h+h8jXHHkv7qMqv5KizNtvkZUIqBcvl vXmf4EM85tWpg0W40WItrPsmlTQiOly36z3r89OYL0nKhKVUREyY6kFcbbfL/0KhiJ29 9oi6L8QfEZoKr2XtQUtdZb+8P+GCnywtEt/VswyF64KVQQ9/d9r7NcWQSTk03PzTo4BP ASKVh6dKRQ8KuwsCPE7hT+qu6MRdpS2kmB/oPXiGkhQnt9lF7QMS1bDGlBT/3gW/Hll/ mg5PAzOHd7KBDBn3m5oLf9zyk1O8WaiD45b3jc04kMisA63YjKaiJ2iBJDbmngCE1Srx BbbA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=hhrXN3bO; 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 k9-20020a170906158900b008c8165f7c25si935213ejd.951.2023.03.07.14.57.14; Tue, 07 Mar 2023 14:57:39 -0800 (PST) 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=hhrXN3bO; 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 S231657AbjCGWkm (ORCPT + 99 others); Tue, 7 Mar 2023 17:40:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231983AbjCGWkP (ORCPT ); Tue, 7 Mar 2023 17:40:15 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCE37A2192 for ; Tue, 7 Mar 2023 14:39:41 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536a5a0b6e3so152190577b3.10 for ; Tue, 07 Mar 2023 14:39:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678228780; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=d5sV/9QBhMVgVGTAWq7/DnOA4YA0+xQYxnQrYod4TUo=; b=hhrXN3bOat3CTLco/yNvAbB70x8BJlerST3ZLVjOJzB7utq6BOLTd7rIV7HndRvIFK GIGvF1jH9qZWEqLuYbNVOERQUuL0SbhQOLbQA2TgYZnzzt5ttwCFjX9yZXyXAcJMb3ob WM/E3UgrXVANjxIgyI19FkuQeGNLwU4c0ESoHihWk2Cbu6ylYm0PAPEEUfrYGdY4MhHc cvdzR1Y2pucigncVY2XBxKvNVgwtcAruaoPTul2p7zy95FH44VOKVfffeK5Z4g/0f4Dj tyW0dLqKDFb/KzndpXfbmAdfnfjWzd6MPGcG+rvPk87FQGOX2XDKhLUiLdwfd4dpQbbc wO0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678228780; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=d5sV/9QBhMVgVGTAWq7/DnOA4YA0+xQYxnQrYod4TUo=; b=mvAZGqdCMidoUAHh2fxdvv+O09ym61XO/yAias2Thazr3fpPoK1QDRBi4yzx/a5x9m +P4hkj9V1srdw9VncjZqXRiBT1BHvJekjtcxXa7JvlIKickC4qlWtCAhOcyVbtQflY4K D3KPrMj7w36FwRN30yyNgftS+HOOQKTjEjdjz9iAJ8SvB0wmeTXuDydv/KzN6jZ/ntGm l7hnPXVp/ATVKCG2UBTTPWujlqYE8vKy1iSYVkCnGcI/ts1nfN9s44A4nG7NZHXNc3os /wpplvffSXgsEbpAkTDHGrdrKVd1ha64WtPSbsWYRf9GRSAOpVsz/nqBjrW/ywImBvKC y+hQ== X-Gm-Message-State: AO0yUKUzQxixImcTuWs+GbYzkN9mKHP7vt9HhPBn/NsfBmgEXH2DYIm7 C0utjyFpTro+PmEzzqMbJt3TM7HHcA== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a5b:bc6:0:b0:a0d:8150:be04 with SMTP id c6-20020a5b0bc6000000b00a0d8150be04mr7829283ybr.13.1678228780098; Tue, 07 Mar 2023 14:39:40 -0800 (PST) Date: Tue, 7 Mar 2023 22:39:35 +0000 Mime-Version: 1.0 X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Message-ID: <20230307223937.2892762-1-rmoar@google.com> Subject: [PATCH v3 1/3] kunit: fix bug in debugfs logs of parameterized tests From: Rae Moar To: brendanhiggins@google.com, davidgow@google.com, dlatypov@google.com Cc: skhan@linuxfoundation.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Rae Moar 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: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759751552579885340?= X-GMAIL-MSGID: =?utf-8?q?1759751552579885340?= Fix bug in debugfs logs that causes individual parameterized results to not appear because the log is reinitialized (cleared) when each parameter is run. Ensure these results appear in the debugfs logs, increase log size to allow for the size of parameterized results. As a result, append lines to the log directly rather than using an intermediate variable that can cause stack size warnings due to the increased log size. Here is the debugfs log of ext4_inode_test which uses parameterized tests before the fix: KTAP version 1 # Subtest: ext4_inode_test 1..1 # Totals: pass:16 fail:0 skip:0 total:16 ok 1 ext4_inode_test As you can see, this log does not include any of the individual parametrized results. After (in combination with the next two fixes to remove extra empty line and ensure KTAP valid format): KTAP version 1 1..1 KTAP version 1 # Subtest: ext4_inode_test 1..1 KTAP version 1 # Subtest: inode_test_xtimestamp_decoding ok 1 1901-12-13 Lower bound of 32bit < 0 timestamp, no extra bits ... (the rest of the individual parameterized tests) ok 16 2446-05-10 Upper bound of 32bit >=0 timestamp. All extra # inode_test_xtimestamp_decoding: pass:16 fail:0 skip:0 total:16 ok 1 inode_test_xtimestamp_decoding # Totals: pass:16 fail:0 skip:0 total:16 ok 1 ext4_inode_test Signed-off-by: Rae Moar Reviewed-by: David Gow Reviewed-by: David Gow --- Changes from v2 -> v3: - Fix a off-by-one bug in the kunit_log_append method. Changes from v1 -> v2: - Remove the use of the line variable in kunit_log_append that was causing stack size warnings. - Add before and after to the commit message. include/kunit/test.h | 2 +- lib/kunit/test.c | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) base-commit: 60684c2bd35064043360e6f716d1b7c20e967b7d diff --git a/include/kunit/test.h b/include/kunit/test.h index 08d3559dd703..0668d29f3453 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -34,7 +34,7 @@ DECLARE_STATIC_KEY_FALSE(kunit_running); struct kunit; /* Size of log associated with test. */ -#define KUNIT_LOG_SIZE 512 +#define KUNIT_LOG_SIZE 1500 /* Maximum size of parameter description string. */ #define KUNIT_PARAM_DESC_SIZE 128 diff --git a/lib/kunit/test.c b/lib/kunit/test.c index c9e15bb60058..c4d6304edd61 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -114,22 +114,27 @@ static void kunit_print_test_stats(struct kunit *test, */ void kunit_log_append(char *log, const char *fmt, ...) { - char line[KUNIT_LOG_SIZE]; va_list args; - int len_left; + int len, log_len, len_left; if (!log) return; - len_left = KUNIT_LOG_SIZE - strlen(log) - 1; + log_len = strlen(log); + len_left = KUNIT_LOG_SIZE - log_len - 1; if (len_left <= 0) return; + /* Evaluate length of line to add to log */ va_start(args, fmt); - vsnprintf(line, sizeof(line), fmt, args); + len = vsnprintf(NULL, 0, fmt, args) + 1; + va_end(args); + + /* Print formatted line to the log */ + va_start(args, fmt); + vsnprintf(log + log_len, min(len, len_left), fmt, args); va_end(args); - strncat(log, line, len_left); } EXPORT_SYMBOL_GPL(kunit_log_append); @@ -437,7 +442,6 @@ static void kunit_run_case_catch_errors(struct kunit_suite *suite, struct kunit_try_catch_context context; struct kunit_try_catch *try_catch; - kunit_init_test(test, test_case->name, test_case->log); try_catch = &test->try_catch; kunit_try_catch_init(try_catch, @@ -533,6 +537,8 @@ int kunit_run_tests(struct kunit_suite *suite) struct kunit_result_stats param_stats = { 0 }; test_case->status = KUNIT_SKIPPED; + kunit_init_test(&test, test_case->name, test_case->log); + if (!test_case->generate_params) { /* Non-parameterised test. */ kunit_run_case_catch_errors(suite, test_case, &test); From patchwork Tue Mar 7 22:39:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 65948 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp10655wrd; Tue, 7 Mar 2023 15:04:08 -0800 (PST) X-Google-Smtp-Source: AK7set9/nOg6mhSEpU/aZDUTKB/g4xF2eyMhN4BmoA21kXHqM4/Hei28EJVlRy5tcU5hMlE9LEPI X-Received: by 2002:aa7:ccd6:0:b0:4af:59c0:5add with SMTP id y22-20020aa7ccd6000000b004af59c05addmr14732114edt.37.1678230247885; Tue, 07 Mar 2023 15:04:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678230247; cv=none; d=google.com; s=arc-20160816; b=LGhQgVdFDvfkDWyLJ2vWB2nAa9WA5BAY+/gUzjzXRHORQXgikH3BY8X9QrVSfG2VgC MVB7w4VjKPaht0giO4M8AXsf+XYE4WWyxzLkh8NL/5TmuxjpjJqWLhnnZuLeO1WCHio6 WMBXmaFnV6aQPVFkdFuXDjxAY02h6AhRjhXWThga7YXGL6TExs7QLr5JiQ4LnnAwYYUB e465CqtCWDtNr90i2sA4XUPjs4gsMnAVx4xCWUIEfISaYfUDLW/Jb7QtdMBAXNQcwutQ nsUBK+EYf2sQCIATLqb9jjvPZFmUGk/x6YTL0WF171T93ds2q2dQ/ah4+/1oVR0lB2FN sCCA== 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:references :mime-version:in-reply-to:date:dkim-signature; bh=G0m+wgNwyQXDx71cttjdoVBrepsYMSw6ffiKtUf2MHw=; b=hsGaVXI/FCK3jv8F4mh5LNd5FLQVOx3osiKCKqy0PU4JShF6MamZj9DWUNNK8VdXnv ITyx/f5J8wycal5o7yjJV7q+kTR5ZjJHmhWyZD9Vk+gWjGtxlSeYDBZ1qQ5zCJD4IAk5 ZyXrPjVe26tU/M7t4rL/OknTKTVyzOE6rQB4ko7ZElX2vRmsRgW/RLKU4qcPOhKx1014 GixK0K3vkgUzCpxfOnznZAnZwDM75EufYbfwPCaJuc8oykvPTU72q5leFhdrxv68JOdA JdjnP/ZTE3J8vch+FDz11zmEnKpuutyPYSO+8U5nLkW2BImT/W9EbEFc+9ve2bjFTM70 DvGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=X5LqbGXd; 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 f7-20020a05640214c700b004c4e3eadf4asi9180513edx.562.2023.03.07.15.03.25; Tue, 07 Mar 2023 15:04:07 -0800 (PST) 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=X5LqbGXd; 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 S231754AbjCGWkp (ORCPT + 99 others); Tue, 7 Mar 2023 17:40:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232016AbjCGWkT (ORCPT ); Tue, 7 Mar 2023 17:40:19 -0500 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EAB0AB880 for ; Tue, 7 Mar 2023 14:39:44 -0800 (PST) Received: by mail-yb1-xb4a.google.com with SMTP id c192-20020a25c0c9000000b0092aabd4fa90so15706533ybf.18 for ; Tue, 07 Mar 2023 14:39:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678228781; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=G0m+wgNwyQXDx71cttjdoVBrepsYMSw6ffiKtUf2MHw=; b=X5LqbGXdAvEU2czHYh9xftsHEmkuGBvVMsrFKGr2asWHYaXTTKDIIrlqzsh4MpFMYN 82Gxjwh4AbB12injns+I421TdTrhMfTXWVSdz8XGyTB8qlvEfSphOvp7UsLF3cVTjpSo V6xDyKZefw8y/a30mo/RuuLvRW9AZrk4M/zpBjehQvuGg2L+v3l6UnKB5CZDm/NTYwZU gOfHcSNpTOOsEvKXdQXK0CTAGpdbztQouCraAsvcSYQxcX+5E7hXqAtmG6vWf/JTUn81 PM8tBzEB4jEgacL5x5/rswdnxaXjLzg7Rs2UEMHeKRVAk9P82a53io2iz7tcaaN+o4Xd O2nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678228781; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=G0m+wgNwyQXDx71cttjdoVBrepsYMSw6ffiKtUf2MHw=; b=5WiVZiVu8DUAAPDePtR1rzRzkIbhFpWUXuYXdtNhRcRvwNjSiZIR1VuP7DEgi4xjrB NxbY12USh3RizgorNBhnIS7qcg4JD8BJ7FgFxImcDuQPyy9hX8k9LnqQjWxidlrwdXRK E4w0eV+puqUsjKhRcQlw/L0LLuHkCcphwcpK6bF/p9EXkF+qdMfnfeE88bIjml9I91LE s8gO66lFotbtDBTCSgTDfTy2pZF0poA5MxGSO3Sr+/aA9omhn+boqoeFSQK1oXtD3muO ZXpLhsfmOc57d43SiMVAPqF0IB1USRxz/SSmR1SF6Y/HWydqnrvOP2JqInAS95yd5D1U EOCw== X-Gm-Message-State: AO0yUKUd+CpLwr3BsViXg3vmQ0az+eqO1+Jf2siMj7CU+26+iC8cX7eR BYa9p4l1tubBL6uhYyWSZt4EZXrofQ== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a5b:70c:0:b0:a30:38fb:a0b8 with SMTP id g12-20020a5b070c000000b00a3038fba0b8mr9743184ybq.9.1678228781719; Tue, 07 Mar 2023 14:39:41 -0800 (PST) Date: Tue, 7 Mar 2023 22:39:36 +0000 In-Reply-To: <20230307223937.2892762-1-rmoar@google.com> Mime-Version: 1.0 References: <20230307223937.2892762-1-rmoar@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Message-ID: <20230307223937.2892762-2-rmoar@google.com> Subject: [PATCH v3 2/3] kunit: fix bug in the order of lines in debugfs logs From: Rae Moar To: brendanhiggins@google.com, davidgow@google.com, dlatypov@google.com Cc: skhan@linuxfoundation.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Rae Moar 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: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759751960184514091?= X-GMAIL-MSGID: =?utf-8?q?1759751960184514091?= 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 Reviewed-by: David Gow --- 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) From patchwork Tue Mar 7 22:39:37 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rae Moar X-Patchwork-Id: 65911 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp4276wrd; Tue, 7 Mar 2023 14:49:05 -0800 (PST) X-Google-Smtp-Source: AK7set8Upj+NxO3em2nQ6svoVOR21s23kfzgaG++m4RxjUKScJBeOD0AnuDh++jyJQG3wcVl0iF5 X-Received: by 2002:a05:6a20:918a:b0:cc:6e9b:c69b with SMTP id v10-20020a056a20918a00b000cc6e9bc69bmr17847878pzd.55.1678229345194; Tue, 07 Mar 2023 14:49:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1678229345; cv=none; d=google.com; s=arc-20160816; b=rgS4hz4d+PzA559tJYfBsx1tlvlDEsrGBEaXywVtpVChGkqhSgmAQ2dDpM1CMy+znT LKa0v6tAy4NEcnsygSpNoSJqnxkE7v2sHFOLiKn7o39fPgCdU7MvP83JXL1+KQ06muOH xvIA3YRkqxz6A4q1sNcAGKbmhqnqjbj65kZM8eHqxzjOv41MLzjEwaLsqlnyS2SKN7ff wb5+V3QHgtM5VdT518pV5OE/5MLIcltoFs2CKVemd1e98Y4A2uS7O3zpOoNJdD9ti3x8 DgluKo7MTMX/MGu24/ILR+bUeoHMZXREa3NMyWxdW2kjlJRpQ1nU6TOpr1obxIAcAyaD 8PoQ== 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:references :mime-version:in-reply-to:date:dkim-signature; bh=NPX3cxodGS2Dc0VrA/PnDnNc9kLb5Ie4SBR9qAvBwBk=; b=0VUSVjAZZiq7yReJ95cP+72rv/7LbGwMM2ThhMAdXh0ti+nsUTKfS4dgi/L5gXV3eb 3Zkcq7YRv0xMzJWXv/Aa1d3xKKuK4EeN6e89tQI39ETJp+IaBSJY9lgfH3NVx3TR58Lp W9/T7GCnSq1ufCM1ddv/v1+b3jRFezgs2iEF7vE5t5N9vT0hssHSj2+Vw6gUb+9j1psY ohUISlPmYK3Y1hwvgpx6JN8r9IkUSQ1Mc4M6DRkZq7PswrvG6vznFYZT4TQBC3qkBWVK FiCjQ4M4CtfoRqae+YeXW++bZqGop9nB+bICwuf1BHmIBJzkBSpAqrSgPuXWGdIFloJY ecGQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=JuW4e0zJ; 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 u124-20020a627982000000b0061d8ab6228esi2823059pfc.87.2023.03.07.14.48.11; Tue, 07 Mar 2023 14:49:05 -0800 (PST) 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=JuW4e0zJ; 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 S231786AbjCGWkt (ORCPT + 99 others); Tue, 7 Mar 2023 17:40:49 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50052 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229830AbjCGWk0 (ORCPT ); Tue, 7 Mar 2023 17:40:26 -0500 Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA285B1B32 for ; Tue, 7 Mar 2023 14:39:49 -0800 (PST) Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-536cb268ab8so151537177b3.17 for ; Tue, 07 Mar 2023 14:39:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1678228785; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NPX3cxodGS2Dc0VrA/PnDnNc9kLb5Ie4SBR9qAvBwBk=; b=JuW4e0zJ7LWcIDQ1r3p8OPCfsa5GhzqxmW4ikjVk/XqlHPtyrKKETzfvTkNSllQMDD xA7z4NPlifzfeScOaspoCzI/SkTrj8j6wq5IO4Fq4DmTL/kOW5fsI4zJKG3u5clWEhPW iGLIdFLSUfUd/GglPISOOIcpFs3GQnp55ekQM3A9nd8qywdx8g1kqr+K6pPJf/LZK748 VD0hsptrlrfiGpJDV9vSpUmiraiW5g4YnRNADYP/5FAceTKQfFqrhgIRh8SiJtvKvIHC 82Ljos0F+GBbb/KlLCA4xnKErM+R01PkGPJnoWZ/NCVph4s7wZrQlDU+h7lhfUizAno9 gdOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678228785; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NPX3cxodGS2Dc0VrA/PnDnNc9kLb5Ie4SBR9qAvBwBk=; b=d99Um/GanOBfneN1+tScBumWyE+qjysUYaCLq7i0shF5//F2yWh419+MC5qZ35Gr5V 8AUBQuI1+TiphvdntG7fiO3+GALwXEEH0FgoPzuZqI6f2PC4oxW8iwVdCe9jrNyQAQQu k5kPzL3UAY3kjIEk/VMkKpvcs5TS7uCbl4NsgSdEuG/flY4bqBCCwTiqTWysz6n+gFeS j+L9uk9+tdcVx2eYsUe2r4JQ/6VabwcGdvf+XDKQ/siBY6PXGKy1XQTOvEzMrSflFxHr zMp/bJ7E9GLNF6Lv0oVkhK9/Vrqji1++5Fx17V6+e+oW4UUm1+zsejABjckTmkp21Qbq xu8w== X-Gm-Message-State: AO0yUKUK/Xr97VcHXC1fQ2cTyNZna097o/y0d+jrO+OE+0MbP9NOtP79 sYuM84ATmyv/NT3K5R+USjkvU3QZCg== X-Received: from rmoar-specialist.c.googlers.com ([fda3:e722:ac3:cc00:2b:7d90:c0a8:45d3]) (user=rmoar job=sendgmr) by 2002:a5b:b52:0:b0:a24:6aaa:9640 with SMTP id b18-20020a5b0b52000000b00a246aaa9640mr1ybr.378.1678228785263; Tue, 07 Mar 2023 14:39:45 -0800 (PST) Date: Tue, 7 Mar 2023 22:39:37 +0000 In-Reply-To: <20230307223937.2892762-1-rmoar@google.com> Mime-Version: 1.0 References: <20230307223937.2892762-1-rmoar@google.com> X-Mailer: git-send-email 2.40.0.rc0.216.gc4246ad0f0-goog Message-ID: <20230307223937.2892762-3-rmoar@google.com> Subject: [PATCH v3 3/3] kunit: fix bug of extra newline characters in debugfs logs From: Rae Moar To: brendanhiggins@google.com, davidgow@google.com, dlatypov@google.com Cc: skhan@linuxfoundation.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, Rae Moar 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: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1759751013930058717?= X-GMAIL-MSGID: =?utf-8?q?1759751013930058717?= Fix bug of the extra newline characters in debugfs logs. When a line is added to debugfs with a newline character at the end, an extra line appears in the debugfs log. This is due to a discrepancy between how the lines are printed and how they are added to the logs. Remove this discrepancy by checking if a newline character is present before adding a newline character. This should closely match the printk behavior. Add kunit_log_newline_test to provide test coverage for this issue. (Also, move kunit_log_test above suite definition to remove the unnecessary declaration prior to the suite definition) As an example, say we add these two lines to the log: kunit_log(..., "KTAP version 1\n"); kunit_log(..., "1..1"); The debugfs log before this fix: KTAP version 1 1..1 The debugfs log after this fix: KTAP version 1 1..1 Signed-off-by: Rae Moar Reviewed-by: David Gow --- Changes from v2 -> v3: - Changes to commit message. Changes from v1 -> v2: - Changed the way extra newlines are removed. Instead of removing extra newline characters, add a newline if one is not present. This is a bit cleaner. - Note: I looked into using KERN_CONT to match the printk behavior to vsnprintf but this could cause issues with KTAP printing on the same line as interrupting kernel messages. I also looked at just adding KERN_CONT functionality to kunit_log and I did get this to work but it was a bit messy because it required a few calls to kunit_log_newline in kunit_run_tests. If this is very desired functionality, happy to add this to version 3. include/kunit/test.h | 2 +- lib/kunit/kunit-test.c | 35 +++++++++++++++++++++++------------ lib/kunit/test.c | 18 ++++++++++++++++++ 3 files changed, 42 insertions(+), 13 deletions(-) diff --git a/include/kunit/test.h b/include/kunit/test.h index 0668d29f3453..bd9dbae5e48d 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -420,7 +420,7 @@ void __printf(2, 3) kunit_log_append(char *log, const char *fmt, ...); #define kunit_log(lvl, test_or_suite, fmt, ...) \ do { \ printk(lvl fmt, ##__VA_ARGS__); \ - kunit_log_append((test_or_suite)->log, fmt "\n", \ + kunit_log_append((test_or_suite)->log, fmt, \ ##__VA_ARGS__); \ } while (0) diff --git a/lib/kunit/kunit-test.c b/lib/kunit/kunit-test.c index 4df0335d0d06..b63595d3e241 100644 --- a/lib/kunit/kunit-test.c +++ b/lib/kunit/kunit-test.c @@ -443,18 +443,6 @@ static struct kunit_suite kunit_resource_test_suite = { .test_cases = kunit_resource_test_cases, }; -static void kunit_log_test(struct kunit *test); - -static struct kunit_case kunit_log_test_cases[] = { - KUNIT_CASE(kunit_log_test), - {} -}; - -static struct kunit_suite kunit_log_test_suite = { - .name = "kunit-log-test", - .test_cases = kunit_log_test_cases, -}; - static void kunit_log_test(struct kunit *test) { struct kunit_suite suite; @@ -481,6 +469,29 @@ static void kunit_log_test(struct kunit *test) #endif } +static void kunit_log_newline_test(struct kunit *test) +{ + kunit_info(test, "Add newline\n"); + if (test->log) { + KUNIT_ASSERT_NOT_NULL_MSG(test, strstr(test->log, "Add newline\n"), + "Missing log line, full log:\n%s", test->log); + KUNIT_EXPECT_NULL(test, strstr(test->log, "Add newline\n\n")); + } else { + kunit_skip(test, "only useful when debugfs is enabled"); + } +} + +static struct kunit_case kunit_log_test_cases[] = { + KUNIT_CASE(kunit_log_test), + KUNIT_CASE(kunit_log_newline_test), + {} +}; + +static struct kunit_suite kunit_log_test_suite = { + .name = "kunit-log-test", + .test_cases = kunit_log_test_cases, +}; + static void kunit_status_set_failure_test(struct kunit *test) { struct kunit fake; diff --git a/lib/kunit/test.c b/lib/kunit/test.c index 811fcc376d2f..e2910b261112 100644 --- a/lib/kunit/test.c +++ b/lib/kunit/test.c @@ -108,6 +108,22 @@ static void kunit_print_test_stats(struct kunit *test, stats.total); } +/** + * kunit_log_newline() - Add newline to the end of log if one is not + * already present. + * @log: The log to add the newline to. + */ +static void kunit_log_newline(char *log) +{ + int log_len, len_left; + + log_len = strlen(log); + len_left = KUNIT_LOG_SIZE - log_len - 1; + + if (log_len > 0 && log[log_len - 1] != '\n') + strncat(log, "\n", len_left); +} + /* * Append formatted message to log, size of which is limited to * KUNIT_LOG_SIZE bytes (including null terminating byte). @@ -135,6 +151,8 @@ void kunit_log_append(char *log, const char *fmt, ...) vsnprintf(log + log_len, min(len, len_left), fmt, args); va_end(args); + /* Add newline to end of log if not already present. */ + kunit_log_newline(log); } EXPORT_SYMBOL_GPL(kunit_log_append);