# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1311801827 -7200 # Node ID 7e8df0715112b9eabd9f2ecdbe61caacc47e1534 # Parent ba9ad363d18514b62151f123bd4d8e5a6b69ac6e added size method diff -r ba9ad363d185 -r 7e8df0715112 lib/BlockDev.pm --- a/lib/BlockDev.pm Wed Jul 27 23:07:42 2011 +0200 +++ b/lib/BlockDev.pm Wed Jul 27 23:23:47 2011 +0200 @@ -2,6 +2,7 @@ use 5.010; use Moose; +use POSIX; use autodie qw(:all); use Cwd qw(abs_path); @@ -64,13 +65,14 @@ sub path { abs_path shift->dev } sub major { (stat shift->dev)[6] >> 8 } sub minor { (stat shift->dev)[6] & 0xff } - -sub mami { +sub size { my $self = shift; - return ($self->major, $self->minor) if wantarray; - return join " " => $self->major, $self->minor; + open(my $fh => $self->path); + seek($fh, 0, SEEK_END); + return tell($fh); } + 1; __END__ diff -r ba9ad363d185 -r 7e8df0715112 t/00-module.t --- a/t/00-module.t Wed Jul 27 23:07:42 2011 +0200 +++ b/t/00-module.t Wed Jul 27 23:23:47 2011 +0200 @@ -8,22 +8,37 @@ use_ok "BlockDev"; } +my %part; +{ + open(my $pp => "/proc/partitions"); + while (<$pp>) { chomp; + $. <= 2 and next; + my ($ma, $mi, $si, $dev) = split; + $part{$dev} = { major => $ma, + minor => $mi, + size => $si * 1024 }; + } +} + my @devices = BlockDev->list(); { # device list - my @proc = (); - open(my $fh, "/proc/partitions"); - while (<$fh>) { - /^\s*(\d+\s+){3}(?\S+)/ or next; - push @proc => $+{dev}; - } - is_deeply(\@devices => \@proc, "got all devices"); + is_deeply([sort @devices] => [sort keys %part], "got all devices"); } foreach (@devices) { + my $dev = BlockDev->new(dev => $_); isa_ok($dev, "BlockDev"); + ok(-b $dev->dev, "block device " . $dev->dev); + is($dev->major, $part{$_}{major}, "major $_"); + is($dev->minor, $part{$_}{minor}, "minor $_"); + SKIP: { + skip "need root permission" => 1 if $<; + is($dev->size, $part{$_}{size}, "size $part{$_}{size}"); + } + } done_testing();