The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use test::helper qw($_real $_point);
use Test::More;
plan tests => 24;
use English;
use Unix::Mknod qw(:all);
use Fcntl qw(:mode);
use POSIX;

my (@stat);

chdir($_point);
ok(!(system("touch reg"      )>>8),"create normal file");
ok(defined mkfifo($_point.'/fifo', 0600),"create fifo");

chdir($_real);
ok(-e "reg" ,"normal file exists");
ok(-e "fifo","fifo exists");
ok(-f "reg" ,"normal file is normal file");
ok(-p "fifo","fifo is fifo");

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 "fifo","fifo exists");
ok(-f "reg" ,"normal file is normal file");
ok(-p "fifo","fifo is fifo");

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);