]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: update test case for failed udev event 30532/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 2 Jan 2024 19:23:26 +0000 (04:23 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 2 Jan 2024 19:23:26 +0000 (04:23 +0900)
test/units/testsuite-17.03.sh

index 9af706fae165664a926b7d0227be320f946a68c6..d19d85074f51e1bae00825fb9d241b5f72df4b1f 100755 (executable)
@@ -1,7 +1,8 @@
 #!/usr/bin/env bash
 # SPDX-License-Identifier: LGPL-2.1-or-later
-set -ex
+set -eux
 
+TMPDIR=
 TEST_RULE="/run/udev/rules.d/49-test.rules"
 KILL_PID=
 
@@ -10,8 +11,15 @@ setup() {
     [[ -e /etc/udev/udev.conf ]] && cp -f /etc/udev/udev.conf /etc/udev/udev.conf.bak
 
     cat >"${TEST_RULE}" <<EOF
-ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", OPTIONS="log_level=debug"
-ACTION=="add", SUBSYSTEM=="mem", KERNEL=="null", PROGRAM=="/bin/sleep 60"
+ACTION!="add", GOTO="test_end"
+SUBSYSTEM!="mem", GOTO="test_end"
+KERNEL!="null", GOTO="test_end"
+
+OPTIONS="log_level=debug"
+PROGRAM=="/bin/touch /tmp/test-udev-marker"
+PROGRAM!="/bin/sleep 60", ENV{PROGRAM_RESULT}="KILLED"
+
+LABEL="test_end"
 EOF
     cat >/etc/udev/udev.conf <<EOF
 event_timeout=10
@@ -35,19 +43,51 @@ teardown() {
     systemctl restart systemd-udevd.service
 }
 
-run_test() {
-    local since
+run_test_timeout() {
+    TMPDIR=$(mktemp -d -p /tmp udev-tests.XXXXXX)
+    udevadm monitor --udev --property --subsystem-match=mem >"$TMPDIR"/monitor.txt &
+    KILL_PID="$!"
+
+    SYSTEMD_LOG_LEVEL=debug udevadm trigger --verbose --action add /dev/null
+
+    for _ in {1..40}; do
+        if grep -q 'PROGRAM_RESULT=KILLED' "$TMPDIR"/monitor.txt; then
+            sleep .5
+            kill "$KILL_PID"
+            KILL_PID=
+
+            cat "$TMPDIR"/monitor.txt
+            (! grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt)
+            (! grep -q 'UDEV_WORKER_SIGNAL=6' "$TMPDIR"/monitor.txt)
+            (! grep -q 'UDEV_WORKER_SIGNAL_NAME=ABRT' "$TMPDIR"/monitor.txt)
+            grep -q 'PROGRAM_RESULT=KILLED' "$TMPDIR"/monitor.txt
+            rm -rf "$TMPDIR"
+            return 0
+        fi
+        sleep .5
+    done
+
+    return 1
+}
 
-    since="$(date '+%F %T')"
+run_test_killed() {
+    local killed=
 
     TMPDIR=$(mktemp -d -p /tmp udev-tests.XXXXXX)
     udevadm monitor --udev --property --subsystem-match=mem >"$TMPDIR"/monitor.txt &
     KILL_PID="$!"
 
+    rm -f /tmp/test-udev-marker
     SYSTEMD_LOG_LEVEL=debug udevadm trigger --verbose --action add /dev/null
 
     for _ in {1..40}; do
-        if coredumpctl --since "$since" --no-legend --no-pager | grep /bin/udevadm ; then
+        if [[ -z "$killed" ]]; then
+            if [[ -e /tmp/test-udev-marker ]]; then
+                killall --signal ABRT --regexp udev-worker
+                killed=1
+            fi
+        elif grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt; then
+            sleep .5
             kill "$KILL_PID"
             KILL_PID=
 
@@ -55,6 +95,8 @@ run_test() {
             grep -q 'UDEV_WORKER_FAILED=1' "$TMPDIR"/monitor.txt
             grep -q 'UDEV_WORKER_SIGNAL=6' "$TMPDIR"/monitor.txt
             grep -q 'UDEV_WORKER_SIGNAL_NAME=ABRT' "$TMPDIR"/monitor.txt
+            (! grep -q 'PROGRAM_RESULT=KILLED' "$TMPDIR"/monitor.txt)
+            rm -rf "$TMPDIR"
             return 0
         fi
         sleep .5
@@ -66,6 +108,7 @@ run_test() {
 trap teardown EXIT
 
 setup
-run_test
+run_test_timeout
+run_test_killed
 
 exit 0