From a415d43655b7b82c475506519dfdad6f9291ac41 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Thu, 23 Jun 2016 10:25:44 +0200 Subject: [PATCH 1/5] tests: force booting the kernel with SELinux selinux=1 is not sufficient when running on a kernel which also has another LSM (such as AppArmor) enabled and defaults to that. --- test/TEST-06-SELINUX/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/TEST-06-SELINUX/test.sh b/test/TEST-06-SELINUX/test.sh index 4f5895be66b..1ae4a7c0d96 100755 --- a/test/TEST-06-SELINUX/test.sh +++ b/test/TEST-06-SELINUX/test.sh @@ -10,7 +10,7 @@ TEST_DESCRIPTION="SELinux tests" . $TEST_BASE_DIR/test-functions SETUP_SELINUX=yes -KERNEL_APPEND="$KERNEL_APPEND selinux=1" +KERNEL_APPEND="$KERNEL_APPEND selinux=1 security=selinux" check_result_qemu() { ret=1 From eaa03c05f72b20610fc7c3b0e943d032fa78f0d1 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Thu, 23 Jun 2016 10:23:29 +0200 Subject: [PATCH 2/5] tests: don't fail if QEMU is not available Fix TEST-{08,09,10,11} to properly skip the test if QEMU is not available instead of failing, like in the other tests. --- test/TEST-08-ISSUE-2730/test.sh | 7 +++++-- test/TEST-09-ISSUE-2691/test.sh | 7 +++++-- test/TEST-10-ISSUE-2467/test.sh | 7 +++++-- test/TEST-11-ISSUE-3166/test.sh | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index 409140157af..e3b42a5254b 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -23,8 +23,11 @@ check_result_qemu() { } test_run() { - run_qemu || return 1 - check_result_qemu || return 1 + if run_qemu; then + check_result_qemu || return 1 + else + dwarn "can't run QEMU, skipping" + fi return 0 } diff --git a/test/TEST-09-ISSUE-2691/test.sh b/test/TEST-09-ISSUE-2691/test.sh index e247694f015..a782cad37d0 100755 --- a/test/TEST-09-ISSUE-2691/test.sh +++ b/test/TEST-09-ISSUE-2691/test.sh @@ -22,8 +22,11 @@ check_result_qemu() { } test_run() { - run_qemu || return 1 - check_result_qemu || return 1 + if run_qemu; then + check_result_qemu || return 1 + else + dwarn "can't run QEMU, skipping" + fi return 0 } diff --git a/test/TEST-10-ISSUE-2467/test.sh b/test/TEST-10-ISSUE-2467/test.sh index a652b0d812a..4eca6784bce 100755 --- a/test/TEST-10-ISSUE-2467/test.sh +++ b/test/TEST-10-ISSUE-2467/test.sh @@ -21,8 +21,11 @@ check_result_qemu() { } test_run() { - run_qemu || return 1 - check_result_qemu || return 1 + if run_qemu; then + check_result_qemu || return 1 + else + dwarn "can't run QEMU, skipping" + fi return 0 } diff --git a/test/TEST-11-ISSUE-3166/test.sh b/test/TEST-11-ISSUE-3166/test.sh index 7913537e9bc..0f269c8211f 100755 --- a/test/TEST-11-ISSUE-3166/test.sh +++ b/test/TEST-11-ISSUE-3166/test.sh @@ -21,8 +21,11 @@ check_result_qemu() { } test_run() { - run_qemu || return 1 - check_result_qemu || return 1 + if run_qemu; then + check_result_qemu || return 1 + else + dwarn "can't run QEMU, skipping" + fi return 0 } From 633736bbf49e31d62e7a8a16b330efa6866723db Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Fri, 24 Jun 2016 12:07:18 +0200 Subject: [PATCH 3/5] tests: make TEST-12-ISSUE-3171 nspawn invocation consistent with other tests The result of check_nspawn does not mean much, and this forgot to ask check_nspawn() whether nspawn can be used at all. This brings TEST-12-ISSUE-3171 in line with other nspawn tests. --- test/TEST-12-ISSUE-3171/test.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/TEST-12-ISSUE-3171/test.sh b/test/TEST-12-ISSUE-3171/test.sh index 925dcad9ea0..d0e934898c6 100755 --- a/test/TEST-12-ISSUE-3171/test.sh +++ b/test/TEST-12-ISSUE-3171/test.sh @@ -6,8 +6,12 @@ TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/3171" . $TEST_BASE_DIR/test-functions test_run() { - run_nspawn || return 1 - check_result_nspawn || return 1 + if check_nspawn; then + run_nspawn + check_result_nspawn || return 1 + else + dwarn "can't run systemd-nspawn, skipping" + fi return 0 } From b2ecd099dc7371aafb988145ab40a631f7050d41 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Fri, 24 Jun 2016 12:11:19 +0200 Subject: [PATCH 4/5] tests: track and check for timeouts If run_qemu() exits with non-zero, this either meant that QEMU was not available (which should be a SKIP) or that QEMU timed out if $QEMU_TIMEOUT was set (which then should be a FAIL). Limit the exit code of run_qemu() to QEMU availability only, and track timeouts separately through the new $TIMED_OUT variable, which is then checked in check_result_qemu(). Do the same for $NSPAWN_TIMEOUT and run_nspawn() so that nspawn and QEMU work similarly. --- test/TEST-08-ISSUE-2730/test.sh | 1 + test/TEST-09-ISSUE-2691/test.sh | 1 + test/test-functions | 26 ++++++++++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/test/TEST-08-ISSUE-2730/test.sh b/test/TEST-08-ISSUE-2730/test.sh index e3b42a5254b..44831983b3b 100755 --- a/test/TEST-08-ISSUE-2730/test.sh +++ b/test/TEST-08-ISSUE-2730/test.sh @@ -19,6 +19,7 @@ check_result_qemu() { [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) + [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) return $ret } diff --git a/test/TEST-09-ISSUE-2691/test.sh b/test/TEST-09-ISSUE-2691/test.sh index a782cad37d0..8ae02e61ac5 100755 --- a/test/TEST-09-ISSUE-2691/test.sh +++ b/test/TEST-09-ISSUE-2691/test.sh @@ -18,6 +18,7 @@ check_result_qemu() { [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) + [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) return $ret } diff --git a/test/test-functions b/test/test-functions index 5f95a8129ef..d8b7109671e 100644 --- a/test/test-functions +++ b/test/test-functions @@ -9,6 +9,7 @@ KERNEL_VER=${KERNEL_VER-$(uname -r)} KERNEL_MODS="/lib/modules/$KERNEL_VER/" QEMU_TIMEOUT="${QEMU_TIMEOUT:-infinity}" NSPAWN_TIMEOUT="${NSPAWN_TIMEOUT:-infinity}" +TIMED_OUT= # will be 1 after run_* if *_TIMEOUT is set and test timed out FSTYPE="${FSTYPE:-ext3}" UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-no}" @@ -46,6 +47,8 @@ function find_qemu_bin() { fi } +# Return 0 if QEMU did run (then you must check the result state/logs for actual +# success), or 1 if QEMU is not available. run_qemu() { if [ -f /etc/machine-id ]; then read MACHINE_ID < /etc/machine-id @@ -94,8 +97,15 @@ $KERNEL_APPEND \ if [[ "$QEMU_TIMEOUT" != "infinity" ]]; then QEMU_BIN="timeout --foreground $QEMU_TIMEOUT $QEMU_BIN" fi - ( set -x - $QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND" ) || return 1 + (set -x; $QEMU_BIN $QEMU_OPTIONS -append "$KERNEL_APPEND") + rc=$? + if [ "$rc" = 124 ] && [ "$QEMU_TIMEOUT" != "infinity" ]; then + derror "test timed out after $QEMU_TIMEOUT s" + TIMED_OUT=1 + else + [ "$rc" != 0 ] && derror "QEMU failed with exit code $rc" + fi + return 0 } run_nspawn() { @@ -106,8 +116,15 @@ run_nspawn() { _nspawn_cmd="env UNIFIED_CGROUP_HIERARCHY=$UNIFIED_CGROUP_HIERARCHY $_nspawn_cmd" - set -x - $_nspawn_cmd + (set -x; $_nspawn_cmd) + rc=$? + if [ "$rc" = 124 ] && [ "$NSPAWN_TIMEOUT" != "infinity" ]; then + derror "test timed out after $NSPAWN_TIMEOUT s" + TIMED_OUT=1 + else + [ "$rc" != 0 ] && derror "nspawn failed with exit code $rc" + fi + return 0 } setup_basic_environment() { @@ -290,6 +307,7 @@ check_result_nspawn() { [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed ls -l $TESTDIR/journal/*/*.journal test -s $TESTDIR/failed && ret=$(($ret+1)) + [ -n "$TIMED_OUT" ] && ret=$(($ret+1)) return $ret } From 7cad32bbdeed20ac0daf6049ab093db902f4a4e7 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Fri, 24 Jun 2016 16:23:39 +0200 Subject: [PATCH 5/5] test: merge check_nspawn() into run_nspawn() This makes nspawn tests symmetric with run_qemu() which also exits with 1 if QEMU is not available. --- test/TEST-01-BASIC/test.sh | 3 +-- test/TEST-03-JOBS/test.sh | 3 +-- test/TEST-04-JOURNAL/test.sh | 3 +-- test/TEST-05-RLIMITS/test.sh | 3 +-- test/TEST-07-ISSUE-1981/test.sh | 6 +++--- test/TEST-12-ISSUE-3171/test.sh | 3 +-- test/test-functions | 9 ++++----- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh index 21eed9b22ac..041195dcd8d 100755 --- a/test/TEST-01-BASIC/test.sh +++ b/test/TEST-01-BASIC/test.sh @@ -25,8 +25,7 @@ test_run() { else dwarn "can't run QEMU, skipping" fi - if check_nspawn; then - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh index 83393435f0a..ab0de0bfd14 100755 --- a/test/TEST-03-JOBS/test.sh +++ b/test/TEST-03-JOBS/test.sh @@ -25,8 +25,7 @@ test_run() { else dwarn "can't run QEMU, skipping" fi - if check_nspawn; then - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/TEST-04-JOURNAL/test.sh b/test/TEST-04-JOURNAL/test.sh index 1a14f76060d..3ccf1130190 100755 --- a/test/TEST-04-JOURNAL/test.sh +++ b/test/TEST-04-JOURNAL/test.sh @@ -25,8 +25,7 @@ test_run() { else dwarn "can't run QEMU, skipping" fi - if check_nspawn; then - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/TEST-05-RLIMITS/test.sh b/test/TEST-05-RLIMITS/test.sh index 6eaa0b8f34c..a5f7e8de0bb 100755 --- a/test/TEST-05-RLIMITS/test.sh +++ b/test/TEST-05-RLIMITS/test.sh @@ -25,8 +25,7 @@ test_run() { else dwarn "can't run QEMU, skipping" fi - if check_nspawn; then - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/TEST-07-ISSUE-1981/test.sh b/test/TEST-07-ISSUE-1981/test.sh index d97c4ec27d8..2f7f01058ee 100755 --- a/test/TEST-07-ISSUE-1981/test.sh +++ b/test/TEST-07-ISSUE-1981/test.sh @@ -5,11 +5,11 @@ TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/1981" . $TEST_BASE_DIR/test-functions +NSPAWN_TIMEOUT=30s + test_run() { dwarn "skipping QEMU" - if check_nspawn; then - NSPAWN_TIMEOUT=30s - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/TEST-12-ISSUE-3171/test.sh b/test/TEST-12-ISSUE-3171/test.sh index d0e934898c6..e20f4701439 100755 --- a/test/TEST-12-ISSUE-3171/test.sh +++ b/test/TEST-12-ISSUE-3171/test.sh @@ -6,8 +6,7 @@ TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/3171" . $TEST_BASE_DIR/test-functions test_run() { - if check_nspawn; then - run_nspawn + if run_nspawn; then check_result_nspawn || return 1 else dwarn "can't run systemd-nspawn, skipping" diff --git a/test/test-functions b/test/test-functions index d8b7109671e..4583c02f972 100644 --- a/test/test-functions +++ b/test/test-functions @@ -108,7 +108,11 @@ $KERNEL_APPEND \ return 0 } +# Return 0 if nspawn did run (then you must check the result state/logs for actual +# success), or 1 if nspawn is not available. run_nspawn() { + [[ -d /run/systemd/system ]] || return 1 + local _nspawn_cmd="../../systemd-nspawn --register=no --kill-signal=SIGKILL --directory=$TESTDIR/nspawn-root $ROOTLIBDIR/systemd $KERNEL_APPEND" if [[ "$NSPAWN_TIMEOUT" != "infinity" ]]; then _nspawn_cmd="timeout --foreground $NSPAWN_TIMEOUT $_nspawn_cmd" @@ -1284,11 +1288,6 @@ inst_libdir_file() { fi } -check_nspawn() { - [[ -d /run/systemd/system ]] -} - - do_test() { if [[ $UID != "0" ]]; then echo "TEST: $TEST_DESCRIPTION [SKIPPED]: not root" >&2