diff mbox series

[v2] selftests/livepatch: add test skip handling

Message ID 20190716133414.20196-1-joe.lawrence@redhat.com (mailing list archive)
State New
Headers show
Series [v2] selftests/livepatch: add test skip handling | expand

Commit Message

Joe Lawrence July 16, 2019, 1:34 p.m. UTC
Add a skip() message function that stops the test, logs an explanation,
and sets the "skip" return code (4).

Before loading a livepatch self-test kernel module, first verify that
we've built and installed it by running a 'modprobe --dry-run'.  This
should catch a few environment issues, including !CONFIG_LIVEPATCH and
!CONFIG_TEST_LIVEPATCH.  In these cases, exit gracefully with the new
skip() function.

Reported-by: Jiri Benc <jbenc@redhat.com>
Suggested-by: Shuah Khan <shuah@kernel.org>
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
---

v2: move assert_mod() call into load_mod() and load_lp_nowait(), before
    they check whether the module is a livepatch or not (a test-failing
    assertion).

 .../testing/selftests/livepatch/functions.sh  | 20 +++++++++++++++++++
 1 file changed, 20 insertions(+)

Comments

Miroslav Benes July 17, 2019, 9:12 a.m. UTC | #1
On Tue, 16 Jul 2019, Joe Lawrence wrote:

> Add a skip() message function that stops the test, logs an explanation,
> and sets the "skip" return code (4).
> 
> Before loading a livepatch self-test kernel module, first verify that
> we've built and installed it by running a 'modprobe --dry-run'.  This
> should catch a few environment issues, including !CONFIG_LIVEPATCH and
> !CONFIG_TEST_LIVEPATCH.  In these cases, exit gracefully with the new
> skip() function.
> 
> Reported-by: Jiri Benc <jbenc@redhat.com>
> Suggested-by: Shuah Khan <shuah@kernel.org>
> Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>

Reviewed-by: Miroslav Benes <mbenes@suse.cz>

Miroslav
Petr Mladek July 17, 2019, noon UTC | #2
On Tue 2019-07-16 09:34:14, Joe Lawrence wrote:
> Add a skip() message function that stops the test, logs an explanation,
> and sets the "skip" return code (4).
> 
> Before loading a livepatch self-test kernel module, first verify that
> we've built and installed it by running a 'modprobe --dry-run'.  This
> should catch a few environment issues, including !CONFIG_LIVEPATCH and
> !CONFIG_TEST_LIVEPATCH.  In these cases, exit gracefully with the new
> skip() function.
> 
> Reported-by: Jiri Benc <jbenc@redhat.com>

Adding Jiri into CC to be sure that we really solved the original problem.

I get the following output when livepatching is not configured:

$> make run_tests
TAP version 13
1..4
# selftests: livepatch: test-livepatch.sh
# TEST: basic function patching ... SKIP: Failed modprobe --dry-run of module: test_klp_livepatch
not ok 1 selftests: livepatch: test-livepatch.sh # SKIP
# selftests: livepatch: test-callbacks.sh
# TEST: target module before livepatch ... SKIP: Failed modprobe --dry-run of module: test_klp_callbacks_mod
not ok 2 selftests: livepatch: test-callbacks.sh # SKIP
# selftests: livepatch: test-shadow-vars.sh
# TEST: basic shadow variable API ... SKIP: Failed modprobe --dry-run of module: test_klp_shadow_vars
not ok 3 selftests: livepatch: test-shadow-vars.sh # SKIP
# selftests: livepatch: test-state.sh
# TEST: system state modification ... SKIP: Failed modprobe --dry-run of module: test_klp_state
not ok 4 selftests: livepatch: test-state.sh # SKIP

Jiri, is it acceptable solution for you, please?


> Suggested-by: Shuah Khan <shuah@kernel.org>
> Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>

Otherwise, the patch looks fine to me. If Jiri is fine
then feel free to use:

Reviewed-by: Petr Mladek <pmladek@suse.com>

Best Regards,
Petr
Jiri Benc July 17, 2019, 12:45 p.m. UTC | #3
On Wed, 17 Jul 2019 14:00:55 +0200, Petr Mladek wrote:
> Adding Jiri into CC to be sure that we really solved the original problem.

The patch looks good to me, the runner expects 4 as an indication that
the test was skipped.

> I get the following output when livepatching is not configured:
> 
> $> make run_tests  
> TAP version 13
> 1..4
> # selftests: livepatch: test-livepatch.sh
> # TEST: basic function patching ... SKIP: Failed modprobe --dry-run of module: test_klp_livepatch
> not ok 1 selftests: livepatch: test-livepatch.sh # SKIP
> # selftests: livepatch: test-callbacks.sh
> # TEST: target module before livepatch ... SKIP: Failed modprobe --dry-run of module: test_klp_callbacks_mod
> not ok 2 selftests: livepatch: test-callbacks.sh # SKIP
> # selftests: livepatch: test-shadow-vars.sh
> # TEST: basic shadow variable API ... SKIP: Failed modprobe --dry-run of module: test_klp_shadow_vars
> not ok 3 selftests: livepatch: test-shadow-vars.sh # SKIP
> # selftests: livepatch: test-state.sh
> # TEST: system state modification ... SKIP: Failed modprobe --dry-run of module: test_klp_state
> not ok 4 selftests: livepatch: test-state.sh # SKIP
> 
> Jiri, is it acceptable solution for you, please?

It looks correct. My reading of the TAP 13 specification is that it
should be returned as "ok" instead of "not ok" but that is not a
problem of this patch.

> Otherwise, the patch looks fine to me. If Jiri is fine
> then feel free to use:
> 
> Reviewed-by: Petr Mladek <pmladek@suse.com>

Sure.

Acked-by: Jiri Benc <jbenc@redhat.com>

Thanks!

 Jiri
Kamalesh Babulal July 17, 2019, 2:45 p.m. UTC | #4
On 7/16/19 7:04 PM, Joe Lawrence wrote:
> Add a skip() message function that stops the test, logs an explanation,
> and sets the "skip" return code (4).
> 
> Before loading a livepatch self-test kernel module, first verify that
> we've built and installed it by running a 'modprobe --dry-run'.  This
> should catch a few environment issues, including !CONFIG_LIVEPATCH and
> !CONFIG_TEST_LIVEPATCH.  In these cases, exit gracefully with the new
> skip() function.
> 
> Reported-by: Jiri Benc <jbenc@redhat.com>
> Suggested-by: Shuah Khan <shuah@kernel.org>
> Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>

Reviewed-by: Kamalesh Babulal <kamalesh@linux.vnet.ibm.com>
diff mbox series

Patch

diff --git a/tools/testing/selftests/livepatch/functions.sh b/tools/testing/selftests/livepatch/functions.sh
index 30195449c63c..de5a504ffdbc 100644
--- a/tools/testing/selftests/livepatch/functions.sh
+++ b/tools/testing/selftests/livepatch/functions.sh
@@ -13,6 +13,14 @@  function log() {
 	echo "$1" > /dev/kmsg
 }
 
+# skip(msg) - testing can't proceed
+#	msg - explanation
+function skip() {
+	log "SKIP: $1"
+	echo "SKIP: $1" >&2
+	exit 4
+}
+
 # die(msg) - game over, man
 #	msg - dying words
 function die() {
@@ -43,6 +51,12 @@  function loop_until() {
 	done
 }
 
+function assert_mod() {
+	local mod="$1"
+
+	modprobe --dry-run "$mod" &>/dev/null
+}
+
 function is_livepatch_mod() {
 	local mod="$1"
 
@@ -75,6 +89,9 @@  function __load_mod() {
 function load_mod() {
 	local mod="$1"; shift
 
+	assert_mod "$mod" ||
+		skip "Failed modprobe --dry-run of module: $mod"
+
 	is_livepatch_mod "$mod" &&
 		die "use load_lp() to load the livepatch module $mod"
 
@@ -88,6 +105,9 @@  function load_mod() {
 function load_lp_nowait() {
 	local mod="$1"; shift
 
+	assert_mod "$mod" ||
+		skip "Failed modprobe --dry-run of module: $mod"
+
 	is_livepatch_mod "$mod" ||
 		die "module $mod is not a livepatch"