Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1784428yba; Thu, 4 Apr 2019 19:01:14 -0700 (PDT) X-Google-Smtp-Source: APXvYqz/eFG4Dv+PEK6BZ/X4kYuqYJK4gVvBltxiPEcfAK5fZxVyHXwu9d+D4slt9Za1xVWiHlJO X-Received: by 2002:a17:902:d211:: with SMTP id t17mr9671281ply.214.1554429674376; Thu, 04 Apr 2019 19:01:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554429674; cv=none; d=google.com; s=arc-20160816; b=HASt26g7UzB3w3pekmUtanMzOiQ6RP5nRllH9vLqntft8XLG+NWlPDRakGOrhrXw/k SEzC+Y/TqDCq6uaVpuCxUNKOxeQviRIWgwSxty/19LQJKRwWx5UQy0kE5FvdrPh+Hj1P ufJtVIgFeTlc7Fw2vNT7kBWbqBJXN35ruyylORUIecNsCEFqRL4EESJjtWaAoHhdmW17 N87n44Yxog4vLzfm0exU17d5c9pUlKhLQSCclIpcxGMeMIZi3dtgolMSulccZ4piZf4p YUahA1acYcFTZKetMnefJYjyG8a6Jog2FA0hHiE27tzUYrZ56LirAIFlqPwALN+UEioX k9EA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=LuxwcA2TQYJNnoyAr3NXG34releY26e4OP8jY85HShk=; b=tGf5Mk1yRrn8izK5jwmUUFZ5MduiTJLBxstTY9JMwEdwj4Wlm4CBFQt0Cs9xhda4YE i05t95hc6lrGvyGNdnsi8boSBP2gjdq6FYQ1qJsbZp4GZuDAxuC1vkwFeIVJcL/zTv+L TB2VxpxyVqo9uEExBhACU3+UWB1BV+jx5bP/P5pQmJ8yGp70/QwzmFyX9935NDYRSlLQ rKcabghGbYE3w9uF6NY5Dw9oipqC9pAjAdw9F2qw8zgVNBV556IjD9B89Tq+7/d7Fpaa lWucftCW58lcQf8b5Zn31gOfrSwhvHNXjvbT3RKK4XESJfLAHGmN5mTxhAjG+jw3mkHh Or4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b="b2KY/vpY"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z8si17489833pgh.82.2019.04.04.19.00.59; Thu, 04 Apr 2019 19:01:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b="b2KY/vpY"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730631AbfDECAN (ORCPT + 99 others); Thu, 4 Apr 2019 22:00:13 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:36571 "EHLO out1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727051AbfDECAN (ORCPT ); Thu, 4 Apr 2019 22:00:13 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id E15FC24962; Thu, 4 Apr 2019 22:00:11 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute3.internal (MEProxy); Thu, 04 Apr 2019 22:00:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=LuxwcA2TQYJNnoyAr3NXG34releY26e4OP8jY85HShk=; b=b2KY/vpY T0xFDc17InaPlNelj/FEwFtQB8suyQM2y0q4ureRkALeB9q+Q4vAX0hm6/akkGUg RngyQPZQTjsZLL3n77KaAzg6MqSVcOA8aRGv0CSWoVnAHNnAh5I4R41VHFd786wW M8PHuzFz4pI305YDSAMk1oKTF9zQMlM/AQZpQLTEkJSHKFkugAI/PCfdyaTs62lt bTG+mmgzdZoNSJMLJyx/27jb9VPMOOULzKPijXDZIAFZKw0+Fd6c4Z2jqntmXho/ gS2vG+RB/aA7ajX3gy9aMaxbEv2XB/XRhnCpzUl6UJsYPytbb/8SkUe2BbIwue02 kbHAk0qhNWb73A== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduuddrtdeigdehtdculddtuddrgedutddrtddtmd cutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdp uffrtefokffrpgfnqfghnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivg hnthhsucdlqddutddtmdenucfjughrpefhvffufffkofgjfhgggfestdekredtredttden ucfhrhhomhepfdfvohgsihhnucevrdcujfgrrhguihhnghdfuceothhosghinheskhgvrh hnvghlrdhorhhgqeenucfkphepuddvgedrudegledruddugedrkeeinecurfgrrhgrmhep mhgrihhlfhhrohhmpehtohgsihhnsehkvghrnhgvlhdrohhrghenucevlhhushhtvghruf hiiigvpedu X-ME-Proxy: Received: from eros.localdomain (124-149-114-86.dyn.iinet.net.au [124.149.114.86]) by mail.messagingengine.com (Postfix) with ESMTPA id C27651039B; Thu, 4 Apr 2019 22:00:05 -0400 (EDT) From: "Tobin C. Harding" To: Shuah Khan Cc: "Tobin C. Harding" , Kees Cook , Jann Horn , Andy Shevchenko , Randy Dunlap , Rasmus Villemoes , Stephen Rothwell , Andy Lutomirski , Daniel Micay , Arnd Bergmann , Miguel Ojeda , "Gustavo A. R. Silva" , Greg Kroah-Hartman , Alexander Shishkin , kernel-hardening@lists.openwall.com, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 2/6] kselftest: Add test runner creation script Date: Fri, 5 Apr 2019 12:58:55 +1100 Message-Id: <20190405015859.32755-3-tobin@kernel.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190405015859.32755-1-tobin@kernel.org> References: <20190405015859.32755-1-tobin@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently if we wish to use kselftest to run tests within a kernel module we write a small script to load/unload and do error reporting. There are a bunch of these under tools/testing/selftests/lib/ that are all identical except for the test name. We can reduce code duplication and improve maintainability if we have one version of this. However kselftest requires an executable for each test. We can move all the script logic to a central script then have each individual test script call the main script. Oneliner to call kselftest_module.sh courtesy of Kees, thanks! Add test runner creation script. Convert tools/testing/selftests/lib/*.sh to use new test creation script. Testing ------- Configure kselftests for lib/ then build and boot kernel. Then run kselftests as follows: $ cd /path/to/kernel/tree $ sudo make O=$output_path -C tools/testing/selftests TARGETS="lib" run_tests and also $ cd /path/to/kernel/tree $ cd tools/testing/selftests $ sudo make O=$output_path TARGETS="lib" run_tests and also $ cd /path/to/kernel/tree $ cd tools/testing/selftests $ sudo make TARGETS="lib" run_tests Acked-by: Kees Cook Signed-off-by: Tobin C. Harding --- tools/testing/selftests/kselftest_module.sh | 84 ++++++++++++++++++++ tools/testing/selftests/lib/bitmap.sh | 18 +---- tools/testing/selftests/lib/prime_numbers.sh | 17 +--- tools/testing/selftests/lib/printf.sh | 19 +---- 4 files changed, 88 insertions(+), 50 deletions(-) create mode 100755 tools/testing/selftests/kselftest_module.sh diff --git a/tools/testing/selftests/kselftest_module.sh b/tools/testing/selftests/kselftest_module.sh new file mode 100755 index 000000000000..18e1c7992d30 --- /dev/null +++ b/tools/testing/selftests/kselftest_module.sh @@ -0,0 +1,84 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0+ + +# +# Runs an individual test module. +# +# kselftest expects a separate executable for each test, this can be +# created by adding a script like this: +# +# #!/bin/sh +# SPDX-License-Identifier: GPL-2.0+ +# $(dirname $0)/../kselftest_module.sh "description" module_name +# +# Example: tools/testing/selftests/lib/printf.sh + +desc="" # Output prefix. +module="" # Filename (without the .ko). +args="" # modprobe arguments. + +modprobe="/sbin/modprobe" + +main() { + parse_args "$@" + assert_root + assert_have_module + run_module +} + +parse_args() { + script=${0##*/} + + if [ $# -lt 2 ]; then + echo "Usage: $script [FAIL]" + exit 1 + fi + + desc="$1" + shift || true + module="$1" + shift || true + args="$@" +} + +assert_root() { + if [ ! -w /dev ]; then + skip "please run as root" + fi +} + +assert_have_module() { + if ! $modprobe -q -n $module; then + skip "module $module is not found" + fi +} + +run_module() { + if $modprobe -q $module $args; then + $modprobe -q -r $module + say "ok" + else + fail "" + fi +} + +say() { + echo "$desc: $1" +} + + +fail() { + say "$1 [FAIL]" >&2 + exit 1 +} + +skip() { + say "$1 [SKIP]" >&2 + # Kselftest framework requirement - SKIP code is 4. + exit 4 +} + +# +# Main script +# +main "$@" diff --git a/tools/testing/selftests/lib/bitmap.sh b/tools/testing/selftests/lib/bitmap.sh index 5a90006d1aea..5511dddc5c2d 100755 --- a/tools/testing/selftests/lib/bitmap.sh +++ b/tools/testing/selftests/lib/bitmap.sh @@ -1,19 +1,3 @@ #!/bin/sh # SPDX-License-Identifier: GPL-2.0 - -# Kselftest framework requirement - SKIP code is 4. -ksft_skip=4 - -# Runs bitmap infrastructure tests using test_bitmap kernel module -if ! /sbin/modprobe -q -n test_bitmap; then - echo "bitmap: module test_bitmap is not found [SKIP]" - exit $ksft_skip -fi - -if /sbin/modprobe -q test_bitmap; then - /sbin/modprobe -q -r test_bitmap - echo "bitmap: ok" -else - echo "bitmap: [FAIL]" - exit 1 -fi +$(dirname $0)/../kselftest_module.sh "bitmap" test_bitmap diff --git a/tools/testing/selftests/lib/prime_numbers.sh b/tools/testing/selftests/lib/prime_numbers.sh index 78e7483c8d60..43b28f24e453 100755 --- a/tools/testing/selftests/lib/prime_numbers.sh +++ b/tools/testing/selftests/lib/prime_numbers.sh @@ -1,19 +1,4 @@ #!/bin/sh # SPDX-License-Identifier: GPL-2.0 # Checks fast/slow prime_number generation for inconsistencies - -# Kselftest framework requirement - SKIP code is 4. -ksft_skip=4 - -if ! /sbin/modprobe -q -n prime_numbers; then - echo "prime_numbers: module prime_numbers is not found [SKIP]" - exit $ksft_skip -fi - -if /sbin/modprobe -q prime_numbers selftest=65536; then - /sbin/modprobe -q -r prime_numbers - echo "prime_numbers: ok" -else - echo "prime_numbers: [FAIL]" - exit 1 -fi +$(dirname $0)/../kselftest_module.sh "prime numbers" prime_numbers selftest=65536 diff --git a/tools/testing/selftests/lib/printf.sh b/tools/testing/selftests/lib/printf.sh index 45a23e2d64ad..2ffa61da0296 100755 --- a/tools/testing/selftests/lib/printf.sh +++ b/tools/testing/selftests/lib/printf.sh @@ -1,19 +1,4 @@ #!/bin/sh # SPDX-License-Identifier: GPL-2.0 -# Runs printf infrastructure using test_printf kernel module - -# Kselftest framework requirement - SKIP code is 4. -ksft_skip=4 - -if ! /sbin/modprobe -q -n test_printf; then - echo "printf: module test_printf is not found [SKIP]" - exit $ksft_skip -fi - -if /sbin/modprobe -q test_printf; then - /sbin/modprobe -q -r test_printf - echo "printf: ok" -else - echo "printf: [FAIL]" - exit 1 -fi +# Tests the printf infrastructure using test_printf kernel module. +$(dirname $0)/../kselftest_module.sh "printf" test_printf -- 2.21.0