| 1 | use warnings; |
|---|
| 2 | use strict; |
|---|
| 3 | |
|---|
| 4 | use Test::More; |
|---|
| 5 | |
|---|
| 6 | use FindBin; |
|---|
| 7 | |
|---|
| 8 | use lib "$FindBin::Bin"; |
|---|
| 9 | use Memd; |
|---|
| 10 | |
|---|
| 11 | if ($Memd::memd) { |
|---|
| 12 | plan tests => 13; |
|---|
| 13 | } else { |
|---|
| 14 | plan skip_all => 'Not connected'; |
|---|
| 15 | } |
|---|
| 16 | |
|---|
| 17 | |
|---|
| 18 | use constant THRESHOLD => 1024 * 1024 - 1024; |
|---|
| 19 | |
|---|
| 20 | my $key = 'big_value'; |
|---|
| 21 | my $value = 'x' x THRESHOLD; |
|---|
| 22 | my $small_value = 'x' x (THRESHOLD - 2048); |
|---|
| 23 | my $big_value = 'x' x (THRESHOLD + 2048); |
|---|
| 24 | |
|---|
| 25 | my %smaller_params = %Memd::params; |
|---|
| 26 | $smaller_params{max_size} = THRESHOLD - 2048; |
|---|
| 27 | $smaller_params{namespace} .= 'smaller/'; |
|---|
| 28 | my $smaller_memd = new Cache::Memcached::Fast(\%smaller_params); |
|---|
| 29 | |
|---|
| 30 | my %bigger_params = %Memd::params; |
|---|
| 31 | $bigger_params{max_size} = THRESHOLD + 2048; |
|---|
| 32 | $bigger_params{namespace} .= 'bigger/'; |
|---|
| 33 | my $bigger_memd = new Cache::Memcached::Fast(\%bigger_params); |
|---|
| 34 | |
|---|
| 35 | $Memd::memd->enable_compress(0); |
|---|
| 36 | $smaller_memd->enable_compress(0); |
|---|
| 37 | $bigger_memd->enable_compress(0); |
|---|
| 38 | |
|---|
| 39 | ok($Memd::memd->set($key, $value), 'Store value uncompressed'); |
|---|
| 40 | ok($Memd::memd->get($key) eq $value, 'Fetch'); |
|---|
| 41 | ok(! $smaller_memd->set($key, $value), |
|---|
| 42 | 'Values equal to or greater than THRESHOLD should be rejected by module'); |
|---|
| 43 | ok(! $bigger_memd->set($key, $big_value), |
|---|
| 44 | 'Values greater than 1MB should be rejected by server'); |
|---|
| 45 | |
|---|
| 46 | my @res = $smaller_memd->set_multi(["$key-1", $small_value], |
|---|
| 47 | ["$key-2", $big_value], |
|---|
| 48 | ["$key-3", $small_value]); |
|---|
| 49 | ok($res[0] and not defined $res[1] and $res[2]); |
|---|
| 50 | ok($smaller_memd->delete_multi("$key-1", "$key-3")); |
|---|
| 51 | |
|---|
| 52 | SKIP: { |
|---|
| 53 | my $warning; |
|---|
| 54 | |
|---|
| 55 | { |
|---|
| 56 | local $SIG{__WARN__} = sub { die $_[0] }; |
|---|
| 57 | |
|---|
| 58 | eval { |
|---|
| 59 | $Memd::memd->enable_compress(1); |
|---|
| 60 | $smaller_memd->enable_compress(1); |
|---|
| 61 | $bigger_memd->enable_compress(1); |
|---|
| 62 | } |
|---|
| 63 | } |
|---|
| 64 | |
|---|
| 65 | if ($@) { |
|---|
| 66 | if ($@ =~ /^Compression module was not found/) { |
|---|
| 67 | skip $@, 6; |
|---|
| 68 | } else { |
|---|
| 69 | warn "$@\n"; |
|---|
| 70 | } |
|---|
| 71 | } |
|---|
| 72 | |
|---|
| 73 | ok($smaller_memd->set($key, $value), 'Store compressed value'); |
|---|
| 74 | ok($bigger_memd->set($key, $big_value), 'Store compressed value'); |
|---|
| 75 | |
|---|
| 76 | ok($smaller_memd->get($key) eq $value, 'Fetch and uncompress'); |
|---|
| 77 | ok($bigger_memd->get($key) eq $big_value, 'Fetch and uncompress'); |
|---|
| 78 | |
|---|
| 79 | ok($smaller_memd->delete($key), 'Delete'); |
|---|
| 80 | ok($bigger_memd->delete($key), 'Delete'); |
|---|
| 81 | } |
|---|
| 82 | |
|---|
| 83 | ok($Memd::memd->delete($key), 'Delete'); |
|---|