+BUS=="scsi", KERNEL=="sda", PROGRAM=="/bin/echo %p", RESULT=="/block/sda" NAME="%k"
+EOF
+ },
+ {
+ desc => "parent node name substitution test sequence 1/2 (keep)",
+ subsys => "block",
+ devpath => "/block/sda",
+ exp_name => "main_device",
+ option => "keep",
+ conf => <<EOF
+BUS=="scsi", KERNEL=="sda", NAME="main_device"
+EOF
+ },
+ {
+ desc => "parent node name substitution test sequence 2/2 (clean)",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "main_device-part-1",
+ option => "clean",
+ conf => <<EOF
+BUS=="scsi", KERNEL=="sda1", NAME="%P-part-1"
+EOF
+ },
+ {
+ desc => "udev_root substitution",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "start-udev-root-end",
+ conf => <<EOF
+BUS=="scsi", KERNEL=="sda1", NAME="start-%r-end"
+EOF
+ },
+ {
+ desc => "last_rule option",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "last",
+ conf => <<EOF
+BUS=="scsi", KERNEL=="sda1", SYMLINK="last", OPTIONS="last_rule"
+BUS=="scsi", KERNEL=="sda1", NAME="very-last"
+EOF
+ },
+ {
+ desc => "negation KERNEL!=",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "match",
+ conf => <<EOF
+BUS=="scsi", KERNEL!="sda1", NAME="matches-but-is-negated"
+BUS=="scsi", KERNEL!="xsda1", NAME="match"
+BUS=="scsi", KERNEL=="sda1", NAME="wrong"
+EOF
+ },
+ {
+ desc => "negation SUBSYSTEM!=",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "not-anything",
+ conf => <<EOF
+BUS=="scsi", SUBSYSTEM=="block", KERNEL!="sda1", NAME="matches-but-is-negated"
+BUS=="scsi", SUBSYSTEM!="anything", NAME="not-anything"
+BUS=="scsi", KERNEL=="sda1", NAME="wrong"
+EOF
+ },
+ {
+ desc => "negation PROGRAM!= exit code",
+ subsys => "block",
+ devpath => "/block/sda/sda1",
+ exp_name => "nonzero-program",
+ conf => <<EOF
+KERNEL=="sda1", PROGRAM!="/bin/false", NAME="nonzero-program"
+BUS=="scsi", KERNEL=="sda1", NAME="wrong"