use warnings; use strict; use Test::More; use FindBin; use lib "$FindBin::Bin"; use Memd; if ($Memd::memd) { plan tests => 13; } else { plan skip_all => 'Not connected'; } use constant THRESHOLD => 1024 * 1024 - 1024; my $key = 'big_value'; my $value = 'x' x THRESHOLD; my $small_value = 'x' x (THRESHOLD - 2048); my $big_value = 'x' x (THRESHOLD + 2048); my %smaller_params = %Memd::params; $smaller_params{max_size} = THRESHOLD - 2048; $smaller_params{namespace} .= 'smaller/'; my $smaller_memd = new Cache::Memcached::Fast(\%smaller_params); my %bigger_params = %Memd::params; $bigger_params{max_size} = THRESHOLD + 2048; $bigger_params{namespace} .= 'bigger/'; my $bigger_memd = new Cache::Memcached::Fast(\%bigger_params); $Memd::memd->enable_compress(0); $smaller_memd->enable_compress(0); $bigger_memd->enable_compress(0); ok($Memd::memd->set($key, $value), 'Store value uncompressed'); ok($Memd::memd->get($key) eq $value, 'Fetch'); ok(! $smaller_memd->set($key, $value), 'Values equal to or greater than THRESHOLD should be rejected by module'); ok(! $bigger_memd->set($key, $big_value), 'Values greater than 1MB should be rejected by server'); my @res = $smaller_memd->set_multi(["$key-1", $small_value], ["$key-2", $big_value], ["$key-3", $small_value]); ok($res[0] and not defined $res[1] and $res[2]); ok($smaller_memd->delete_multi("$key-1", "$key-3")); SKIP: { my $warning; { local $SIG{__WARN__} = sub { die $_[0] }; eval { $Memd::memd->enable_compress(1); $smaller_memd->enable_compress(1); $bigger_memd->enable_compress(1); } } if ($@) { if ($@ =~ /^Compression module was not found/) { skip $@, 6; } else { warn "$@\n"; } } ok($smaller_memd->set($key, $value), 'Store compressed value'); ok($bigger_memd->set($key, $big_value), 'Store compressed value'); ok($smaller_memd->get($key) eq $value, 'Fetch and uncompress'); ok($bigger_memd->get($key) eq $big_value, 'Fetch and uncompress'); ok($smaller_memd->delete($key), 'Delete'); ok($bigger_memd->delete($key), 'Delete'); } ok($Memd::memd->delete($key), 'Delete');