From d430e451c900d924bc8e738b649e11979832d211 Mon Sep 17 00:00:00 2001 From: Frantisek Sumsal Date: Fri, 10 Sep 2021 13:04:58 +0200 Subject: [PATCH] test: make sure all symlinks under /dev/disk/ are valid --- test/units/testsuite-64.sh | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh index 64859f1c89..8e8f27d23c 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