Several integration test fixlets (#42484)

This commit is contained in:
Yu Watanabe
2026-06-05 09:46:18 +09:00
committed by GitHub
10 changed files with 43 additions and 33 deletions
+8 -6
View File
@@ -24,12 +24,14 @@ systemd-run --unit test-nft.service --service-type=exec -p DynamicUser=yes \
-p 'NFTSet=cgroup:inet:sd_test:c user:inet:sd_test:u group:inet:sd_test:g' sleep 10000
run nft list set inet sd_test c
grep -qF "test-nft.service" "$RUN_OUT"
uid=$(userdbctl user --json=short test-nft | jq .uid)
run nft list set inet sd_test u
grep -qF "$uid" "$RUN_OUT"
gid=$(userdbctl user --json=short test-nft | jq .gid)
run nft list set inet sd_test g
grep -qF "$gid" "$RUN_OUT"
if command -v userdbctl >/dev/null; then
uid=$(userdbctl user --json=short test-nft | jq .uid)
run nft list set inet sd_test u
grep -qF "$uid" "$RUN_OUT"
gid=$(userdbctl user --json=short test-nft | jq .gid)
run nft list set inet sd_test g
grep -qF "$gid" "$RUN_OUT"
fi
systemctl stop test-nft.service
# scope
+8 -1
View File
@@ -405,12 +405,18 @@ testcase_check_default_inaccessible_paths() {
# Taken from src/nspawn/nspawn-mount.c:mount_all()
inaccessible_paths=(
"/proc/kallsyms"
"/proc/kcore"
"/proc/keys"
"/proc/sysrq-trigger"
"/proc/timer_list"
)
# /proc/kcore may not exist on some kernels, e.g. Alpine/postmarketOS.
if [[ -e /proc/kcore ]]; then
inaccessible_paths+=(
"/proc/kcore"
)
fi
root="$(mktemp -d /var/lib/machines/TEST-13-NSPAWN.default_inaccessible_paths.XXX)"
container="$(basename "$root")"
create_dummy_container "$root"
@@ -1586,6 +1592,7 @@ testcase_boot_param_split() {
# Replace the init binary with a stub that records the argv and environment nspawn passes to it,
# so we can verify that kernel-cmdline-style KEY=VALUE arguments are split between PID 1's
# environment and argv the same way the kernel splits them.
mkdir -p "$root/usr/lib/systemd"
cat >"$root/usr/lib/systemd/systemd" <<'EOF'
#!/bin/bash
set -e
+3 -3
View File
@@ -126,13 +126,13 @@ systemd-mstack -U /tmp/ooo
ls -alR /home/testuser/.local/state/machines/ocicombo.mstack
run0 -u testuser importctl list-images --user | grep -q ocicombo
run0 -u testuser importctl list-images --user | grep ocicombo >/dev/null
ls -alR /home/testuser/.local/state/machines/ocicombo.mstack
run0 -u testuser systemd-nspawn -q --pipe -M ocicombo /sbin/init | grep -q luftikus
run0 -u testuser systemd-nspawn -q --pipe -M ocicombo /sbin/init | grep luftikus >/dev/null
run0 -u testuser --pipe systemd-run -q --unit=fimpel --user -p PrivateUsers=managed -p RootMStack=/home/testuser/.local/state/machines/ocicombo.mstack --pipe /sbin/init | grep -q luftikus
run0 -u testuser --pipe systemd-run -q --unit=fimpel --user -p PrivateUsers=managed -p RootMStack=/home/testuser/.local/state/machines/ocicombo.mstack --pipe /sbin/init | grep luftikus >/dev/null
run0 -u testuser machinectl list-images -a --user
-12
View File
@@ -54,12 +54,6 @@ systemctl kill -sUSR1 systemd-homed
testcase_basic() {
local TMP_SKEL
. /etc/os-release
if [[ "${ID_LIKE:-}" == alpine ]] && ! systemd-detect-virt -cq; then
# luks seems to be broken on alpine/postmarketos.
return 0
fi
TMP_SKEL=$(mktemp -d)
echo hogehoge >"$TMP_SKEL"/hoge
@@ -274,12 +268,6 @@ testcase_basic() {
}
testcase_blob() {
. /etc/os-release
if [[ "${ID_LIKE:-}" == alpine ]] && ! systemd-detect-virt -cq; then
# luks seems to be broken on alpine/postmarketos.
return 0
fi
# blob directory tests
# See docs/USER_RECORD_BLOB_DIRS.md
checkblob() {
+1 -1
View File
@@ -411,7 +411,7 @@ ExecStart=bash -c ' \\
sleep 0.1; \\
done; \\
mount; \\
mount | grep -F "on /tmp/img type squashfs" | grep -q -F "nosuid"; \\
mount | grep -F "on /tmp/img type squashfs" | grep -F "nosuid" >/dev/null; \\
'
EOF
systemctl start testservice-50d.service
+2 -2
View File
@@ -175,13 +175,13 @@ EOF
systemd-run -M testuser@ --user --pipe --wait \
--property RootImage="$MINIMAL_IMAGE.gpt" \
--property RootImageOptions="root:nosuid" \
sh -c "test -e \"/dev/mapper/${MINIMAL_IMAGE_ROOTHASH}-verity\" && mount | grep -F squashfs | grep -q -F nosuid"
sh -c "test -e \"/dev/mapper/${MINIMAL_IMAGE_ROOTHASH}-verity\" && mount | grep -F squashfs | grep -F nosuid >/dev/null"
systemd-run -M testuser@ --user --pipe --wait \
--property RootImage="$MINIMAL_IMAGE.raw" \
--property ExtensionImages=/tmp/app0.raw \
--property MountImages=/tmp/app0.raw:/var/tmp:nosuid \
sh -c "test -e \"/dev/mapper/${MINIMAL_IMAGE_ROOTHASH}-verity\" && test -e \"/dev/mapper/$(</tmp/app0.roothash)-verity\" && mount | grep -F /var/tmp | grep -q -F nosuid"
sh -c "test -e \"/dev/mapper/${MINIMAL_IMAGE_ROOTHASH}-verity\" && test -e \"/dev/mapper/$(</tmp/app0.roothash)-verity\" && mount | grep -F /var/tmp | grep -F nosuid >/dev/null"
rm -f /etc/polkit-1/rules.d/mountoptions.rules
systemctl try-reload-or-restart polkit.service
+9 -3
View File
@@ -1951,7 +1951,7 @@ EOF
touch "$imgs/empty-password"
# the expectation for hmac-sha256 is 'integrity: hmac(sha256)'
cryptsetup luksDump "${loop}p1" | grep -q "integrity: $(echo "$1" | sed -r 's/^hmac-(.*)$/hmac(\1)/')"
cryptsetup luksDump "${loop}p1" | grep "integrity: $(echo "$1" | sed -r 's/^hmac-(.*)$/hmac(\1)/')" >/dev/null
cryptsetup open --type=luks2 --key-file="$imgs/empty-password" "${loop}p1" "$volume"
dmsetup status > "$dmstatus"
@@ -2149,7 +2149,7 @@ testcase_block_device_replace() {
local defs imgs btrfs_mntpoint_plain btrfs_mntpoint_encrypted
local loop loop_btrfs_plain loop_btrfs_encrypted
local encrypted_device
local dm_btrfs_encrypted encrypted_device
btrfs_mntpoint_plain="$(mktemp --directory "/tmp/test-repart.btrfs-mntpoint-plain.XXXXXXXXXX")"
btrfs_mntpoint_encrypted="$(mktemp --directory "/tmp/test-repart.btrfs-mntpoint-encrypted.XXXXXXXXXX")"
@@ -2216,7 +2216,13 @@ EOF
"${loop}"
assert_eq "$(findmnt "${btrfs_mntpoint_plain}" -o SOURCE -n)" "${loop}p1"
assert_eq "$(findmnt "${btrfs_mntpoint_encrypted}" -o SOURCE -n)" "/dev/mapper/btrfs-replace-encrypted"
dm_btrfs_encrypted="$(findmnt "${btrfs_mntpoint_encrypted}" -o SOURCE -n)"
if [[ "$dm_btrfs_encrypted" != "/dev/mapper/btrfs-replace-encrypted" ]]; then
# When libdevmapper is built without UDEV_SYNC_SUPPORT (e.g. on Alpine/postmarketOS),
# it creates a device node under /dev/mapper/ instead of relying on udev to create a symlink.
# In this case, verify that both device nodes refer to the same underlying device.
assert_eq "$(stat -c %Hr:%Lr "$dm_btrfs_encrypted")" "$(stat -c %Hr:%Lr /dev/mapper/btrfs-replace-encrypted)"
fi
encrypted_device="/sys/dev/block/$(dmsetup table /dev/mapper/btrfs-replace-encrypted | cut -d" " -f7)"
assert_eq "$(udevadm info --query=property --property=DEVNAME --value "${encrypted_device}")" "${loop}p2"
grep -q tada "${btrfs_mntpoint_plain}/magic-plain"
+6 -4
View File
@@ -11,11 +11,13 @@ u unlockedtestuser - "An unlocked system user" / /bin/bash
u! lockedtestuser - "A locked system user" / /bin/bash
EOF
userdbctl -j user unlockedtestuser
userdbctl -j user lockedtestuser
if command -v userdbctl >/dev/null; then
userdbctl -j user unlockedtestuser
userdbctl -j user lockedtestuser
assert_eq "$(userdbctl -j user unlockedtestuser | jq .locked)" "null"
assert_eq "$(userdbctl -j user lockedtestuser | jq .locked)" "true"
assert_eq "$(userdbctl -j user unlockedtestuser | jq .locked)" "null"
assert_eq "$(userdbctl -j user lockedtestuser | jq .locked)" "true"
fi
at_exit() {
set +e
@@ -3,6 +3,11 @@
set -eux
set -o pipefail
if ! command -v userdbctl >/dev/null; then
echo "userdbctl is not installed, skipping the test."
exit 0
fi
# shellcheck source=test/units/util.sh
. "$(dirname "$0")"/util.sh
+1 -1
View File
@@ -207,7 +207,7 @@ varlinkctl call /run/systemd/io.systemd.Manager io.systemd.Manager.Reexecute '{}
# Wait for the manager to finish re-exec before proceeding — the user manager
# tests below use systemd-run which requires a functional PID 1.
for _ in {1..10}; do
if systemctl is-system-running 2>/dev/null | grep -qE 'running|degraded'; then
if systemctl is-system-running 2>/dev/null | grep -E 'running|degraded' >/dev/null; then
break
fi
sleep 1