]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test: add a simple test for udev watch 18904/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 7 Mar 2021 20:21:45 +0000 (05:21 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 30 Apr 2021 10:42:09 +0000 (19:42 +0900)
test/TEST-17-UDEV/test.sh
test/units/testsuite-17.06.sh [new file with mode: 0755]

index 43119d4c10213beab95154e9c9c3154ef924c17b..446f4a83db5defac6ea1f6a857ee53aaa5c96955 100755 (executable)
@@ -8,7 +8,7 @@ TEST_NO_NSPAWN=1
 # shellcheck source=test/test-functions
 . "${TEST_BASE_DIR:?}/test-functions"
 
-QEMU_TIMEOUT=500
+QEMU_TIMEOUT=800
 
 test_append_files() {
     (
diff --git a/test/units/testsuite-17.06.sh b/test/units/testsuite-17.06.sh
new file mode 100755 (executable)
index 0000000..68c1f7b
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/bash
+set -ex
+set -o pipefail
+
+# tests for udev watch
+
+function check_validity() {
+    local f ID_OR_HANDLE
+
+    for f in /run/udev/watch/*; do
+        ID_OR_HANDLE=$(readlink $f)
+        test -L /run/udev/watch/${ID_OR_HANDLE}
+        test $(readlink /run/udev/watch/${ID_OR_HANDLE}) = $(basename $f)
+    done
+}
+
+function check() {
+    local i j
+
+    for ((i=0;i<2;i++)); do
+        systemctl restart systemd-udevd.service
+        udevadm control --ping
+        udevadm settle
+        sleep 1
+        check_validity
+
+        for ((j=0;j<2;j++)); do
+            udevadm trigger -w --action add --subsystem-match=block
+            udevadm settle
+            sleep 1
+            check_validity
+        done
+
+        for ((j=0;j<2;j++)); do
+            udevadm trigger -w --action change --subsystem-match=block
+            udevadm settle
+            sleep 1
+            check_validity
+        done
+    done
+}
+
+mkdir -p /run/udev/rules.d/
+
+cat >/run/udev/rules.d/00-debug.rules <<EOF
+SUBSYSTEM=="block", KERNEL=="sda*", OPTIONS="log_level=debug"
+EOF
+
+cat >/run/udev/rules.d/50-testsuite.rules <<EOF
+ACTION=="add", SUBSYSTEM=="block", KERNEL=="sda", OPTIONS:="watch"
+EOF
+
+check
+
+MAJOR=$(udevadm info /dev/sda | grep -e '^E: MAJOR=' | sed -e 's/^E: MAJOR=//')
+MINOR=$(udevadm info /dev/sda | grep -e '^E: MINOR=' | sed -e 's/^E: MINOR=//')
+test -L /run/udev/watch/b${MAJOR}:${MINOR}
+
+cat >/run/udev/rules.d/50-testsuite.rules <<EOF
+ACTION=="change", SUBSYSTEM=="block", KERNEL=="sda", OPTIONS:="nowatch"
+EOF
+
+check
+
+MAJOR=$(udevadm info /dev/sda | grep -e '^E: MAJOR=' | sed -e 's/^E: MAJOR=//')
+MINOR=$(udevadm info /dev/sda | grep -e '^E: MINOR=' | sed -e 's/^E: MINOR=//')
+test ! -e /run/udev/watch/b${MAJOR}:${MINOR}
+
+rm /run/udev/rules.d/00-debug.rules
+rm /run/udev/rules.d/50-testsuite.rules
+
+udevadm control --reload
+udevadm trigger -w --action add --subsystem-match=block
+
+exit 0