From: Yu Watanabe Date: Wed, 30 Jul 2025 12:43:06 +0000 (+0900) Subject: TEST-64-UDEV-STORAGE: several cleanups X-Git-Tag: v258-rc2~25^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35e4cfa83db1348157f0dd33a3cfc880c369b932;p=thirdparty%2Fsystemd.git TEST-64-UDEV-STORAGE: several cleanups - drop unused variables, - adjust number of partitions, interations, and timeout, - clear partitions on each test case finished, - check if unnecessary devlinks are removed, - several coding style cleanups. --- diff --git a/test/units/TEST-64-UDEV-STORAGE.sh b/test/units/TEST-64-UDEV-STORAGE.sh index d489159eb71..856f44595d1 100755 --- a/test/units/TEST-64-UDEV-STORAGE.sh +++ b/test/units/TEST-64-UDEV-STORAGE.sh @@ -381,9 +381,8 @@ EOF } testcase_simultaneous_events_1() { - local disk expected i iterations key link num_part part partscript rule target timeout - local -a devices symlinks - local -A running + local disk expected i iterations link num_part part partscript rule target timeout + local -a devices symlinks running if [[ -v ASAN_OPTIONS || "$(systemd-detect-virt -v)" == "qemu" ]]; then num_part=2 @@ -438,18 +437,20 @@ EOF # On unpatched udev versions the delete-recreate cycle may trigger a race # leading to dead symlinks in /dev/disk/ for ((i = 1; i <= iterations; i++)); do + running=() for disk in {0..9}; do if ((disk % 2 == i % 2)); then udevadm lock --timeout=30 --device="${devices[$disk]}" sfdisk -q --delete "${devices[$disk]}" & else udevadm lock --timeout=30 --device="${devices[$disk]}" sfdisk -q -X gpt "${devices[$disk]}" <"$partscript" & fi - running[$disk]=$! + + # shellcheck disable=SC2190 + running+=( "$!" ) done - for key in "${!running[@]}"; do - wait "${running[$key]}" - unset "running[$key]" + for j in "${running[@]}"; do + wait "$j" done if ((i % 10 <= 1)); then @@ -473,28 +474,36 @@ EOF done helper_check_device_units - rm -f "$rule" "$partscript" + # Cleanup and check if unnecessary devlinks are removed. + for disk in {0..9}; do + udevadm lock --timeout="$timeout" --device="${devices[$disk]}" sfdisk -q --delete "${devices[$disk]}" || : + done + udevadm settle --timeout="$timeout" + for ((part = 1; part <= num_part; part++)); do + udevadm wait --timeout=10 --removed "/dev/disk/by-partlabel/test${part}" + done + + rm -f "$rule" "$partscript" udevadm control --reload } testcase_simultaneous_events_2() { - local disk expected i iterations key link num_part part script_dir target timeout - local -a devices symlinks - local -A running + local disk i iterations link num_part part script_dir target timeout + local -a devices running script_dir="$(mktemp --directory "/tmp/test-udev-storage.script.XXXXXXXXXX")" # shellcheck disable=SC2064 trap "rm -rf '$script_dir'" RETURN if [[ -v ASAN_OPTIONS || "$(systemd-detect-virt -v)" == "qemu" ]]; then - num_part=20 - iterations=1 - timeout=2400 - else - num_part=100 - iterations=3 + num_part=10 + iterations=2 timeout=300 + else + num_part=40 + iterations=5 + timeout=200 fi for disk in {0..9}; do @@ -514,32 +523,40 @@ $(for ((part = 1; part <= num_part; part++)); do printf 'name="testlabel-%d", si EOF done + ls -l /dev/disk/by-partlabel + echo "## $iterations iterations start: $(date '+%H:%M:%S.%N')" - for ((i = 1; i <= iterations; i++)); do + running=() + for disk in "${devices[@]}"; do + udevadm lock --timeout=30 --device="$disk" \ + bash -c "for ((i = 1; i <= $iterations; i++)); do sfdisk -q --delete $disk; sfdisk -q -X gpt $disk <$script_dir/partscript-\$i; done" & - for disk in {0..9}; do - udevadm lock --timeout="$timeout" --device="${devices[$disk]}" sfdisk -q --delete "${devices[$disk]}" & - running[$disk]=$! - done + # shellcheck disable=SC2190 + running+=( "$!" ) + done - for key in "${!running[@]}"; do - wait "${running[$key]}" - unset "running[$key]" - done + for i in "${running[@]}"; do + wait "$i" + done - for disk in {0..9}; do - udevadm lock --timeout="$timeout" --device="${devices[$disk]}" sfdisk -q -X gpt "${devices[$disk]}" <"$script_dir/partscript-$i" & - running[$disk]=$! - done + udevadm settle --timeout="$timeout" + echo "## $iterations iterations end: $(date '+%H:%M:%S.%N')" - for key in "${!running[@]}"; do - wait "${running[$key]}" - unset "running[$key]" - done + ls -l /dev/disk/by-partlabel - udevadm wait --settle --timeout="$timeout" "${devices[@]}" "/dev/disk/by-partlabel/testlabel-$i" + # Check if unnecessary devlinks are removed. + for ((i = 1; i < iterations; i++)); do + udevadm wait --timeout=10 --removed "/dev/disk/by-partlabel/testlabel-$i" done - echo "## $iterations iterations end: $(date '+%H:%M:%S.%N')" + + helper_check_device_units + + # Cleanup + for disk in "${devices[@]}"; do + udevadm lock --timeout=30 --device="$disk" sfdisk -q --delete "$disk" + done + udevadm settle --timeout="$timeout" + udevadm wait --timeout=10 --removed "/dev/disk/by-partlabel/testlabel-$iterations" } testcase_simultaneous_events() {