Add fix for RT #71271.
[perl-fuse.git] / test / mknod.t
index 35c5c82..c35853a 100644 (file)
@@ -2,36 +2,65 @@
 use test::helper qw($_real $_point);
 use Test::More;
 plan tests => 24;
+use English;
+use Unix::Mknod qw(:all);
+use Fcntl qw(S_IFCHR S_IFBLK);
+use POSIX;
+
 my (@stat);
+
 chdir($_point);
-ok(!(system("touch reg"      )>>8),"create normal file");
-ok(!(system("mknod chr c 2 3")>>8),"create chrdev");
-ok(!(system("mknod blk b 2 3")>>8),"create blkdev");
-ok(!(system("mknod fifo p"   )>>8),"create fifo");
+ok(open($file, '>', 'reg'),"create normal file");
+close($file);
+ok(defined mkfifo($_point.'/fifo', 0600),"create fifo");
+
 chdir($_real);
 ok(-e "reg" ,"normal file exists");
-ok(-e "chr" ,"chrdev exists");
-ok(-e "blk" ,"blkdev exists");
 ok(-e "fifo","fifo exists");
 ok(-f "reg" ,"normal file is normal file");
-ok(-c "chr" ,"chrdev is chrdev");
-ok(-b "blk" ,"blkdev is blkdev");
 ok(-p "fifo","fifo is fifo");
-@stat = stat("chr");
-is($stat[6],3+(2<<8),"chrdev has right major,minor");
-@stat = stat("blk");
-is($stat[6],3+(2<<8),"blkdev has right major,minor");
+
+SKIP: {
+       skip('Need root to mknod devices', 8) unless ($UID == 0);
+
+       chdir($_point);
+       ok(!mknod($_point.'/chr', 0600|S_IFCHR, makedev(2,3)),"create chrdev");
+       ok(!mknod($_point.'/blk', 0600|S_IFBLK, makedev(2,3)),"create blkdev");
+
+       chdir($_real);
+       ok(-e "chr" ,"chrdev exists");
+       ok(-e "blk" ,"blkdev exists");
+        
+        skip('mknod() is just pretend under fakeroot(1)', 4)
+          if exists $ENV{FAKEROOTKEY};
+
+       ok(-c "chr" ,"chrdev is chrdev");
+       ok(-b "blk" ,"blkdev is blkdev");
+
+       @stat = stat("chr");
+       is($stat[6],makedev(2,3),"chrdev has right major,minor");
+       @stat = stat("blk");
+       is($stat[6],makedev(2,3),"blkdev has right major,minor");
+}
+
 chdir($_point);
 ok(-e "reg" ,"normal file exists");
-ok(-e "chr" ,"chrdev exists");
-ok(-e "blk" ,"blkdev exists");
 ok(-e "fifo","fifo exists");
 ok(-f "reg" ,"normal file is normal file");
-ok(-c "chr" ,"chrdev is chrdev");
-ok(-b "blk" ,"blkdev is blkdev");
 ok(-p "fifo","fifo is fifo");
-@stat = stat("chr");
-is($stat[6],3+(2<<8),"chrdev has right major,minor");
-@stat = stat("blk");
-is($stat[6],3+(2<<8),"blkdev has right major,minor");
+
+SKIP: {
+       skip('Need root to mknod devices', 6) unless ($UID == 0);
+
+       ok(-e "chr" ,"chrdev exists");
+       ok(-e "blk" ,"blkdev exists");
+       ok(-c "chr" ,"chrdev is chrdev");
+       ok(-b "blk" ,"blkdev is blkdev");
+
+       @stat = stat("chr");
+       is($stat[6],makedev(2,3),"chrdev has right major,minor");
+       @stat = stat("blk");
+       is($stat[6],makedev(2,3),"blkdev has right major,minor");
+}
+
 map { unlink } qw(reg chr blk fifo);