/[fuse-comp]/t/fs.t
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /t/fs.t

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 6 by dpavlin, Sun Jul 8 17:03:12 2007 UTC revision 15 by dpavlin, Mon Jul 9 13:33:13 2007 UTC
# Line 4  use warnings; Line 4  use warnings;
4    
5  my $debug = shift @ARGV;  my $debug = shift @ARGV;
6    
7  use Test::More tests => 23;  use Test::More tests => 710;
8    use File::Slurp;
9    use IO::File;
10    
11  my ( $from, $to, $tmp ) = ( '/tmp/comp', '/tmp/no-comp', '/dev/shm' );  my ( $from, $to, $tmp ) = ( '/tmp/comp', '/tmp/no-comp', '/dev/shm/comp' );
12    
13  ok( -e $from, 'from' );  ok( -e $from, 'from' );
14  ok( -e $to, 'to' );  ok( -e $to, 'to' );
15  ok( -e $tmp, 'tmp' );  ok( -e $tmp, 'tmp' );
16    
17    ok( (system "touch $to/.debug") == 0, 'debug on' );
18    
19    sub dump_debug {
20            my $msg = shift;
21            ok( open(my $d, '<', "$to/.debug"), 'open debug' );
22            local $/;
23            my $dump = <$d>;
24            diag "DEBUG: $msg\n$dump\n" if $debug;
25            ok( close($d), 'close debug' );
26    }
27    
28  sub file {  sub file {
29          my ( $op, $path, $content ) = @_;          my ( $op, $path, $content ) = @_;
30            my $orig_size = -s "$to/$path";
31          ok( open( my $fh, $op, "$to/$path" ), "open( $op $path )");          ok( open( my $fh, $op, "$to/$path" ), "open( $op $path )");
32          if ( $content ) {          if ( $op eq '>' ) {
33                    cmp_ok( -s "$to/$path", '==', 0, "truncate $to/$path" );
34                  print $fh $content;                  print $fh $content;
35          } else {          } elsif ( $op eq '>>' ) {
36                    cmp_ok( -s "$to/$path", '==', $orig_size, "no truncate $to/$path" );
37                    print $fh $content;
38    
39            } elsif ( $op eq '<' ) {
40                    my $orig_content = $content;
41                  local $/;                  local $/;
42                  $content = <$fh>;                  $content = <$fh>;
43                  ok( $content, 'has content' );                  if ( defined( $content ) ) {
44                            cmp_ok( $content, 'eq', $orig_content, "content " . length($content) . " bytes" );
45                    } else {
46                            ok( $content, "has " . length($content) . " bytes" );
47                    }
48            } else {
49                    die "unsupported op: $op";
50          }          }
51            dump_debug 'before close';
52          ok( close($fh), 'close' );          ok( close($fh), 'close' );
53            dump_debug 'after close';
54    
55            ok ( -e "$to/$path", "exists $to/$path" );
56    
57          ok ( -e "$to/$path", 'exists' );          my $pack = "$from/${path}.gz";
58            my $size = length($content);
59    
60          ok( -e "$from/$path" || -e "$from/${path}.gz", 'on disk' );          if ( -e $pack ) {
61                    ok( -s $pack, "on disk $pack" ) if ( $size > 0 );
62                    # check uncompressed size if read
63                    ok( -e "$tmp/$path" , "in tmp $tmp/$path" ) if ( $op eq '<' );
64                    # check total size if not append
65                    if ( $op ne '>>' ) {
66                            cmp_ok( -s $pack, '==', $size, "$tmp/$path = $size bytes" );
67                    }
68            } else {
69                    ok( -e "$from/$path", "on disk $from/$path" );
70                    my $curr_size = -s "$from/$path";
71                    diag "$op curr_size: $curr_size size: $size";
72                    $size += $curr_size if ( $op eq '>>' );
73                    cmp_ok( -s "$from/$path", '==', $size, "$from/$path = $size bytes" );
74            }
75    
76            dump_debug('at end');
77    
78          return $content;          return $content;
79  }  }
80    
81  file( '>', 'foo', 'content' );  my $buff = '<<--just a chunk of data-->>';
82  cmp_ok( file( '<', 'foo' ), 'eq', 'content', 'check content' );  
83    for my $i ( 1 .. 3 ) {
84            my $content = $buff x int(3 + $i * rand(15));
85            $content =~ s/\s+/ /gs;
86    
87            my $file = "test.$i";
88    
89            file( '>', $file, $content );
90            file( '<', $file, $content );
91    
92            file( '>>', $file, '+append' );
93            file( '<', $file, $content . '+append' );
94    
95            file( '>', $file, '' );
96            file( '<', $file, '' );
97    
98            file( '>', $file, $content );
99            file( '<', $file, $content );
100    
101    }
102    
103    
104    sub multiple_rw {
105    
106            diag "multiple read-write";
107            ok( my $fh1 = IO::File->new("> $to/m"), 'open 1' );
108            $fh1->autoflush;
109            ok( print($fh1 "1.1\n"), 'print 1.1' );
110            ok( my $fh2 = IO::File->new(">> $to/m"), 'open 2' );
111            $fh2->autoflush;
112            ok( print($fh2 "2.1\n"), 'print 2.1' );
113            cmp_ok( read_file("$to/m"), 'eq', "1.1\n2.1\n", 'mixed' );
114            ok( print($fh1 "1.2\n"), 'print 1.2' );
115            cmp_ok( read_file("$to/m"), 'eq', "1.1\n1.2\n", 'just 1' );
116            dump_debug 'own twice';
117            ok( print($fh1 "x" x 65535), 'print 1 64k' );
118            ok( close($fh1), 'close 1' );
119            dump_debug 'own once';
120            ok( close($fh2), 'close 2' );
121            dump_debug 'closed';
122    
123            my @sizes;
124            my $size = 65536;
125            while ( $size > 1 ) {
126                    push @sizes, $size;
127                    $size /= 2;
128            }
129    
130            foreach my $size ( @sizes ) {
131                    ok( my $fh1 = IO::File->new("> $to/m"), 'open 1' );
132                    ok( truncate( $fh1, $size ), 'truncate' );
133                    dump_debug 'truncate';
134                    ok( close($fh1), 'close 1' );
135                    cmp_ok( -s "$to/m", '==', $size, "truncated to $size" );
136            }
137    
138    
139            foreach my $size ( sort @sizes ) {
140                    my $orig_size = -s "$to/m";
141                    ok( my $fh1 = IO::File->new(">> $to/m"), 'open 1' );
142                    ok( print($fh1 "x" x $size), "print $size bytes" );
143                    dump_debug 'append';
144                    ok( close($fh1), 'close 1' );
145                    my $expected_size = $size + $orig_size;
146                    cmp_ok( -s "$to/m", '==', $expected_size, "appended upto $expected_size" );
147            }
148    
149    
150    }
151    
152    multiple_rw;
153    multiple_rw;
154    
 file( '>>', 'foo', '+more' );  
 cmp_ok( file( '<', 'foo' ), 'eq', 'content+more', 'check content' );  
155    
 file( '>', 'foo', 'new' );  
 cmp_ok( file( '<', 'foo' ), 'eq', 'new', 'check content' );  

Legend:
Removed from v.6  
changed lines
  Added in v.15

  ViewVC Help
Powered by ViewVC 1.1.26