chiark / gitweb /
[PATCH] udev add some ID tests
[elogind.git] / test / udev-test.pl
index ab27c74c6a5d5d103d4c6c76efe6c909972d11e2..7459f8ff5c48fcd53bbad6e276d9eae43ec1586f 100644 (file)
@@ -90,6 +90,16 @@ EOF
                expected => "visor/0" ,
                conf     => <<EOF
 KERNEL="ttyUSB*", NAME="visor/%n"
+EOF
+       },
+       {
+               desc     => "catch device by * - take 2",
+               subsys   => "tty",
+               devpath  => "class/tty/ttyUSB0",
+               expected => "visor/0" ,
+               conf     => <<EOF
+KERNEL="*USB1", NAME="bad"
+KERNEL="*USB0", NAME="visor/%n"
 EOF
        },
        {
@@ -181,6 +191,26 @@ EOF
                expected => "Major:8:minor:3:kernelnumber:3:bus:0:0:0:0" ,
                conf     => <<EOF
 BUS="scsi", PLACE="0:0:0:0", NAME="Major:%M:minor:%m:kernelnumber:%n:bus:%b"
+EOF
+       },
+       {
+               desc     => "select sysfs attribute by SYSFS{vendor}",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "disk-IBM-ESXS-sda" ,
+               conf     => <<EOF
+BUS="scsi", SYSFS{vendor}="IBM-ESXS", NAME="disk-%s{vendor}-%k"
+KERNEL="ttyUSB0", NAME="visor"
+EOF
+       },
+       {
+               desc     => "sustitution of sysfs value (%s{file})",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "disk-IBM-ESXS-sda" ,
+               conf     => <<EOF
+BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="disk-%s{vendor}-%k"
+KERNEL="ttyUSB0", NAME="visor"
 EOF
        },
        {
@@ -203,6 +233,15 @@ EOF
                expected => "test-0:0:0:0" ,
                conf     => <<EOF
 BUS="scsi", PROGRAM="/bin/echo -n test-%b", RESULT="test-0:0*", NAME="%c"
+EOF
+       },
+       {
+               desc     => "program with escaped format char (tricky: callout returns format char!)",
+               subsys   => "block",
+               devpath  => "block/sda/sda3",
+               expected => "escape-3" ,
+               conf     => <<EOF
+BUS="scsi", PROGRAM="/bin/echo -n escape-%%n", KERNEL="sda3", NAME="%c"
 EOF
        },
        {
@@ -252,24 +291,6 @@ EOF
                conf     => <<EOF
 SYSFS_dev="5:1", NAME="foo"
 KERNEL="console", NAME="TTY"
-EOF
-       },
-       {
-               desc     => "devfs disk naming substitution",
-               subsys   => "block",
-               devpath  => "block/sda",
-               expected => "lun0/disc" ,
-               conf     => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D"
-EOF
-       },
-       {
-               desc     => "devfs disk naming substitution",
-               subsys   => "block",
-               devpath  => "block/sda/sda2",
-               expected => "lun0/part2" ,
-               conf     => <<EOF
-BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME="lun0/%D"
 EOF
        },
        {
@@ -326,6 +347,89 @@ EOF
                expected => "second-0" ,
                conf     => <<EOF
 KERNEL="ttyUSB0", NAME="visor", SYMLINK="first-%n second-%n third-%n"
+EOF
+       },
+       {
+               desc     => "create all possible partitions",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "boot_disk15" ,
+               conf     => <<EOF
+BUS="scsi", SYSFS_vendor="IBM-ESXS", NAME{all_partitions}="boot_disk"
+EOF
+       },
+       {
+               desc     => "sysfs parent hierarchy",
+               subsys   => "tty",
+               devpath  => "class/tty/ttyUSB0",
+               expected => "visor" ,
+               conf     => <<EOF
+SYSFS_idProduct="2008", NAME="visor"
+EOF
+       },
+       {
+               desc     => "name test with ! in the name",
+               subsys   => "block",
+               devpath  => "block/rd!c0d0",
+               expected => "rd/c0d0" ,
+               conf     => <<EOF
+BUS="scsi", NAME="%k"
+KERNEL="ttyUSB0", NAME="visor"
+EOF
+       },
+       {
+               desc     => "name test with ! in the name, but no matching rule",
+               subsys   => "block",
+               devpath  => "block/rd!c0d0",
+               expected => "rd/c0d0" ,
+               conf     => <<EOF
+KERNEL="ttyUSB0", NAME="visor"
+EOF
+       },
+       {
+               desc     => "ID rule",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "scsi-0:0:0:0",
+               conf     => <<EOF
+BUS="usb", ID="0:0:0:0", NAME="not-scsi"
+BUS="scsi", ID="0:0:0:1", NAME="no-match"
+BUS="scsi", ID=":0", NAME="short-id"
+BUS="scsi", ID="/0:0:0:0", NAME="no-match"
+BUS="scsi", ID="0:0:0:0", NAME="scsi-0:0:0:0"
+EOF
+       },
+       {
+               desc     => "ID wildcard all",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "scsi-0:0:0:0",
+               conf     => <<EOF
+BUS="scsi", ID="*:1", NAME="no-match"
+BUS="scsi", ID="*:0:1", NAME="no-match"
+BUS="scsi", ID="*:0:0:1", NAME="no-match"
+BUS="scsi", ID="*", NAME="scsi-0:0:0:0"
+BUS="scsi", ID="0:0:0:0", NAME="bad"
+EOF
+       },
+       {
+               desc     => "ID wildcard partial",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "scsi-0:0:0:0",
+               conf     => <<EOF
+BUS="scsi", ID="*:0", NAME="scsi-0:0:0:0"
+BUS="scsi", ID="0:0:0:0", NAME="bad"
+EOF
+       },
+       {
+               desc     => "ID wildcard partial 2",
+               subsys   => "block",
+               devpath  => "block/sda",
+               expected => "scsi-0:0:0:0",
+               conf     => <<EOF
+BUS="scsi", ID="*:0:0:0", NAME="scsi-0:0:0:0"
+BUS="scsi", ID="0:0:0:0", NAME="bad"
 EOF
        },
 );
@@ -350,25 +454,12 @@ sub udev {
        system("$udev_bin $subsys");
 }
 
-
-# prepare
-system("rm -rf $udev_root");
-mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
-
-# test
 my $error = 0;
-print "\nudev-test will run ".($#tests + 1)." tests:\n\n";
 
-# create initial config file
-open CONF, ">$main_conf" || die "unable to create config file: $main_conf";
-print CONF "udev_root=\"$udev_root\"\n";
-print CONF "udev_db=\"$udev_db\"\n";
-print CONF "udev_rules=\"$conf_tmp\"\n";
-print CONF "udev_permissions=\"$perm\"\n";
-close CONF;
-
-foreach my $config (@tests) {
-       print "TEST: $config->{desc}\n";
+sub run_test {
+       my ($config, $number) = @_;
+       
+       print "TEST $number: $config->{desc}\n";
        print "device \'$config->{devpath}\' expecting node \'$config->{expected}\'\n";
 
        udev("add", $config->{subsys}, $config->{devpath}, \$config->{conf});
@@ -392,6 +483,37 @@ foreach my $config (@tests) {
        }
 }
 
+# prepare
+system("rm -rf $udev_root");
+mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
+
+# create initial config file
+open CONF, ">$main_conf" || die "unable to create config file: $main_conf";
+print CONF "udev_root=\"$udev_root\"\n";
+print CONF "udev_db=\"$udev_db\"\n";
+print CONF "udev_rules=\"$conf_tmp\"\n";
+print CONF "udev_permissions=\"$perm\"\n";
+close CONF;
+
+my $test_num = 1;
+
+if ($ARGV[0]) {
+       # only run one test
+       $test_num = $ARGV[0];
+       print "udev-test will run test number $test_num only\n";
+
+       run_test($tests[$test_num-1], $test_num);
+} else {
+       # test all
+       print "\nudev-test will run ".($#tests + 1)." tests:\n\n";
+
+       foreach my $config (@tests) {
+               run_test($config, $test_num);
+               $test_num++;
+
+       }
+}
+
 print "$error errors occured\n\n";
 
 # cleanup