chiark / gitweb /
move default rules from /etc/udev/rules.d/ to /lib/udev/rules.d/
[elogind.git] / test / udev-test.pl
index fe1c6da4f9391ee4c0459081b1a5a87bb3ea9ec6..f7f68a1416593a31ee6fac980b5781323ba1ac77 100755 (executable)
@@ -23,7 +23,7 @@ use strict;
 my $PWD                = $ENV{PWD};
 my $sysfs      = "sys/";
 my $udev_bin   = "../test-udev";
-my $udev_root  = "udev-root/"; # !!! directory will be removed !!!
+my $udev_root  = "udev-root/";
 my $udev_conf  = "udev-test.conf";
 my $udev_rules = "udev-test.rules";
 
@@ -1598,6 +1598,46 @@ EOF
 KERNEL=="sda", TEST=="size", NAME="relative"
 EOF
        },
+       {
+               desc            => "TEST wildcard substitution (find queue/nr_requests)",
+               subsys          => "block",
+               devpath         => "/block/sda",
+               exp_name        => "found-subdir",
+               rules           => <<EOF
+KERNEL=="sda", TEST=="*/nr_requests", NAME="found-subdir"
+EOF
+       },
+       {
+               desc            => "TEST MODE=0000",
+               subsys          => "block",
+               devpath         => "/block/sda",
+               exp_name        => "sda",
+               exp_perms       => "0:0:0000",
+               rules           => <<EOF
+KERNEL=="sda", MODE="0000"
+EOF
+       },
+       {
+               desc            => "TEST PROGRAM feeds MODE",
+               subsys          => "block",
+               devpath         => "/block/sda",
+               exp_name        => "sda",
+               exp_perms       => "0:0:0400",
+               rules           => <<EOF
+KERNEL=="sda", PROGRAM=="/bin/echo 0 0 0400", OWNER="%c{1}", GROUP="%c{2}", MODE="%c{3}"
+EOF
+       },
+       {
+               desc            => "TEST PROGRAM feeds MODE with overflow",
+               subsys          => "block",
+               devpath         => "/block/sda",
+               exp_name        => "sda",
+               exp_perms       => "0:0:0400",
+               rules           => <<EOF
+KERNEL=="sda", PROGRAM=="/bin/echo 0 0 0400letsdoabuffferoverflow0123456789012345789012345678901234567890", OWNER="%c{1}", GROUP="%c{2}", MODE="%c{3}"
+EOF
+       },
+
 );
 
 # set env
@@ -1713,6 +1753,15 @@ sub symlink_test {
        }
 }
 
+sub make_udev_root {
+       system("rm -rf $udev_root");
+       mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
+       # setting group and mode of udev_root ensures the tests work
+       # even if the parent directory has setgid bit enabled.
+       chown (0, 0, $udev_root) || die "unable to chown $udev_root\n";
+       chmod (0755, $udev_root) || die "unable to chmod $udev_root\n";
+}
+
 sub run_test {
        my ($rules, $number) = @_;
 
@@ -1785,8 +1834,7 @@ sub run_test {
        print "\n";
 
        if (defined($rules->{option}) && $rules->{option} eq "clean") {
-               system("rm -rf $udev_root");
-               mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
+               make_udev_root ();
        }
 
 }
@@ -1799,13 +1847,12 @@ if (!($<==0)) {
 }
 
 # prepare
-system("rm -rf $udev_root");
-mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
+make_udev_root();
 
 # create config file
 open CONF, ">$udev_conf" || die "unable to create config file: $udev_conf";
 print CONF "udev_root=\"$udev_root\"\n";
-print CONF "udev_rules=\"$udev_rules\"\n";
+print CONF "udev_rules=\"$PWD\"\n";
 print CONF "udev_log=\"info\"\n";
 close CONF;