/[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

Contents of /t/fs.t

Parent Directory Parent Directory | Revision Log Revision Log


Revision 25 - (show annotations)
Mon Jul 9 22:44:20 2007 UTC (16 years, 8 months ago) by dpavlin
File MIME type: application/x-troff
File size: 4571 byte(s)
hopefually correct handling of .fuse_hidden files which are created
when open file is unlinked.

unlink cleanup, final rename tweaking and tests
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 my $debug = shift @ARGV;
6
7 use Test::More tests => 744;
8 use File::Slurp;
9 use IO::File;
10
11 my ( $from, $to, $tmp ) = ( '/tmp/comp', '/tmp/no-comp', '/dev/shm/comp' );
12
13 ok( -e $from, 'from' );
14 ok( -e $to, 'to' );
15 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 {
29 my ( $op, $path, $content ) = @_;
30 my $orig_size = -s "$to/$path";
31 ok( open( my $fh, $op, "$to/$path" ), "open( $op $path )");
32 if ( $op eq '>' ) {
33 cmp_ok( -s "$to/$path", '==', 0, "truncate $to/$path" );
34 print $fh $content;
35 } 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 $/;
42 $content = <$fh>;
43 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' );
53 dump_debug 'after close';
54
55 ok ( -e "$to/$path", "exists $to/$path" );
56
57 my $pack = "$from/${path}.gz";
58 my $size = length($content);
59
60 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 diag "$op curr_size: $orig_size size: $size";
71 $size += $orig_size if ( $op eq '>>' );
72 cmp_ok( -s "$from/$path", '==', $size, "$from/$path = $size bytes" );
73 }
74
75 dump_debug('at end');
76
77 return $content;
78 }
79
80 sub md5sum {
81 my $path = shift;
82 my $md5sum = `md5sum $path`;
83 $md5sum =~ s/\s+.*$//s;
84 warn "## md5sum($path) = $md5sum\n" if $debug;
85 return $md5sum;
86 }
87
88 my $buff = '<<--just a chunk of data-->>';
89
90 for my $i ( 1 .. 3 ) {
91 my $content = $buff x int(3 + $i * rand(15));
92 $content =~ s/\s+/ /gs;
93
94 my $file = "test.$i";
95
96 file( '>', $file, $content );
97 file( '<', $file, $content );
98
99 file( '>>', $file, '+append' );
100 file( '<', $file, $content . '+append' );
101
102 file( '>', $file, '' );
103 file( '<', $file, '' );
104
105 file( '>', $file, $content );
106 file( '<', $file, $content );
107
108 }
109
110
111 sub multiple_rw {
112
113 diag "multiple read-write";
114 ok( my $fh1 = IO::File->new("> $to/m"), 'open 1' );
115 $fh1->autoflush;
116 ok( print($fh1 "1.1\n"), 'print 1.1' );
117 ok( my $fh2 = IO::File->new(">> $to/m"), 'open 2' );
118 $fh2->autoflush;
119 ok( print($fh2 "2.1\n"), 'print 2.1' );
120 cmp_ok( read_file("$to/m"), 'eq', "1.1\n2.1\n", 'mixed' );
121 ok( print($fh1 "1.2\n"), 'print 1.2' );
122 cmp_ok( read_file("$to/m"), 'eq', "1.1\n1.2\n", 'just 1' );
123 dump_debug 'own twice';
124 ok( print($fh1 "x" x 65535), 'print 1 64k' );
125 ok( close($fh1), 'close 1' );
126 dump_debug 'own once';
127 ok( close($fh2), 'close 2' );
128 dump_debug 'closed';
129
130 my @sizes;
131 my $size = 65536;
132 while ( $size > 1 ) {
133 push @sizes, $size;
134 $size /= 2;
135 }
136
137 foreach my $size ( @sizes ) {
138 ok( my $fh1 = IO::File->new("> $to/m"), 'open 1' );
139 ok( truncate( $fh1, $size ), 'truncate' );
140 dump_debug 'truncate';
141 ok( close($fh1), 'close 1' );
142 cmp_ok( -s "$to/m", '==', $size, "truncated to $size" );
143 }
144
145
146 foreach my $size ( sort @sizes ) {
147 my $orig_size = -s "$to/m";
148 ok( my $fh1 = IO::File->new(">> $to/m"), 'open 1' );
149 ok( print($fh1 "x" x $size), "print $size bytes" );
150 dump_debug 'append';
151 ok( close($fh1), 'close 1' );
152 my $expected_size = $size + $orig_size;
153 cmp_ok( -s "$to/m", '==', $expected_size, "appended upto $expected_size" );
154 }
155
156 ok( $size = -s "$to/m", 'size' );
157 ok( my $md5sum = md5sum("$to/m"), 'md5sum m' );
158 ok( rename("$to/m", "$to/n"), 'rename' );
159 ok( -e "$to/n", "$to/n exists" );
160 ok( ! -e "$to/m", "$to/m gone" );
161 cmp_ok( -s "$to/n", '==', $size, 'size' );
162 cmp_ok( $md5sum, 'eq', md5sum("$to/n"), 'md5sums same' );
163
164 ok( unlink("$to/n"), "$to/n unlink" );
165 ok( ! -e "$to/n", "$to/n gone" );
166
167 {
168 ok( my $fh1 = IO::File->new(">> $to/h"), "open $to/h" );
169 ok( print($fh1 "foobar"), "print" );
170 ok( unlink("$to/h"), 'create .fuse_hidden' );
171 ok( ! -e "$to/h", "$to/h gone" );
172 dump_debug 'hidden';
173 ok( print($fh1 "foobar"), "print to hidden" );
174 ok( close($fh1), "close $to/h" );
175 diag $!;
176 }
177 }
178
179 multiple_rw;
180 multiple_rw;
181
182

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.26