use strict;
use Test::More;
use lib 't/lib';
use libmemcached_test;
# This test requires at least 5 memcached instances.
# We start out by creating 100 items in 4 instances.
# After that, we add another server to the server list, and
# do the fetch of the 100 items. When used with consistent hashing, we
# should be getting around 80% hit ratio
my @servers;
BEGIN
{
@servers = libmemcached_test_servers();
plan skip_all => "Set PERL_LIBMEMCACHED_TEST_SERVERS env var to at least 5 servers to run this test"
if @servers < 5;
plan(tests => 2);
use_ok("Cache::Memcached::libmemcached", "MEMCACHED_DISTRIBUTION_CONSISTENT");
}
my $max = 100;
{ # First, flush everything in these test memcached
my $cache = Cache::Memcached::libmemcached->new({
servers => \@servers,
});
$cache->flush_all;
}
{ # Now, warm 4 out of 5 servers
my $cache = Cache::Memcached::libmemcached->new({
servers => [ @servers[0..3] ],
distribution_method => MEMCACHED_DISTRIBUTION_CONSISTENT,
});
for (1..$max) {
$cache->set($_ => $_);
}
}
{ # 4 caches have been warmed. add another cache, and our hit ratio should
# be somewhere around 0.80 (we'll allow plus-or-minus 0.05
my $hits = 0;
my $cache = Cache::Memcached::libmemcached->new({
servers => [ @servers[0..4] ],
distribution_method => MEMCACHED_DISTRIBUTION_CONSISTENT,
});
for (1..$max) {
if (defined $cache->get($_)) {
$hits++;
}
}
my $ratio = $hits / $max;
ok( $ratio >= 0.75 && $ratio <= 0.85, "Hit ratio is somewhere around 0.80 (was $ratio)" );
}