systemd/0302-udevadm-test-introduce-v-verbose-option-to-show-verb.patch
Jan Macku eb5b3a87a8 systemd-257-8
Resolves: RHEL-71409, RHEL-75774
2025-02-14 10:09:33 +01:00

210 lines
8.6 KiB
Diff

From 17214f471355ed135c503fe64687749b8b0dbe86 Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Mon, 13 Jan 2025 05:09:15 +0900
Subject: [PATCH] udevadm-test: introduce -v/--verbose option to show verbose
log messages
Currently this does not show any extra log messages. In later commits,
more verbose log messages will be added.
(cherry picked from commit 8846df63fa30d2fb8749ed1753ddc397b1ff411e)
Resolves: RHEL-75774
---
man/udevadm.xml | 9 +++++++++
shell-completion/bash/udevadm | 13 +++++--------
shell-completion/zsh/_udevadm | 1 +
src/udev/udev-event.h | 1 +
src/udev/udevadm-test.c | 25 +++++++++++++++++++------
test/units/TEST-17-UDEV.10.sh | 1 +
6 files changed, 36 insertions(+), 14 deletions(-)
diff --git a/man/udevadm.xml b/man/udevadm.xml
index eb77356d86..caa41bd204 100644
--- a/man/udevadm.xml
+++ b/man/udevadm.xml
@@ -869,6 +869,15 @@
<xi:include href="version-info.xml" xpointer="v209"/>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>-v</option></term>
+ <term><option>--verbose</option></term>
+ <listitem>
+ <para>Shows verbose logs in processing udev rules.</para>
+
+ <xi:include href="version-info.xml" xpointer="v258"/>
+ </listitem>
+ </varlistentry>
<xi:include href="standard-options.xml" xpointer="help" />
</variablelist>
diff --git a/shell-completion/bash/udevadm b/shell-completion/bash/udevadm
index 3842d722e7..af3a0b9058 100644
--- a/shell-completion/bash/udevadm
+++ b/shell-completion/bash/udevadm
@@ -69,7 +69,8 @@ _udevadm() {
[CONTROL_ARG]='-l --log-priority -p --property -m --children-max -t --timeout'
[MONITOR_STANDALONE]='-k --kernel -u --udev -p --property'
[MONITOR_ARG]='-s --subsystem-match -t --tag-match'
- [TEST]='-a --action -N --resolve-names'
+ [TEST_STANDALONE]='-v --verbose'
+ [TEST_ARG]='-a --action -N --resolve-names'
[TEST_BUILTIN]='-a --action'
[VERIFY]='-N --resolve-names --root --no-summary --no-style'
[WAIT]='-t --timeout --initialized=no --removed --settle'
@@ -216,7 +217,7 @@ _udevadm() {
;;
'test')
- if __contains_word "$prev" ${OPTS[TEST]}; then
+ if __contains_word "$prev" ${OPTS[TEST_ARG]}; then
case $prev in
-a|--action)
comps=$( udevadm test --action help )
@@ -225,12 +226,8 @@ _udevadm() {
comps='early late never'
;;
esac
- COMPREPLY=( $(compgen -W '$comps' -- "$cur") )
- return 0
- fi
-
- if [[ $cur = -* ]]; then
- comps="${OPTS[COMMON]} ${OPTS[TEST]}"
+ elif [[ $cur = -* ]]; then
+ comps="${OPTS[COMMON]} ${OPTS[TEST_ARG]} ${OPTS[TEST_STANDALONE]}"
else
comps=$( __get_all_devices )
local IFS=$'\n'
diff --git a/shell-completion/zsh/_udevadm b/shell-completion/zsh/_udevadm
index 9ff87d8312..5c3d3c93ef 100644
--- a/shell-completion/zsh/_udevadm
+++ b/shell-completion/zsh/_udevadm
@@ -87,6 +87,7 @@ _udevadm_test(){
'(-)'{-V,--version}'[Show package version]' \
'--action=[The action string.]:actions:(add change remove move online offline bind unbind)' \
'--subsystem=[The subsystem string.]' \
+ '(-v --verbose)'{-v,--verbose}'[Show verbose logs.]' \
'*::devpath:_files -P /sys/ -W /sys'
}
diff --git a/src/udev/udev-event.h b/src/udev/udev-event.h
index 3dc89365bb..22388fe904 100644
--- a/src/udev/udev-event.h
+++ b/src/udev/udev-event.h
@@ -53,6 +53,7 @@ typedef struct UdevEvent {
bool name_final;
bool devlink_final;
bool run_final;
+ bool trace;
bool log_level_was_debug;
int default_log_level;
EventMode event_mode;
diff --git a/src/udev/udevadm-test.c b/src/udev/udevadm-test.c
index fcd8b231cf..7f3e534d2b 100644
--- a/src/udev/udevadm-test.c
+++ b/src/udev/udevadm-test.c
@@ -33,6 +33,7 @@
static sd_device_action_t arg_action = SD_DEVICE_ADD;
static ResolveNameTiming arg_resolve_name_timing = RESOLVE_NAME_EARLY;
static const char *arg_syspath = NULL;
+static bool arg_verbose = false;
static int help(void) {
@@ -41,7 +42,8 @@ static int help(void) {
" -h --help Show this help\n"
" -V --version Show package version\n"
" -a --action=ACTION|help Set action string\n"
- " -N --resolve-names=early|late|never When to resolve names\n",
+ " -N --resolve-names=early|late|never When to resolve names\n"
+ " -v --verbose Show verbose logs\n",
program_invocation_short_name);
return 0;
@@ -51,6 +53,7 @@ static int parse_argv(int argc, char *argv[]) {
static const struct option options[] = {
{ "action", required_argument, NULL, 'a' },
{ "resolve-names", required_argument, NULL, 'N' },
+ { "verbose", no_argument, NULL, 'v' },
{ "version", no_argument, NULL, 'V' },
{ "help", no_argument, NULL, 'h' },
{}
@@ -58,7 +61,7 @@ static int parse_argv(int argc, char *argv[]) {
int r, c;
- while ((c = getopt_long(argc, argv, "a:N:Vh", options, NULL)) >= 0)
+ while ((c = getopt_long(argc, argv, "a:N:vVh", options, NULL)) >= 0)
switch (c) {
case 'a':
r = parse_device_action(optarg, &arg_action);
@@ -73,6 +76,9 @@ static int parse_argv(int argc, char *argv[]) {
return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"--resolve-names= must be early, late or never");
break;
+ case 'v':
+ arg_verbose = true;
+ break;
case 'V':
return print_version();
case 'h':
@@ -104,20 +110,23 @@ int test_main(int argc, char *argv[], void *userdata) {
if (r <= 0)
return r;
- printf("This program is for debugging only, it does not run any program\n"
- "specified by a RUN key. It may show incorrect results, because\n"
- "some values may be different, or not available at a simulation run.\n"
- "\n");
+ puts("This program is for debugging only, it does not run any program\n"
+ "specified by a RUN key. It may show incorrect results, because\n"
+ "some values may be different, or not available at a simulation run.");
assert_se(sigprocmask(SIG_SETMASK, NULL, &sigmask_orig) >= 0);
+ puts("\nLoading builtins...");
udev_builtin_init();
+ puts("Loading builtins done.");
+ puts("\nLoading udev rules files...");
r = udev_rules_load(&rules, arg_resolve_name_timing);
if (r < 0) {
log_error_errno(r, "Failed to read udev rules: %m");
goto out;
}
+ puts("Loading udev rules files done.");
r = find_device_with_action(arg_syspath, arg_action, &dev);
if (r < 0) {
@@ -133,12 +142,16 @@ int test_main(int argc, char *argv[], void *userdata) {
log_oom();
goto out;
}
+ event->trace = arg_verbose;
assert_se(sigfillset(&mask) >= 0);
assert_se(sigprocmask(SIG_SETMASK, &mask, &sigmask_orig) >= 0);
+ printf("\nProcessing udev rules%s...\n", arg_verbose ? "" : " (verbose logs can be shown by -v/--verbose)");
udev_event_execute_rules(event, rules);
+ puts("Processing udev rules done.");
+ puts("");
printf("%sProperties:%s\n", ansi_highlight(), ansi_normal());
FOREACH_DEVICE_PROPERTY(dev, key, value)
printf(" %s=%s\n", key, value);
diff --git a/test/units/TEST-17-UDEV.10.sh b/test/units/TEST-17-UDEV.10.sh
index 7ca05f5287..6820e76679 100755
--- a/test/units/TEST-17-UDEV.10.sh
+++ b/test/units/TEST-17-UDEV.10.sh
@@ -130,6 +130,7 @@ 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 -v /sys/class/net/$netdev
udevadm test -h
# udevadm test-builtin path_id "$loopdev"