added size method moose
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Wed, 27 Jul 2011 23:23:47 +0200
branchmoose
changeset 3 7e8df0715112
parent 2 ba9ad363d185
child 4 a4f1369eaa6e
added size method
lib/BlockDev.pm
t/00-module.t
--- 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();