Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp177985ybz; Wed, 15 Apr 2020 06:45:57 -0700 (PDT) X-Google-Smtp-Source: APiQypISPtmhOxjYIlJ4jvK5bFA8R6fP8AosWPmCsN2Xfh5+Q0N9GXYajQq84L9S0IhfzwZ6VgYP X-Received: by 2002:a50:bb25:: with SMTP id y34mr14468961ede.237.1586958357346; Wed, 15 Apr 2020 06:45:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1586958357; cv=none; d=google.com; s=arc-20160816; b=K1fhIKWUmaPrz1qvwJ1+dBI1Q+qMbDcwFTSmqueHR2SXkuPXQblBuCTlM3aHh+d/ZO kP0Mbd7LArBEto2DUbLTW+GfvfvAax45DfYxpp2og/2F9yF7vY/eJjiRjBR6Ukwfvw6w qpIotUZW3imVcTrSmVfb1mn+0h4guMCEqn4Mv+TBsJCXzt6YlRSNx4o17sY2QkoOmOwB jAunHXTlHZkaUnBbHZi9Kg8ko1U+8lhdCZVpRwEe9UVB7XBLUFoNMC9vYycUHlsmKlco 6JC/NxC1cqxWK67dfmTiXT9C4pbbflk9jN/KG+ptPiGDaR0WTKdBRA1JbvSAwBl+tQKI AW2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:mime-version :message-id:date:dkim-signature; bh=ZT9uearJKSnBiqdjC5QhzgxpTglsuQMI/wN8PXUX9eU=; b=gdvHrAU5uwm6jRqog/O7tdE9AfZLUC3K40ipMeZu7wy8khZ0uDGZMqAwyP1C3XyIkS zPle0PI1MUj8DPgqxIZO332UQXM8nR24uPEAUnuytB0cnvdtHCX0sa5PGKpEBxzgWKmI n3yKpH2k2xtRicgzO9OMVBGIgxL09I9LLv9e3bey5ep/taqeOt+O12F0dAFMtAqxPW5u 4FgUiMukpR9L4Dhg0sbcJA5HUvkGMA8f/3Zvm0OdgQoiPh2lPxgrWsTKfBEgQqwo+KDD R5prpJ1Nj5hO2OiEWbAlmVHaC0M+f+oBa2V5WTbr62+mAYYIrd5qEnd7hgDR3m27zzwg Z3cg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mb2PRhSe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w25si10196539edt.358.2020.04.15.06.45.32; Wed, 15 Apr 2020 06:45:57 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=mb2PRhSe; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 S2633569AbgDNVEy (ORCPT + 99 others); Tue, 14 Apr 2020 17:04:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45688 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S2633573AbgDNVB5 (ORCPT ); Tue, 14 Apr 2020 17:01:57 -0400 Received: from mail-pl1-x64a.google.com (mail-pl1-x64a.google.com [IPv6:2607:f8b0:4864:20::64a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E5E9AC061A0C for ; Tue, 14 Apr 2020 14:01:56 -0700 (PDT) Received: by mail-pl1-x64a.google.com with SMTP id c13so954889plq.22 for ; Tue, 14 Apr 2020 14:01:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=ZT9uearJKSnBiqdjC5QhzgxpTglsuQMI/wN8PXUX9eU=; b=mb2PRhSeg1kyS8eXbE+AHB8pbDmwauqFv3Af67l0qf34soIrNE2+PWJOVmY4xCLD1M ZLtTcCqfWh9mRht24aCgrcUfedC5EV2jeNL7+jyl1j9v5wwt+P3S7ANJ6cxqO/VziGgC zmj8gSM9CvaA2/VZSRFSRY09dktytU1aPnSIOnTPGtEYBla4CzZzLH1W4OgRFnvfc8Nr TlSjYxMZV3HjTQXRQ5zc6IeWqJkwLzQBS5eEZaxWrQXwNflqtNJZ0xc1uOy/gSb9eBrq MMh8L8QmGi3ECF5n2tOY2luFyZxoi8q5E1h19B0c5gaI4ahhu6iWY5Lak7lX+7Jh9/zl kysA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=ZT9uearJKSnBiqdjC5QhzgxpTglsuQMI/wN8PXUX9eU=; b=myK3cFGz6g0jfLhypqgQmUIijD/YOSzI4y/wHdpUM6zXnTVNsKFhjUP4MhwBFiDmja E52hDBQleZ2yJ3enf95Ej1ACXYsIRUwBIx5SLmyQdpXoXRzPJzqSdyVLucec3wwmLqvm eUunKiyMcOn0ivUdbvlAtFN24nsEUc0uRnRflyk53tsE4cQ6kDRXPeaa48RTCBn4zf0N Aaior1vszZj/5lgljiEqnoE2+6bsLKuzoXF5fv1EGd2pPJOE6oxx0AOAt4Cs+fSYPuVA vz/zvih/WJVsyuYPAwI3bw2cgVuK2sMnVdxNlpZ/Xc3vs7Q29QddgrHNj0x+vj7Un+Jh gGRw== X-Gm-Message-State: AGi0PuYM+/tVOmjKSkDX+3/pCG/lwBm+mRfFbTtc557UNUYAp0ORLHLk R+aLfJfuU4+no49TgK4GiFTz1csXm2w/FJUgh8B9Sw== X-Received: by 2002:a17:90a:718c:: with SMTP id i12mr2318668pjk.142.1586898116262; Tue, 14 Apr 2020 14:01:56 -0700 (PDT) Date: Tue, 14 Apr 2020 14:01:42 -0700 Message-Id: <20200414210142.191327-1-brendanhiggins@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.26.0.110.g2183baf09c-goog Subject: [RFC v1] software: node: test: add test to exercise parent child add/remove From: Brendan Higgins To: gregkh@linuxfoundation.org, rafael@kernel.org, Dmitry Torokhov Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, Brendan Higgins Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add test which adds a tree of software_nodes, checks that the nodes exist, and then removes the tree. This exercises a bug reported by Naresh Kamboju , and pretty much just takes a test case from the test_printf Kselftest module and refocusses it on adding and then removing a tree of software_nodes. Signed-off-by: Brendan Higgins --- I am not sure if this should be rolled into the property entry test, or should be moved somewhere else; nevertheless, testing the software node API seems like a good idea and this seems like a good place to start. --- drivers/base/test/Kconfig | 14 ++++++++ drivers/base/test/Makefile | 2 ++ drivers/base/test/software-node-test.c | 46 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 drivers/base/test/software-node-test.c diff --git a/drivers/base/test/Kconfig b/drivers/base/test/Kconfig index 305c7751184a..b42f385fe233 100644 --- a/drivers/base/test/Kconfig +++ b/drivers/base/test/Kconfig @@ -11,3 +11,17 @@ config TEST_ASYNC_DRIVER_PROBE config KUNIT_DRIVER_PE_TEST bool "KUnit Tests for property entry API" depends on KUNIT=y +config KUNIT_DRIVER_SOFTWARE_NODE_TEST + bool "KUnit Tests for software node API" + depends on KUNIT=y + help + This builds the software node API tests. + + KUnit tests run during boot and output the results to the debug log + in TAP format (http://testanything.org/). Only useful for kernel devs + and are not for inclusion into a production build. + + For more information on KUnit and unit tests in general please refer + to the KUnit documentation in Documentation/dev-tools/kunit/. + + If unsure, say N. diff --git a/drivers/base/test/Makefile b/drivers/base/test/Makefile index 3ca56367c84b..63325e8a5288 100644 --- a/drivers/base/test/Makefile +++ b/drivers/base/test/Makefile @@ -2,3 +2,5 @@ obj-$(CONFIG_TEST_ASYNC_DRIVER_PROBE) += test_async_driver_probe.o obj-$(CONFIG_KUNIT_DRIVER_PE_TEST) += property-entry-test.o + +obj-$(CONFIG_KUNIT_DRIVER_SOFTWARE_NODE_TEST) += software-node-test.o diff --git a/drivers/base/test/software-node-test.c b/drivers/base/test/software-node-test.c new file mode 100644 index 000000000000..0609cbd9aa0a --- /dev/null +++ b/drivers/base/test/software-node-test.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0 +// Unit tests for software node API +// +// Copyright 2020 Google LLC. + +#include +#include +#include + +static void software_node_test_register_nodes(struct kunit *test) +{ + const struct software_node softnodes[] = { + { .name = "first", }, + { .name = "second", .parent = &softnodes[0], }, + { .name = "third", .parent = &softnodes[1], }, + {} + }; + const char * const full_name = "first/second/third"; + char *buf; + + buf = kunit_kzalloc(test, strlen(full_name), GFP_KERNEL); + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf); + + KUNIT_ASSERT_EQ(test, software_node_register_nodes(softnodes), 0); + + /* Check that all the nodes exist. */ + KUNIT_ASSERT_EQ(test, + (size_t)sprintf(buf, "%pfw", + software_node_fwnode(&softnodes[2])), + strlen(full_name)); + KUNIT_EXPECT_STREQ(test, buf, full_name); + + software_node_unregister_nodes(softnodes); +} + +static struct kunit_case software_node_test_cases[] = { + KUNIT_CASE(software_node_test_register_nodes), + {} +}; + +static struct kunit_suite software_node_test_suite = { + .name = "software-node", + .test_cases = software_node_test_cases, +}; + +kunit_test_suite(software_node_test_suite); base-commit: 8632e9b5645bbc2331d21d892b0d6961c1a08429 -- 2.26.0.110.g2183baf09c-goog