t/001-root.t
changeset 13 630b878cfd55
parent 12 01a602d2806e
equal deleted inserted replaced
12:01a602d2806e 13:630b878cfd55
     1 use strict;
       
     2 use warnings;
       
     3 use Test::More;
       
     4 use English qw(-no_match_vars);
       
     5 use File::Temp;
       
     6 use File::Basename;
       
     7 use File::Find;
       
     8 use Cwd qw(abs_path);
       
     9 use POSIX qw(SEEK_END);
       
    10 use Digest::MD5;
       
    11 
       
    12 plan skip_all => "Need root permissions to perform these tests.\n"
       
    13     . "\t try: sudo ./Build test verbose=1 test-files=$0"
       
    14     if not $EUID == 0;
       
    15 
       
    16 my $dir = File::Temp->newdir(TEMPLATE => "blockfuse.XXXXXX");
       
    17 
       
    18 END { system("umount $dir 2>/dev/null") if $dir };
       
    19 system("blib/script/blockfuse $dir");
       
    20 is($?, 0, "mounted");
       
    21 
       
    22 my %size;
       
    23 find(sub {
       
    24     (my $name = $File::Find::name) =~ s/^\/dev//;
       
    25     if (-d) {
       
    26 	ok(-d "$dir/$name", "dir $name");
       
    27     }
       
    28     elsif (-b) {
       
    29 	ok(-f "$dir/$name", "block->file $name");
       
    30 	if (open(my $block, $_)) {
       
    31 	    seek($block, 0, SEEK_END);
       
    32 	    my $size = tell($block);
       
    33 	    close($block);
       
    34 	    is($size, -s "$dir/$name", "size $name");
       
    35 	    $size{$name} = $size;
       
    36 	}
       
    37     }
       
    38     elsif (-l and (-b abs_path $_ or -d abs_path $_)) {
       
    39 	ok(-l "$dir/$name", "link $name");
       
    40     }
       
    41 }, "/dev");
       
    42 
       
    43 # now md5sum test for the smallest device
       
    44 my $smallest = (sort { $size{$a} <=> $size{$b} } grep {$size{$_}} keys %size)[0];
       
    45 $smallest =~ s/^\///;
       
    46 
       
    47 
       
    48 my %digest = (
       
    49     dev => Digest::MD5->new(),
       
    50     file => Digest::MD5->new(),
       
    51 );
       
    52 
       
    53 note "checking digests of $smallest";
       
    54 {
       
    55     local $/ = \4096;
       
    56     open(my $dev, "/dev/$smallest") or die "/dev/$smallest: $!";
       
    57     $digest{dev}->add($_) while defined($_ = <$dev>);
       
    58 
       
    59     open(my $file, "$dir/$smallest") or die "$dir/$smallest: $!";
       
    60     $digest{file}->add($_) while defined($_ = <$file>);
       
    61 }
       
    62 
       
    63 is($digest{file}->hexdigest(), $digest{dev}->hexdigest(), "digests of $smallest are equal");
       
    64 
       
    65 
       
    66 
       
    67 done_testing();