test: mount unit with credential

Verify mount unit credential file is present.
This commit is contained in:
davjav
2024-12-10 20:57:20 +01:00
committed by Mike Yuan
parent 6577cf1ba9
commit 5b66f3df16
+46
View File
@@ -23,6 +23,49 @@ run_with_cred_compare() (
diff "$log_file" <(echo -ne "$exp")
)
test_mount_with_credential() {
local credfile tmpdir unit
credfile="/tmp/mount-cred"
tmpdir="/tmp/test-54-mount"
unit=$(systemd-escape --suffix mount --path "$tmpdir")
echo foo >"$credfile"
mkdir -p "$tmpdir"
# Set up test mount unit
cat >/run/systemd/system/"$unit" <<EOF
[Mount]
What=tmpfs
Where=$tmpdir
Type=thisisatest
LoadCredential=loadcred:$credfile
EOF
# Set up test mount type
cat >/usr/sbin/mount.thisisatest <<EOF
#!/usr/bin/env bash
# Mount after verifying credential file content
if [ \$(cat \${CREDENTIALS_DIRECTORY}/loadcred) = "foo" ]; then
mount -t tmpfs \$1 \$2
fi
EOF
chmod +x /usr/sbin/mount.thisisatest
# Verify mount succeeds
systemctl daemon-reload
systemctl start "$unit"
systemctl --no-pager show -p SubState --value "$unit" | grep -q mounted
# Verify mount fails with different credential file content
echo bar >"$credfile"
(! systemctl restart "$unit")
# Stop unit and delete files
systemctl stop "$unit"
rm -f "$credfile" /run/systemd/system/"$unit" /usr/sbin/mount.thisisatest
rm -rf "$tmpdir"
}
# Sanity checks
#
# Create a dummy "full" disk (similar to /dev/full) to check out-of-space
@@ -474,6 +517,9 @@ systemd-creds encrypt --user /tmp/usertest.data /tmp/usertest.creds --name=mytes
systemctl start user@0.service
XDG_RUNTIME_DIR=/run/user/0 systemd-run --pipe --user --unit=waldi.service -p LoadCredentialEncrypted=mytest:/tmp/usertest.creds cat /run/user/0/credentials/waldi.service/mytest | cmp /tmp/usertest.data
# Test mount unit with credential
test_mount_with_credential
systemd-analyze log-level info
touch /testok