#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later set -ex set -o pipefail # shellcheck source=test/units/util.sh . "$(dirname "$0")"/util.sh # Coverage test for udevadm # shellcheck disable=SC2317 cleanup_17_10() { set +e losetup -d "$loopdev" rm -f "$blk" ip link delete "$netdev" } # Set up some test devices trap cleanup_17_10 EXIT netdev=dummy17.10 ip link add $netdev type dummy blk="$(mktemp)" dd if=/dev/zero of="$blk" bs=1M count=1 loopdev="$(losetup --show -f "$blk")" udevadm -h udevadm control -e udevadm control -l emerg udevadm control -l alert udevadm control -l crit udevadm control -l err udevadm control -l warning udevadm control -l notice udevadm control --log-level info udevadm control --log-level debug (! udevadm control -l hello) udevadm control -s udevadm control -S udevadm control -R udevadm control -p HELLO=world udevadm control -m 42 udevadm control --ping udevadm control -t 5 udevadm control -h udevadm info /dev/null udevadm info /sys/class/net/$netdev udevadm info "$(systemd-escape -p --suffix device /sys/devices/virtual/net/$netdev)" udevadm info --property DEVNAME /sys/class/net/$netdev udevadm info --property DEVNAME --value /sys/class/net/$netdev udevadm info --property HELLO /sys/class/net/$netdev udevadm info -p class/net/$netdev udevadm info -p /class/net/$netdev udevadm info --json=off -p class/net/$netdev udevadm info --json=pretty -p class/net/$netdev | jq . udevadm info --json=short -p class/net/$netdev | jq . udevadm info -n null udevadm info -q all /sys/class/net/$netdev udevadm info -q name /dev/null udevadm info -q path /sys/class/net/$netdev udevadm info -q property /sys/class/net/$netdev udevadm info -q symlink /sys/class/net/$netdev udevadm info -q name -r /dev/null udevadm info --query symlink --root /sys/class/net/$netdev (! udevadm info -q hello -r /sys/class/net/$netdev) udevadm info -a /sys/class/net/$netdev udevadm info -t >/dev/null udevadm info --tree /sys/class/net/$netdev udevadm info -x /sys/class/net/$netdev udevadm info -x -q path /sys/class/net/$netdev udevadm info -P TEST_ /sys/class/net/$netdev udevadm info -d /dev/null udevadm info -e >/dev/null udevadm info -e --json=off >/dev/null udevadm info -e --json=pretty | jq . >/dev/null udevadm info -e --json=short | jq . >/dev/null udevadm info -e --subsystem-match acpi >/dev/null udevadm info -e --subsystem-nomatch acpi >/dev/null udevadm info -e --attr-match ifindex=2 >/dev/null udevadm info -e --attr-nomatch ifindex=2 >/dev/null udevadm info -e --property-match SUBSYSTEM=acpi >/dev/null udevadm info -e --tag-match systemd >/dev/null udevadm info -e --sysname-match lo >/dev/null udevadm info -e --name-match /sys/class/net/$netdev >/dev/null udevadm info -e --parent-match /sys/class/net/$netdev >/dev/null udevadm info -e --initialized-match >/dev/null udevadm info -e --initialized-nomatch >/dev/null # udevadm info -c udevadm info -w /sys/class/net/$netdev udevadm info --wait-for-initialization=5 /sys/class/net/$netdev udevadm info -h assert_rc 124 timeout 1 udevadm monitor assert_rc 124 timeout 1 udevadm monitor -k assert_rc 124 timeout 1 udevadm monitor -u assert_rc 124 timeout 1 udevadm monitor -s net assert_rc 124 timeout 1 udevadm monitor --subsystem-match net/$netdev assert_rc 124 timeout 1 udevadm monitor -t systemd assert_rc 124 timeout 1 udevadm monitor --tag-match hello udevadm monitor -h udevadm settle udevadm settle -t 5 udevadm settle -E /sys/class/net/$netdev udevadm settle -h udevadm test /dev/null udevadm info /sys/class/net/$netdev udevadm test "$(systemd-escape -p --suffix device /sys/devices/virtual/net/$netdev)" udevadm test -a add /sys/class/net/$netdev udevadm test -a change /sys/class/net/$netdev udevadm test -a move /sys/class/net/$netdev udevadm test -a online /sys/class/net/$netdev udevadm test -a offline /sys/class/net/$netdev udevadm test -a bind /sys/class/net/$netdev udevadm test -a unbind /sys/class/net/$netdev udevadm test -a help /sys/class/net/$netdev udevadm test --action help (! udevadm test -a hello /sys/class/net/$netdev) udevadm test -N early /sys/class/net/$netdev udevadm test -N late /sys/class/net/$netdev udevadm test --resolve-names never /sys/class/net/$netdev (! udevadm test -N hello /sys/class/net/$netdev) udevadm test -h # udevadm test-builtin path_id "$loopdev" udevadm test-builtin net_id /sys/class/net/$netdev udevadm test-builtin net_id "$(systemd-escape -p --suffix device /sys/devices/virtual/net/$netdev)" udevadm test-builtin -a add net_id /sys/class/net/$netdev udevadm test-builtin -a remove net_id /sys/class/net/$netdev udevadm test-builtin -a change net_id /sys/class/net/$netdev udevadm test-builtin -a move net_id /sys/class/net/$netdev udevadm test-builtin -a online net_id /sys/class/net/$netdev udevadm test-builtin -a offline net_id /sys/class/net/$netdev udevadm test-builtin -a bind net_id /sys/class/net/$netdev udevadm test-builtin -a unbind net_id /sys/class/net/$netdev udevadm test-builtin -a help net_id /sys/class/net/$netdev udevadm test-builtin net_setup_link /sys/class/net/$netdev udevadm test-builtin blkid "$loopdev" udevadm test-builtin input_id /sys/class/net/$netdev udevadm test-builtin keyboard /dev/null # udevadm test-builtin kmod /sys/class/net/$netdev udevadm test-builtin uaccess /dev/null # udevadm test-builtin usb_id dev/null (! udevadm test-builtin hello /sys/class/net/$netdev) # systemd-hwdb update is extremely slow when combined with sanitizers and run # in a VM without acceleration, so let's just skip the one particular test # if we detect this combination if ! [[ -v ASAN_OPTIONS && "$(systemd-detect-virt -v)" == "qemu" ]]; then modprobe scsi_debug scsidev=$(readlink -f /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/[0-9]*) mkdir -p /etc/udev/hwdb.d cat >/etc/udev/hwdb.d/99-test.hwdb <