From 8ee1cc626f616a2022d641a464fbde9108dd8ad9 Mon Sep 17 00:00:00 2001 From: Martin Wilck Date: Tue, 24 Apr 2018 10:50:24 +0200 Subject: [PATCH] test/udev-test.pl: test correctness of symlink targets Test if symlinks are created correctly by comparing the symlink targets to the devnode path. This implies (for the symlink) that major/minor numbers and permissions are correct, as we have tested that on the devnode already. (cherry picked from commit 997683c8f152e1c139a7ce537de81a0aeae4627f) Related: #1642728 --- test/udev-test.pl | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/test/udev-test.pl b/test/udev-test.pl index aa9a8dc2ff..2e3089c5e0 100755 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -22,6 +22,7 @@ use POSIX qw(WIFEXITED WEXITSTATUS); use IPC::SysV qw(IPC_PRIVATE S_IRUSR S_IWUSR IPC_CREAT); use IPC::Semaphore; use Time::HiRes qw(usleep); +use Cwd qw(getcwd abs_path); my $udev_bin = "./test-udev"; my $valgrind = 0; @@ -2243,14 +2244,26 @@ sub check_add { my $devnode = check_devnode($device); - print "device \'$device->{devpath}\' expecting node/link \'$device->{exp_name}\'\n"; return if (!defined($device->{exp_name})); - if ((-e "$udev_dev/$device->{exp_name}") || - (-l "$udev_dev/$device->{exp_name}")) { - print "add $device->{devpath}: ok\n"; + my @st = lstat("$udev_dev/$device->{exp_name}"); + if (-l _) { + my $cwd = getcwd(); + my $dir = "$udev_dev/$device->{exp_name}"; + $dir =~ s!/[^/]*$!!; + my $tgt = readlink("$udev_dev/$device->{exp_name}"); + $tgt = abs_path("$dir/$tgt"); + $tgt =~ s!^$cwd/!!; + + if ($tgt ne $devnode) { + print "symlink $device->{exp_name}: error, found -> $tgt\n"; + $error++; + system("tree", "$udev_dev"); + } else { + print "symlink $device->{exp_name}: ok\n"; + } } else { - print "add $device->{devpath}: error"; + print "symlink $device->{exp_name}: error"; if ($device->{exp_add_error}) { print " as expected\n"; } else {