mirror of
https://github.com/systemd/systemd
synced 2024-10-15 04:24:19 +00:00
test: add test case for mount unit dependencies
This commit is contained in:
parent
49267b1b14
commit
413f20b4ac
|
@ -3,6 +3,155 @@
|
|||
set -eux
|
||||
set -o pipefail
|
||||
|
||||
# shellcheck source=test/units/assert.sh
|
||||
. "$(dirname "$0")"/assert.sh
|
||||
|
||||
teardown_test_dependencies() (
|
||||
set +eux
|
||||
|
||||
if mountpoint /tmp/deptest; then
|
||||
umount /tmp/deptest
|
||||
fi
|
||||
|
||||
if [[ -n "${LOOP}" ]]; then
|
||||
losetup -d "${LOOP}" || :
|
||||
fi
|
||||
if [[ -n "${LOOP_0}" ]]; then
|
||||
losetup -d "${LOOP_0}" || :
|
||||
fi
|
||||
if [[ -n "${LOOP_1}" ]]; then
|
||||
losetup -d "${LOOP_1}" || :
|
||||
fi
|
||||
|
||||
rm -f /tmp/testsuite-60-dependencies-0.img
|
||||
rm -f /tmp/testsuite-60-dependencies-1.img
|
||||
|
||||
rm -f /run/systemd/system/tmp-deptest.mount
|
||||
systemctl daemon-reload
|
||||
|
||||
return 0
|
||||
)
|
||||
|
||||
setup_loop() {
|
||||
truncate -s 30m "/tmp/testsuite-60-dependencies-${1?}.img"
|
||||
sfdisk --wipe=always "/tmp/testsuite-60-dependencies-${1?}.img" <<EOF
|
||||
label:gpt
|
||||
|
||||
name="loop${1?}-part1"
|
||||
EOF
|
||||
LOOP=$(losetup -P --show -f "/tmp/testsuite-60-dependencies-${1?}.img")
|
||||
udevadm wait --settle --timeout=10 "${LOOP}p1"
|
||||
udevadm lock --device="${LOOP}p1" mkfs.ext4 -L "partname${1?}-1" "${LOOP}p1"
|
||||
}
|
||||
|
||||
check_dependencies() {
|
||||
local escaped_0 escaped_1 after
|
||||
|
||||
escaped_0=$(systemd-escape -p "${LOOP_0}p1")
|
||||
escaped_1=$(systemd-escape -p "${LOOP_1}p1")
|
||||
|
||||
if [[ -f /run/systemd/system/tmp-deptest.mount ]]; then
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_not_in "local-fs-pre.target" "$after"
|
||||
assert_in "remote-fs-pre.target" "$after"
|
||||
assert_in "network.target" "$after"
|
||||
fi
|
||||
|
||||
# mount LOOP_0
|
||||
mount -t ext4 "${LOOP_0}p1" /tmp/deptest
|
||||
sleep 1
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_in "local-fs-pre.target" "$after"
|
||||
assert_not_in "remote-fs-pre.target" "$after"
|
||||
assert_not_in "network.target" "$after"
|
||||
assert_in "${escaped_0}.device" "$after"
|
||||
assert_in "blockdev@${escaped_0}.target" "$after"
|
||||
assert_not_in "${escaped_1}.device" "$after"
|
||||
assert_not_in "blockdev@${escaped_1}.target" "$after"
|
||||
umount /tmp/deptest
|
||||
|
||||
if [[ -f /run/systemd/system/tmp-deptest.mount ]]; then
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_not_in "local-fs-pre.target" "$after"
|
||||
assert_in "remote-fs-pre.target" "$after"
|
||||
assert_in "network.target" "$after"
|
||||
fi
|
||||
|
||||
# mount LOOP_1 (using fake _netdev option)
|
||||
mount -t ext4 -o _netdev "${LOOP_1}p1" /tmp/deptest
|
||||
sleep 1
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_not_in "local-fs-pre.target" "$after"
|
||||
assert_in "remote-fs-pre.target" "$after"
|
||||
assert_in "network.target" "$after"
|
||||
assert_not_in "${escaped_0}.device" "$after"
|
||||
assert_not_in "blockdev@${escaped_0}.target" "$after"
|
||||
assert_in "${escaped_1}.device" "$after"
|
||||
assert_in "blockdev@${escaped_1}.target" "$after"
|
||||
umount /tmp/deptest
|
||||
|
||||
if [[ -f /run/systemd/system/tmp-deptest.mount ]]; then
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_not_in "local-fs-pre.target" "$after"
|
||||
assert_in "remote-fs-pre.target" "$after"
|
||||
assert_in "network.target" "$after"
|
||||
fi
|
||||
|
||||
# mount tmpfs
|
||||
mount -t tmpfs tmpfs /tmp/deptest
|
||||
sleep 1
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_in "local-fs-pre.target" "$after"
|
||||
assert_not_in "remote-fs-pre.target" "$after"
|
||||
assert_not_in "network.target" "$after"
|
||||
assert_not_in "${escaped_0}.device" "$after"
|
||||
assert_not_in "blockdev@${escaped_0}.target" "$after"
|
||||
assert_not_in "${escaped_1}.device" "$after"
|
||||
assert_not_in "blockdev@${escaped_1}.target" "$after"
|
||||
umount /tmp/deptest
|
||||
|
||||
if [[ -f /run/systemd/system/tmp-deptest.mount ]]; then
|
||||
after=$(systemctl show --property=After --value tmp-deptest.mount)
|
||||
assert_not_in "local-fs-pre.target" "$after"
|
||||
assert_in "remote-fs-pre.target" "$after"
|
||||
assert_in "network.target" "$after"
|
||||
fi
|
||||
}
|
||||
|
||||
test_dependencies() {
|
||||
if systemd-detect-virt --quiet --container; then
|
||||
echo "Skipping test_dependencies in container"
|
||||
return
|
||||
fi
|
||||
|
||||
trap teardown_test_dependencies RETURN
|
||||
|
||||
setup_loop 0
|
||||
LOOP_0="${LOOP}"
|
||||
LOOP=
|
||||
setup_loop 1
|
||||
LOOP_1="${LOOP}"
|
||||
LOOP=
|
||||
|
||||
mkdir -p /tmp/deptest
|
||||
|
||||
# without .mount file
|
||||
check_dependencies
|
||||
|
||||
# create .mount file
|
||||
mkdir -p /run/systemd/system
|
||||
cat >/run/systemd/system/tmp-deptest.mount <<EOF
|
||||
[Mount]
|
||||
Where=/tmp/deptest
|
||||
What=192.168.0.1:/tmp/mnt
|
||||
Type=nfs
|
||||
EOF
|
||||
systemctl daemon-reload
|
||||
|
||||
# with .mount file
|
||||
check_dependencies
|
||||
}
|
||||
|
||||
test_issue_20329() {
|
||||
local tmpdir unit
|
||||
tmpdir="$(mktemp -d)"
|
||||
|
@ -108,6 +257,9 @@ fi
|
|||
# Give some time for units to settle so we don't race between exiting the rate limit state and cleaning up the units.
|
||||
timeout 2m bash -c 'while systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; do systemctl daemon-reload; sleep 10; done'
|
||||
|
||||
# test for issue #19983 and #23552.
|
||||
test_dependencies
|
||||
|
||||
# test that handling of mount start jobs is delayed when /proc/self/mouninfo monitor is rate limited
|
||||
test_issue_20329
|
||||
|
||||
|
|
Loading…
Reference in a new issue