--- 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__
--- 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}(?<dev>\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();