test: Factorize common integration test functions (#6540)
authorMartin Pitt <martinpitt@users.noreply.github.com>
Fri, 4 Aug 2017 12:34:14 +0000 (14:34 +0200)
committerEvgeny Vereshchagin <evvers@ya.ru>
Fri, 4 Aug 2017 12:34:14 +0000 (15:34 +0300)
All test/TEST* but TEST-02-CRYPTSETUP share the same check_result_qemu()
and test_cleanup(), so move them into test_functions and only override
them in TEST-02-CRYPTSETUP.

Also provide a common test_run() which by default assumes that both QEMU
and nspawn tests are run. Particular tests which don't support either
need to explicitly opt out by setting $TEST_NO_{QEMU,NSPAWN}. Do it this
way around to avoid accidentally forgetting to opt in, and to encourage
test authors to at least always support nspawn.

16 files changed:
test/TEST-01-BASIC/test.sh
test/TEST-02-CRYPTSETUP/test.sh
test/TEST-03-JOBS/test.sh
test/TEST-04-JOURNAL/test.sh
test/TEST-05-RLIMITS/test.sh
test/TEST-06-SELINUX/test.sh
test/TEST-07-ISSUE-1981/test.sh
test/TEST-08-ISSUE-2730/test.sh
test/TEST-09-ISSUE-2691/test.sh
test/TEST-10-ISSUE-2467/test.sh
test/TEST-11-ISSUE-3166/test.sh
test/TEST-12-ISSUE-3171/test.sh
test/TEST-13-NSPAWN-SMOKE/test.sh
test/TEST-14-MACHINE-ID/test.sh
test/TEST-15-DROPIN/test.sh
test/test-functions

index 041195d..b1d6e19 100755 (executable)
@@ -5,34 +5,6 @@ TEST_DESCRIPTION="Basic systemd setup"
 
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -71,10 +43,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index aea0fc5..31eced5 100755 (executable)
@@ -2,6 +2,7 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="cryptsetup systemd setup"
+TEST_NO_NSPAWN=1
 
 . $TEST_BASE_DIR/test-functions
 
@@ -24,15 +25,6 @@ check_result_qemu() {
 }
 
 
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     echo -n test >$TESTDIR/keyfile
index ab0de0b..a3755a7 100755 (executable)
@@ -5,34 +5,6 @@ TEST_DESCRIPTION="Job-related tests"
 
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -69,10 +41,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 3ccf113..66fc5af 100755 (executable)
@@ -5,34 +5,6 @@ TEST_DESCRIPTION="Journal-related tests"
 
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -75,10 +47,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index a5f7e8d..e684b6d 100755 (executable)
@@ -5,34 +5,6 @@ TEST_DESCRIPTION="Resource limits-related tests"
 
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -71,10 +43,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 1ae4a7c..ab4bb43 100755 (executable)
@@ -2,6 +2,7 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="SELinux tests"
+TEST_NO_NSPAWN=1
 
 # Requirements:
 # Fedora 23
@@ -12,29 +13,6 @@ TEST_DESCRIPTION="SELinux tests"
 SETUP_SELINUX=yes
 KERNEL_APPEND="$KERNEL_APPEND selinux=1 security=selinux"
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -126,10 +104,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 2f7f010..a55c691 100755 (executable)
@@ -2,21 +2,12 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/1981"
+TEST_NO_QEMU=1
 
 . $TEST_BASE_DIR/test-functions
 
 NSPAWN_TIMEOUT=30s
 
-test_run() {
-    dwarn "skipping QEMU"
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -50,10 +41,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 4483198..f7f3400 100755 (executable)
@@ -2,36 +2,13 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/2730"
+TEST_NO_NSPAWN=1
 
 . $TEST_BASE_DIR/test-functions
 SKIP_INITRD=yes
 QEMU_TIMEOUT=180
 FSTYPE=ext4
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -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
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -103,10 +80,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 8ae02e6..1bd620a 100755 (executable)
@@ -2,35 +2,12 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/2691"
+TEST_NO_NSPAWN=1
 
 . $TEST_BASE_DIR/test-functions
 SKIP_INITRD=yes
 QEMU_TIMEOUT=90
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -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
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -71,10 +48,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 4eca678..dfc7cbe 100755 (executable)
@@ -2,33 +2,11 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/2467"
+TEST_NO_NSPAWN=1
 
 . $TEST_BASE_DIR/test-functions
 SKIP_INITRD=yes
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -82,10 +60,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 0f269c8..12bf842 100755 (executable)
@@ -2,33 +2,11 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/3166"
+TEST_NO_NSPAWN=1
 
 . $TEST_BASE_DIR/test-functions
 SKIP_INITRD=yes
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -85,10 +63,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index c252bdf..7837f63 100755 (executable)
@@ -2,18 +2,10 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/3171"
+TEST_NO_QEMU=1
 
 . $TEST_BASE_DIR/test-functions
 
-test_run() {
-    if run_nspawn; then
-        check_result_nspawn || return 1
-    else
-        dwarn "can't run systemd-nspawn, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -100,10 +92,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 75b9923..84a3af3 100755 (executable)
@@ -2,32 +2,10 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="systemd-nspawn smoke test"
+TEST_NO_NSPAWN=1
 SKIP_INITRD=yes
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -153,10 +131,4 @@ EOF
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 35106e3..c406205 100755 (executable)
@@ -2,32 +2,10 @@
 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 TEST_DESCRIPTION="Basic systemd setup"
+TEST_NO_NSPAWN=1
 SKIP_INITRD=yes
 . $TEST_BASE_DIR/test-functions
 
-check_result_qemu() {
-    ret=1
-    mkdir -p $TESTDIR/root
-    mount ${LOOPDEV}p1 $TESTDIR/root
-    [[ -e $TESTDIR/root/testok ]] && ret=0
-    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
-    cp -a $TESTDIR/root/var/log/journal $TESTDIR
-    umount $TESTDIR/root
-    [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
-    ls -l $TESTDIR/journal/*/*.journal
-    test -s $TESTDIR/failed && ret=$(($ret+1))
-    return $ret
-}
-
-test_run() {
-    if run_qemu; then
-        check_result_qemu || return 1
-    else
-        dwarn "can't run QEMU, skipping"
-    fi
-    return 0
-}
-
 test_setup() {
     create_empty_image
     mkdir -p $TESTDIR/root
@@ -110,10 +88,4 @@ chmod +x $initdir/test-machine-id-setup.sh
     umount $TESTDIR/root
 }
 
-test_cleanup() {
-    umount $TESTDIR/root 2>/dev/null
-    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
-    return 0
-}
-
 do_test "$@"
index 1b460db..536b379 100755 (executable)
@@ -3,22 +3,10 @@
 # ex: ts=8 sw=4 sts=4 et filetype=sh
 
 TEST_DESCRIPTION="Dropin tests"
+TEST_NO_QEMU=1
 
 . $TEST_BASE_DIR/test-functions
 
-
-test_run_nspawn() {
-        if ! run_nspawn; then
-                dwarn "can't run systemd-nspawn, skipping"
-                return 0
-        fi
-        check_result_nspawn
-}
-
-test_run() {
-        test_run_nspawn || return
-}
-
 test_setup() {
         # create the basic filesystem layout
         setup_basic_environment >/dev/null
index 6492608..5d66b7b 100644 (file)
@@ -375,6 +375,22 @@ check_result_nspawn() {
     return $ret
 }
 
+# can be overridden in specific test
+check_result_qemu() {
+    ret=1
+    mkdir -p $TESTDIR/root
+    mount ${LOOPDEV}p1 $TESTDIR/root
+    [[ -e $TESTDIR/root/testok ]] && ret=0
+    [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
+    cp -a $TESTDIR/root/var/log/journal $TESTDIR
+    umount $TESTDIR/root
+    [[ -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
+}
+
 strip_binaries() {
     if [[ "$STRIP_BINARIES" = "no" ]]; then
         ddebug "Don't strip binaries"
@@ -1360,6 +1376,31 @@ setup_suse() {
     inst_simple "/usr/lib/systemd/system/haveged.service"
 }
 
+# can be overridden in specific test
+test_cleanup() {
+    umount $TESTDIR/root 2>/dev/null || true
+    [[ $LOOPDEV ]] && losetup -d $LOOPDEV
+    return 0
+}
+
+test_run() {
+    if [ -z "$TEST_NO_QEMU" ]; then
+        if run_qemu; then
+            check_result_qemu || return 1
+        else
+            dwarn "can't run QEMU, skipping"
+        fi
+    fi
+    if [ -z "$TEST_NO_NSPAWN" ]; then
+        if run_nspawn; then
+            check_result_nspawn || return 1
+        else
+            dwarn "can't run systemd-nspawn, skipping"
+        fi
+    fi
+    return 0
+}
+
 do_test() {
     if [[ $UID != "0" ]]; then
         echo "TEST: $TEST_DESCRIPTION [SKIPPED]: not root" >&2