test: move TEST-43-* setup to static files
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 20 Mar 2020 18:05:36 +0000 (19:05 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 28 Mar 2020 10:46:48 +0000 (11:46 +0100)
Setup of lingering is dropped. I don't think it's necessary for anything,
because the unit is still pulled in from the testsuite service.

test/TEST-43-PRIVATEUSER-UNPRIV/test.sh
test/TEST-43-PRIVATEUSER-UNPRIV/testsuite.sh [deleted file]
test/test-functions
test/units/testsuite-43.service [new file with mode: 0644]
test/units/testsuite-43.sh [new file with mode: 0755]

index 3b40bf7d8bb5b4445fb33d311e6a22199ec9cebc..4eed8242fd84e53e298be5ebc5ab68ba3f579770 100755 (executable)
@@ -11,39 +11,11 @@ test_setup() {
         eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
 
         setup_basic_environment
-        inst_binary stat
-
         mask_supporting_services
-
-        # Allocate user for running test case under
-        mkdir -p $initdir/etc/sysusers.d
-        cat >$initdir/etc/sysusers.d/testuser.conf <<EOF
-u testuser    4711     "Test User" /home/testuser
-EOF
-
-        mkdir -p $initdir/home/testuser -m 0700
-        chown 4711:4711 $initdir/home/testuser
-
-        enable_user_manager testuser
-
-        # setup the testsuite service
-        cat >$initdir/etc/systemd/system/testsuite.service <<EOF
-[Unit]
-Description=Testsuite service
-After=systemd-logind.service user@4711.service
-Wants=user@4711.service
-
-[Service]
-ExecStart=/testsuite.sh
-Type=oneshot
-EOF
-        cp testsuite.sh $initdir/
-
-        setup_testsuite
     )
     setup_nspawn_root
 }
 
 has_user_dbus_socket || exit 0
 
-do_test "$@"
+do_test "$@" 43
diff --git a/test/TEST-43-PRIVATEUSER-UNPRIV/testsuite.sh b/test/TEST-43-PRIVATEUSER-UNPRIV/testsuite.sh
deleted file mode 100755 (executable)
index ff94ad4..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-#!/usr/bin/env bash
-set -ex
-set -o pipefail
-
-systemd-analyze log-level debug
-
-runas() {
-    declare userid=$1
-    shift
-    su "$userid" -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID exec "$@"' -- sh "$@"
-}
-
-runas testuser systemd-run --user --unit=test-private-users \
-    -p PrivateUsers=yes -P echo hello
-
-runas testuser systemd-run --user --unit=test-private-tmp-innerfile \
-    -p PrivateUsers=yes -p PrivateTmp=yes \
-    -P touch /tmp/innerfile.txt
-# File should not exist outside the job's tmp directory.
-test ! -e /tmp/innerfile.txt
-
-touch /tmp/outerfile.txt
-# File should not appear in unit's private tmp.
-runas testuser systemd-run --user --unit=test-private-tmp-outerfile \
-    -p PrivateUsers=yes -p PrivateTmp=yes \
-    -P test ! -e /tmp/outerfile.txt
-
-# Confirm that creating a file in home works
-runas testuser systemd-run --user --unit=test-unprotected-home \
-    -P touch /home/testuser/works.txt
-test -e /home/testuser/works.txt
-
-# Confirm that creating a file in home is blocked under read-only
-runas testuser systemd-run --user --unit=test-protect-home-read-only \
-    -p PrivateUsers=yes -p ProtectHome=read-only \
-    -P bash -c '
-        test -e /home/testuser/works.txt
-        ! touch /home/testuser/blocked.txt
-    '
-test ! -e /home/testuser/blocked.txt
-
-# Check that tmpfs hides the whole directory
-runas testuser systemd-run --user --unit=test-protect-home-tmpfs \
-    -p PrivateUsers=yes -p ProtectHome=tmpfs \
-    -P test ! -e /home/testuser
-
-# Confirm that home, /root, and /run/user are inaccessible under "yes"
-runas testuser systemd-run --user --unit=test-protect-home-yes \
-    -p PrivateUsers=yes -p ProtectHome=yes \
-    -P bash -c '
-        test "$(stat -c %a /home)" = "0"
-        test "$(stat -c %a /root)" = "0"
-        test "$(stat -c %a /run/user)" = "0"
-    '
-
-# Confirm we cannot change groups because we only have one mapping in the user
-# namespace (no CAP_SETGID in the parent namespace to write the additional
-# mapping of the user supplied group and thus cannot change groups to an
-# unmapped group ID)
-! runas testuser systemd-run --user --unit=test-group-fail \
-    -p PrivateUsers=yes -p Group=daemon \
-    -P true
-
-systemd-analyze log-level info
-
-echo OK > /testok
-
-exit 0
index eed3c3b9cdfe8432945d75c046f64dfaf6bffc45..6043192a01f3b921da0401d7766972b1353fdc52 100644 (file)
@@ -89,6 +89,7 @@ BASICTOOLS=(
     sleep
     socat
     stat
+    su
     sulogin
     sysctl
     tail
@@ -417,6 +418,8 @@ setup_basic_environment() {
     install_plymouth
     install_debug_tools
     install_ld_so_conf
+    install_testuser
+    has_user_dbus_socket && install_user_dbus
     setup_selinux
     strip_binaries
     install_depmod_files
@@ -825,6 +828,17 @@ install_ld_so_conf() {
     ldconfig -r "$initdir"
 }
 
+install_testuser() {
+    # create unprivileged user for user manager tests
+    mkdir -p $initdir/etc/sysusers.d
+    cat >$initdir/etc/sysusers.d/testuser.conf <<EOF
+u testuser    4711     "Test User" /home/testuser
+EOF
+
+    mkdir -p $initdir/home/testuser -m 0700
+    chown 4711:4711 $initdir/home/testuser
+}
+
 install_config_files() {
     inst /etc/sysconfig/init || :
     inst /etc/passwd
@@ -1034,19 +1048,6 @@ has_user_dbus_socket() {
     fi
 }
 
-enable_user_manager() {
-    has_user_dbus_socket || return 0
-
-    local _userid
-    [[ $# -gt 0 ]] || set -- nobody
-    mkdir -p "$initdir/var/lib/systemd/linger"
-    for _userid; do
-        touch "$initdir/var/lib/systemd/linger/$_userid"
-    done
-    dracut_install su
-    install_user_dbus
-}
-
 setup_nspawn_root() {
     rm -fr $TESTDIR/nspawn-root
     ddebug "cp -ar $initdir $TESTDIR/nspawn-root"
diff --git a/test/units/testsuite-43.service b/test/units/testsuite-43.service
new file mode 100644 (file)
index 0000000..6badedc
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=TEST-43-PRIVATEUSER-UNPRIV
+After=systemd-logind.service user@4711.service
+Wants=user@4711.service
+
+[Service]
+ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+Type=oneshot
diff --git a/test/units/testsuite-43.sh b/test/units/testsuite-43.sh
new file mode 100755 (executable)
index 0000000..ff94ad4
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+set -ex
+set -o pipefail
+
+systemd-analyze log-level debug
+
+runas() {
+    declare userid=$1
+    shift
+    su "$userid" -s /bin/sh -c 'XDG_RUNTIME_DIR=/run/user/$UID exec "$@"' -- sh "$@"
+}
+
+runas testuser systemd-run --user --unit=test-private-users \
+    -p PrivateUsers=yes -P echo hello
+
+runas testuser systemd-run --user --unit=test-private-tmp-innerfile \
+    -p PrivateUsers=yes -p PrivateTmp=yes \
+    -P touch /tmp/innerfile.txt
+# File should not exist outside the job's tmp directory.
+test ! -e /tmp/innerfile.txt
+
+touch /tmp/outerfile.txt
+# File should not appear in unit's private tmp.
+runas testuser systemd-run --user --unit=test-private-tmp-outerfile \
+    -p PrivateUsers=yes -p PrivateTmp=yes \
+    -P test ! -e /tmp/outerfile.txt
+
+# Confirm that creating a file in home works
+runas testuser systemd-run --user --unit=test-unprotected-home \
+    -P touch /home/testuser/works.txt
+test -e /home/testuser/works.txt
+
+# Confirm that creating a file in home is blocked under read-only
+runas testuser systemd-run --user --unit=test-protect-home-read-only \
+    -p PrivateUsers=yes -p ProtectHome=read-only \
+    -P bash -c '
+        test -e /home/testuser/works.txt
+        ! touch /home/testuser/blocked.txt
+    '
+test ! -e /home/testuser/blocked.txt
+
+# Check that tmpfs hides the whole directory
+runas testuser systemd-run --user --unit=test-protect-home-tmpfs \
+    -p PrivateUsers=yes -p ProtectHome=tmpfs \
+    -P test ! -e /home/testuser
+
+# Confirm that home, /root, and /run/user are inaccessible under "yes"
+runas testuser systemd-run --user --unit=test-protect-home-yes \
+    -p PrivateUsers=yes -p ProtectHome=yes \
+    -P bash -c '
+        test "$(stat -c %a /home)" = "0"
+        test "$(stat -c %a /root)" = "0"
+        test "$(stat -c %a /run/user)" = "0"
+    '
+
+# Confirm we cannot change groups because we only have one mapping in the user
+# namespace (no CAP_SETGID in the parent namespace to write the additional
+# mapping of the user supplied group and thus cannot change groups to an
+# unmapped group ID)
+! runas testuser systemd-run --user --unit=test-group-fail \
+    -p PrivateUsers=yes -p Group=daemon \
+    -P true
+
+systemd-analyze log-level info
+
+echo OK > /testok
+
+exit 0