#!/usr/bin/env bash # SPDX-License-Identifier: LGPL-2.1-or-later set -ex set -o pipefail # Test for udevadm verify. # shellcheck source=test/units/util.sh . "$(dirname "$0")"/util.sh # shellcheck disable=SC2317 cleanup() { cd / rm -rf "${workdir}" workdir= } workdir="$(mktemp -d)" trap cleanup EXIT cd "${workdir}" cat >"${workdir}/default_output_1_success" <"${workdir}/default_output_1_fail" <"${workdir}/output_0_files" <"${out}" if [ -f "${exo}" ]; then diff -u "${exo}" "${out}" elif [ -f "${rules}" ]; then diff -u "${workdir}/default_output_1_success" "${out}" fi } assert_0() { assert_0_impl "$@" next_test_number } assert_1_impl() { local rc set +e udevadm verify "$@" >"${out}" 2>"${err}" rc=$? set -e assert_eq "$rc" 1 if [ -f "${exp}" ]; then diff -u "${exp}" "${err}" fi if [ -f "${exo}" ]; then diff -u "${exo}" "${out}" elif [ -f "${rules}" ]; then diff -u "${workdir}/default_output_1_fail" "${out}" fi } assert_1() { assert_1_impl "$@" next_test_number } # initialize variables next_test_number assert_0 -h assert_0 --help assert_0 -V assert_0 --version assert_0 /dev/null # unrecognized option '--unknown' assert_1 --unknown # option requires an argument -- 'N' assert_1 -N # --resolve-names= takes "early" or "never" assert_1 -N now # option '--resolve-names' requires an argument assert_1 --resolve-names # --resolve-names= takes "early" or "never" assert_1 --resolve-names=now # Failed to parse rules file ./nosuchfile: No such file or directory assert_1 ./nosuchfile # Failed to parse rules file ./nosuchfile: No such file or directory cat >"${exo}" <"${exo}" assert_0 --root="${workdir}" --no-summary # Directory with a single *.rules file. cp "${workdir}/default_output_1_success" "${exo}" assert_0 "${rules_dir}" # Combination of --root= and FILEs is not supported. assert_1 --root="${workdir}" /dev/null # No rules files found in nosuchdir assert_1 --root=nosuchdir cd "${rules_dir}" # UDEV_LINE_SIZE 16384 printf '%16383s\n' ' ' >"${rules}" assert_0 "${rules}" # Failed to parse rules file ${rules}: No buffer space available printf '%16384s\n' ' ' >"${rules}" echo "Failed to parse rules file ${rules}: No buffer space available" >"${exp}" assert_1 "${rules}" { printf 'RUN+="/bin/true",%8174s\\\n' ' ' printf 'RUN+="/bin/false"%8174s\\\n' ' ' echo } >"${rules}" assert_0 "${rules}" printf 'RUN+="/bin/true"%8176s\\\n #\n' ' ' ' ' >"${rules}" echo >>"${rules}" cat >"${exp}" <"${rules}" cat >"${exp}" <"${rules}" cat >"${exp}" <"${rules}" cat >"${exp}" <"${rules}" <<'EOF' KERNEL=="a|b", KERNEL=="a|c", NAME="d" KERNEL=="a|b", KERNEL!="a|c", NAME="d" KERNEL!="a", KERNEL!="b", NAME="c" KERNEL=="|a", KERNEL=="|b", NAME="c" KERNEL=="*", KERNEL=="a*", NAME="b" KERNEL=="a*", KERNEL=="c*|ab*", NAME="d" PROGRAM="a", RESULT=="b" EOF assert_0 "${rules}" echo 'GOTO="a"' >"${rules}" cat >"${exp}" <"${rules}" <<'EOF' GOTO="a" LABEL="a" EOF assert_0 "${rules}" cat >"${rules}" <<'EOF' GOTO="b" LABEL="b" LABEL="b" EOF cat >"${exp}" <"${rules}" <<'EOF' GOTO="a" LABEL="a", LABEL="b" EOF cat >"${exp}" <"${rules}" <<'EOF' KERNEL!="", KERNEL=="?*", KERNEL=="", NAME="a" EOF cat >"${exp}" <"${rules}" <<'EOF' ACTION=="a"NAME="b" EOF cat >"${exp}" <"${rules}" <<'EOF' ACTION=="a" ,NAME="b" EOF cat >"${exp}" <"${workdir}/${exp}" cd - assert_1 --root="${workdir}" cd - # udevadm verify path/ sed "s|sample-[0-9]*.rules|${workdir}/${rules_dir}/&|" sample-*.exp >"${workdir}/${exp}" cd - assert_1 "${rules_dir}" cd - exit 0