mirror of
https://github.com/systemd/systemd.git
synced 2024-12-22 17:35:35 +03:00
Merge pull request #32944 from yuwata/test-74
test: several changes for TEST-74-AUX-UTILS
This commit is contained in:
commit
2d988c149d
@ -105,7 +105,9 @@ EOF
|
||||
# Wait a bit for the coredumps to get processed
|
||||
timeout 30 bash -c "while [[ \$(systemd-run -M $CONTAINER -q --wait --pipe coredumpctl list -q --no-legend /usr/bin/sleep | wc -l) -lt 2 ]]; do sleep 1; done"
|
||||
|
||||
machinectl stop "$CONTAINER"
|
||||
rm -rf "/var/lib/machines/$CONTAINER"
|
||||
unset CONTAINER
|
||||
fi
|
||||
|
||||
coredumpctl
|
||||
|
@ -6,13 +6,6 @@ set -o pipefail
|
||||
# shellcheck source=test/units/util.sh
|
||||
. "$(dirname "$0")"/util.sh
|
||||
|
||||
# We're going to play around with block/loop devices, so bail out early
|
||||
# if we're running in nspawn
|
||||
if systemd-detect-virt --container >/dev/null; then
|
||||
echo "Container detected, skipping the test"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
at_exit() {
|
||||
set +e
|
||||
|
||||
@ -23,6 +16,7 @@ at_exit() {
|
||||
trap at_exit EXIT
|
||||
|
||||
WORK_DIR="$(mktemp -d)"
|
||||
mkdir -p "$WORK_DIR/mnt"
|
||||
|
||||
systemd-mount --list
|
||||
systemd-mount --list --full
|
||||
@ -30,6 +24,28 @@ systemd-mount --list --no-legend
|
||||
systemd-mount --list --no-pager
|
||||
systemd-mount --list --quiet
|
||||
|
||||
# tmpfs
|
||||
mkdir -p "$WORK_DIR/mnt/foo/bar"
|
||||
systemd-mount --tmpfs "$WORK_DIR/mnt/foo"
|
||||
test ! -d "$WORK_DIR/mnt/foo/bar"
|
||||
touch "$WORK_DIR/mnt/foo/baz"
|
||||
systemd-umount "$WORK_DIR/mnt/foo"
|
||||
test -d "$WORK_DIR/mnt/foo/bar"
|
||||
test ! -e "$WORK_DIR/mnt/foo/baz"
|
||||
|
||||
# overlay
|
||||
systemd-mount --type=overlay --options="lowerdir=/etc,upperdir=$WORK_DIR/upper,workdir=$WORK_DIR/work" /etc "$WORK_DIR/overlay"
|
||||
touch "$WORK_DIR/overlay/foo"
|
||||
test -e "$WORK_DIR/upper/foo"
|
||||
systemd-umount "$WORK_DIR/overlay"
|
||||
|
||||
# We're going to play around with block/loop devices, so bail out early
|
||||
# if we're running in nspawn
|
||||
if systemd-detect-virt --container >/dev/null; then
|
||||
echo "Container detected, skipping the test"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Set up a simple block device for further tests
|
||||
dd if=/dev/zero of="$WORK_DIR/simple.img" bs=1M count=16
|
||||
mkfs.ext4 -L sd-mount-test "$WORK_DIR/simple.img"
|
||||
@ -38,11 +54,13 @@ udevadm wait --timeout 60 --settle "$LOOP"
|
||||
# Also wait for the .device unit for the loop device is active. Otherwise, the .device unit activation
|
||||
# that is triggered by the .mount unit introduced by systemd-mount below may time out.
|
||||
timeout 60 bash -c "until systemctl is-active $LOOP; do sleep 1; done"
|
||||
mkdir "$WORK_DIR/mnt"
|
||||
mount "$LOOP" "$WORK_DIR/mnt"
|
||||
touch "$WORK_DIR/mnt/foo.bar"
|
||||
umount "$LOOP"
|
||||
(! mountpoint "$WORK_DIR/mnt")
|
||||
# Wait for the mount unit to be unloaded. Otherwise, creation of the transient unit below may fail.
|
||||
MOUNT_UNIT=$(systemd-escape --path --suffix=mount "$WORK_DIR/mnt")
|
||||
timeout 60 bash -c "while [[ -n \$(systemctl list-units --all --no-legend $MOUNT_UNIT) ]]; do sleep 1; done"
|
||||
|
||||
# Mount with both source and destination set
|
||||
systemd-mount "$LOOP" "$WORK_DIR/mnt"
|
||||
@ -127,7 +145,12 @@ test -e /run/media/system/simple.img/foo.bar
|
||||
# systemd-mount --list and systemd-umount require the loopback block device is initialized by udevd.
|
||||
udevadm settle --timeout 30
|
||||
assert_in "/dev/loop.* ext4 +sd-mount-test" "$(systemd-mount --list --full)"
|
||||
LOOP_AUTO=$(systemd-mount --list --full --no-legend | awk '$6 == "sd-mount-test" { print $1 }')
|
||||
LOOP_AUTO_DEVPATH=$(udevadm info --query property --property DEVPATH --value "$LOOP_AUTO")
|
||||
systemd-umount "$WORK_DIR/simple.img"
|
||||
# Wait for 'change' uevent for the device with DISK_MEDIA_CHANGE=1.
|
||||
# After the event, the backing_file attribute should be removed.
|
||||
timeout 60 bash -c "while [[ -e /sys/$LOOP_AUTO_DEVPATH/loop/backing_file ]]; do sleep 1; done"
|
||||
|
||||
# --owner + vfat
|
||||
#
|
||||
@ -139,7 +162,15 @@ LOOP="$(losetup --show --find "$WORK_DIR/owner-vfat.img")"
|
||||
udevadm wait --timeout 60 --settle "$LOOP"
|
||||
# Also wait for the .device unit for the loop device is active. Otherwise, the .device unit activation
|
||||
# that is triggered by the .mount unit introduced by systemd-mount below may time out.
|
||||
timeout 60 bash -c "until systemctl is-active $LOOP; do sleep 1; done"
|
||||
if ! timeout 60 bash -c "until systemctl is-active $LOOP; do sleep 1; done"; then
|
||||
# For debugging issue like
|
||||
# https://github.com/systemd/systemd/issues/32680#issuecomment-2120959238
|
||||
# https://github.com/systemd/systemd/issues/32680#issuecomment-2122074805
|
||||
udevadm info "$LOOP"
|
||||
udevadm info --attribute-walk "$LOOP"
|
||||
cat /sys/"$(udevadm info --query property --property DEVPATH --value "$LOOP")"/loop/backing_file || :
|
||||
false
|
||||
fi
|
||||
# Mount it and check the UID/GID
|
||||
[[ "$(stat -c "%U:%G" "$WORK_DIR/mnt")" == "root:root" ]]
|
||||
systemd-mount --owner=testuser "$LOOP" "$WORK_DIR/mnt"
|
||||
@ -148,18 +179,3 @@ systemctl status "$WORK_DIR/mnt"
|
||||
touch "$WORK_DIR/mnt/hello"
|
||||
[[ "$(stat -c "%U:%G" "$WORK_DIR/mnt/hello")" == "testuser:testuser" ]]
|
||||
systemd-umount LABEL=owner-vfat
|
||||
|
||||
# tmpfs
|
||||
mkdir -p "$WORK_DIR/mnt/foo/bar"
|
||||
systemd-mount --tmpfs "$WORK_DIR/mnt/foo"
|
||||
test ! -d "$WORK_DIR/mnt/foo/bar"
|
||||
touch "$WORK_DIR/mnt/foo/baz"
|
||||
systemd-umount "$WORK_DIR/mnt/foo"
|
||||
test -d "$WORK_DIR/mnt/foo/bar"
|
||||
test ! -e "$WORK_DIR/mnt/foo/baz"
|
||||
|
||||
# overlay
|
||||
systemd-mount --type=overlay --options="lowerdir=/etc,upperdir=$WORK_DIR/upper,workdir=$WORK_DIR/work" /etc "$WORK_DIR/overlay"
|
||||
touch "$WORK_DIR/overlay/foo"
|
||||
test -e "$WORK_DIR/upper/foo"
|
||||
systemd-umount "$WORK_DIR/overlay"
|
||||
|
Loading…
Reference in New Issue
Block a user