1 use 5.010; |
|
2 use strict; |
|
3 use warnings; |
|
4 use autodie qw(:all); |
|
5 use Test::More; |
|
6 use Sys::Hostname; |
|
7 use if $^V gt v5.18 => (experimental => 'smartmatch'); |
|
8 |
|
9 use constant SIZE => 27 * 1024 * 1024; |
|
10 |
|
11 use File::Temp; |
|
12 |
|
13 my $err = File::Temp->new; |
|
14 my $dir = File::Temp->newdir; |
|
15 |
|
16 note("preparing the source"); |
|
17 open(my $out, "+>$dir/source"); |
|
18 print $out rand while -s $out < SIZE; |
|
19 |
|
20 note("preparing the images dir"); |
|
21 mkdir "$dir/images"; |
|
22 mkdir "$dir/mnt"; |
|
23 |
|
24 system("sudo mount -ttmpfs -osize=10M,uid=$> tmpfs $dir/mnt 2>/dev/null"); |
|
25 END { system("sudo umount $dir/mnt 2>/dev/null") }; |
|
26 |
|
27 |
|
28 system("perl -Mblib blib/script/imager.save $dir/source:source $dir/images"); |
|
29 is($? => 0, "saved"); |
|
30 |
|
31 system("perl -Mblib blib/script/imager.restore $dir/images/idx/@{[hostname]}/source/* $dir/source.restored"); |
|
32 is($? => 0, "restored"); |
|
33 |
|
34 # just as it is |
|
35 seek($out, 0, 0); |
|
36 open(my $restored, "$dir/source.restored"); |
|
37 ok(<$out> ~~ <$restored>, "source === restored"); |
|
38 |
|
39 # now compress and check again |
|
40 system("perl -Mblib blib/script/imager.compress $dir/images 2>$err"); |
|
41 is($? => 0, "compressed") or do { seek $err => 0, 0; diag <$err> }; |
|
42 system("perl -Mblib blib/script/imager.restore $dir/images/idx/@{[hostname]}/source/* $dir/source.restored"); |
|
43 is($? => 0, "restored") or do { seek $err => 0, 0; diag <$err> }; |
|
44 seek($out, 0, 0); |
|
45 open($restored, "$dir/source.restored"); |
|
46 ok(<$out> ~~ <$restored>, "compressed source === restored"); |
|
47 |
|
48 # now check on overflow of destination |
|
49 |
|
50 note("overflow condition"); |
|
51 eval { system("perl -Mblib blib/script/imager.save $dir/source:source $dir/mnt 2>$err") }; |
|
52 ok($?, "failure is expected"); |
|
53 |
|
54 |
|
55 done_testing; |
|