]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: mount overlayfs over /usr in some tests
authorRichard Maw <richard.maw@codethink.co.uk>
Fri, 8 Dec 2023 18:56:25 +0000 (18:56 +0000)
committerRichard Maw <richard.maw@codethink.co.uk>
Wed, 13 Dec 2023 17:55:45 +0000 (17:55 +0000)
Most of the integration tests have been made to not write to /usr
but some genuinely need to do so.

Because mkosi creates images with a read-only /usr
it is not normally writeable.

By mounting an overlayfs with /usr as the lower dir
and upper and working dirs in /var tests may write to /usr.

test/units/testsuite-15.sh
test/units/testsuite-26.sh
test/units/testsuite-60.sh
test/units/testsuite-73.sh
test/units/util.sh

index e790b37c70d0d75bec751276ce4df2333f2fbbc4..0266f6266fb43ce007801925cce7ac371be26fcc 100755 (executable)
@@ -5,6 +5,11 @@ set -o pipefail
 
 # shellcheck source=test/units/test-control.sh
 . "$(dirname "$0")"/test-control.sh
+# shellcheck source=test/units/util.sh
+. "$(dirname "$0")"/util.sh
+
+maybe_mount_usr_overlay
+trap 'maybe_umount_usr_overlay' EXIT
 
 clear_unit() {
     local unit_name="${1:?}"
index 5aaac099f45b2413a9802651b0508bf9bb595f3a..9f672c738a36633aa0f14ecb9b77a289bffe1470 100755 (executable)
@@ -12,10 +12,13 @@ at_exit() {
         rm -fvr "/usr/lib/systemd/system/$UNIT_NAME" "/etc/systemd/system/$UNIT_NAME.d" "+4"
     fi
 
+    maybe_umount_usr_overlay
+
     rm -f /etc/init.d/issue-24990
     return 0
 }
 
+maybe_mount_usr_overlay
 trap at_exit EXIT
 
 # Create a simple unit file for testing
index e800a7a12c2695d1246f7850bb1521dcef9d6009..3d0723e7dcc096776c75ccedac72708d4ab37ee7 100755 (executable)
@@ -6,6 +6,9 @@ set -o pipefail
 # shellcheck source=test/units/util.sh
 . "$(dirname "$0")"/util.sh
 
+maybe_mount_usr_overlay
+trap 'maybe_umount_usr_overlay' EXIT
+
 teardown_test_dependencies() (
     set +eux
 
index df5af4ba87352d551902e31a175583c2326e5982..3e5b78879ad46894e75b0f750e96e1e6d0abcc1f 100755 (executable)
@@ -9,6 +9,9 @@ set -o pipefail
 # shellcheck source=test/units/util.sh
 . "$(dirname "$0")"/util.sh
 
+maybe_mount_usr_overlay
+trap 'maybe_umount_usr_overlay' EXIT
+
 enable_debug() {
     mkdir -p /run/systemd/system/systemd-localed.service.d
     cat >>/run/systemd/system/systemd-localed.service.d/override.conf <<EOF
index b5ed73237c8babc45bb90e2ccd624ee97f5a2091..a18c8980cf0ee7185077523c4e42758aaa8264e2 100755 (executable)
@@ -216,3 +216,19 @@ kernel_supports_lsm() {
 
     return 1
 }
+
+MOUNTED_USR_OVERLAY=false
+
+maybe_mount_usr_overlay() {
+    if [[ ! -w /usr ]]; then
+        mkdir -p /tmp/usr-overlay/{upperdir,workdir}
+        mount -t overlay -o lowerdir=/usr,upperdir=/tmp/usr-overlay/upperdir,workdir=/tmp/usr-overlay/workdir overlay /usr
+       MOUNTED_USR_OVERLAY=true
+    fi
+}
+
+maybe_umount_usr_overlay() {
+    if "$MOUNTED_USR_OVERLAY"; then
+        umount -l /usr
+    fi
+}