From: Frantisek Sumsal Date: Fri, 10 Sep 2021 11:04:58 +0000 (+0200) Subject: test: make sure all symlinks under /dev/disk/ are valid X-Git-Tag: v250-rc1~693^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d430e451c900d924bc8e738b649e11979832d211;p=thirdparty%2Fsystemd.git test: make sure all symlinks under /dev/disk/ are valid --- diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh index 64859f1c895..8e8f27d23c3 100755 --- a/test/units/testsuite-64.sh +++ b/test/units/testsuite-64.sh @@ -4,6 +4,28 @@ set -eux set -o pipefail +# Check if all symlinks under /dev/disk/ are valid +helper_check_device_symlinks() { + local dev link target + + while read -r link; do + target="$(readlink -f "$link")" + # Both checks should do virtually the same thing, but check both to be + # on the safe side + if [[ ! -e "$link" || ! -e "$target" ]]; then + echo >&2 "ERROR: symlink '$link' points to '$target' which doesn't exist" + return 1 + fi + + # Check if the symlink points to the correct device in /dev + dev="/dev/$(udevadm info -q name "$link")" + if [[ "$target" != "$dev" ]]; then + echo >&2 "ERROR: symlink '$link' points to '$target' but '$dev' was expected" + return 1 + fi + done < <(find /dev/disk -type l) +} + testcase_megasas2_basic() { lsblk -S [[ "$(lsblk --scsi --noheadings | wc -l)" -ge 128 ]] @@ -121,9 +143,11 @@ EOF : >/failed udevadm settle - lsblk -a +echo "Check if all symlinks under /dev/disk/ are valid (pre-test)" +helper_check_device_symlinks + # TEST_FUNCTION_NAME is passed on the kernel command line via systemd.setenv= # in the respective test.sh file if ! command -v "${TEST_FUNCTION_NAME:?}"; then @@ -134,6 +158,9 @@ fi echo "TEST_FUNCTION_NAME=$TEST_FUNCTION_NAME" "$TEST_FUNCTION_NAME" +echo "Check if all symlinks under /dev/disk/ are valid (post-test)" +helper_check_device_symlinks + systemctl status systemd-udevd touch /testok