]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add another stress test for devlink creation
authorYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 16 Jan 2023 02:00:04 +0000 (11:00 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Wed, 22 Feb 2023 10:08:26 +0000 (19:08 +0900)
test/TEST-64-UDEV-STORAGE/test.sh
test/units/testsuite-64.sh

index f93b92e3c3d7d1838f584b94736a9ec6c1f8a1e7..2d77bb678fe1d408a35bcc15befc0c1f6ea93d37 100755 (executable)
@@ -347,7 +347,7 @@ testcase_simultaneous_events() {
     for i in {0..9}; do
         diskpath="${TESTDIR:?}/simultaneousevents${i}.img"
 
-        dd if=/dev/zero of="$diskpath" bs=1M count=32
+        dd if=/dev/zero of="$diskpath" bs=1M count=128
         qemu_opts+=(
             "-device scsi-hd,drive=drive$i,serial=deadbeeftest$i"
             "-drive format=raw,cache=unsafe,file=$diskpath,if=none,id=drive$i"
index 9fe4e69928dc2156d511e3f3c52b1fd6e2c04371..e3aa4f570103786205d8207be91047ac06636cd8 100755 (executable)
@@ -302,7 +302,7 @@ EOF
     rm -fr "$mpoint"
 }
 
-testcase_simultaneous_events() {
+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
@@ -395,6 +395,73 @@ EOF
     udevadm control --reload
 }
 
+testcase_simultaneous_events_2() {
+    local disk expected i iterations key link num_part part partscript target timeout
+    local -a devices symlinks
+    local -A running
+
+    if [[ -v ASAN_OPTIONS || "$(systemd-detect-virt -v)" == "qemu" ]]; then
+        num_part=20
+        iterations=1
+        timeout=2400
+    else
+        num_part=100
+        iterations=3
+        timeout=300
+    fi
+
+    for disk in {0..9}; do
+        link="/dev/disk/by-id/scsi-0QEMU_QEMU_HARDDISK_deadbeeftest${disk}"
+        target="$(readlink -f "$link")"
+        if [[ ! -b "$target" ]]; then
+            echo "ERROR: failed to find the test SCSI block device $link"
+            return 1
+        fi
+
+        devices+=("$target")
+    done
+
+    symlinks=("/dev/disk/by-partlabel/testlabel")
+
+    partscript="$(mktemp)"
+
+    cat >"$partscript" <<EOF
+$(for ((part = 1; part <= num_part; part++)); do printf 'name="testlabel", size=1M\n'; done)
+EOF
+
+    echo "## $iterations iterations start: $(date '+%H:%M:%S.%N')"
+    for ((i = 1; i <= iterations; i++)); do
+
+        for disk in {0..9}; do
+            udevadm lock --device="${devices[$disk]}" sfdisk -q --delete "${devices[$disk]}" &
+            running[$disk]=$!
+        done
+
+        for key in "${!running[@]}"; do
+            wait "${running[$key]}"
+            unset "running[$key]"
+        done
+
+        for disk in {0..9}; do
+            udevadm lock --device="${devices[$disk]}" sfdisk -q -X gpt "${devices[$disk]}" <"$partscript" &
+            running[$disk]=$!
+        done
+
+        for key in "${!running[@]}"; do
+            wait "${running[$key]}"
+            unset "running[$key]"
+        done
+
+        udevadm wait --settle --timeout="$timeout" "${devices[@]}" "${symlinks[@]}"
+    done
+    echo "## $iterations iterations end: $(date '+%H:%M:%S.%N')"
+}
+
+testcase_simultaneous_events() {
+    testcase_simultaneous_events_1
+    testcase_simultaneous_events_2
+}
+
 testcase_lvm_basic() {
     local i iterations partitions part timeout
     local vgroup="MyTestGroup$RANDOM"