#!perl -T
use strict;
eval "use Cache::MemoryCache";
plan skip_all => "Cache::MemoryCache required for testing expiry policies" if $@;
plan tests => 9;
my ( $cache, $key );
my %vals = (
'valid-2 prune-10' => 'value for valid-2 prune-10 key',
'valid-10 prune-2' => 'value for valid-10 prune-2 key',
);
ok( $cache = Cache::CacheFactory->new(
storage => 'memory',
pruning => 'time',
validity => 'time',
), "construct cache" );
$key = 'valid-2 prune-10';
$cache->set(
key => $key,
data => $vals{ $key },
valid_until => '2 seconds',
prune_after => '10 seconds',
);
$key = 'valid-10 prune-2';
$cache->set(
key => $key,
data => $vals{ $key },
valid_until => '10 seconds',
prune_after => '2 seconds',
);
$key = 'valid-2 prune-10';
is( $cache->get( $key ), $vals{ $key }, "immediate $key fetch" );
$key = 'valid-10 prune-2';
is( $cache->get( $key ), $vals{ $key }, "immediate $key fetch" );
$cache->purge();
$key = 'valid-2 prune-10';
is( $cache->get( $key ), $vals{ $key }, "post-purge immediate $key fetch" );
$key = 'valid-10 prune-2';
is( $cache->get( $key ), $vals{ $key }, "post-purge immediate $key fetch" );
sleep( 3 );
$key = 'valid-2 prune-10';
is( $cache->get( $key ), undef, "delayed $key fetch" );
$key = 'valid-10 prune-2';
is( $cache->get( $key ), $vals{ $key }, "delayed $key fetch" );
$cache->purge();
$key = 'valid-2 prune-10';
is( $cache->get( $key ), undef, "post-purge delayed $key fetch" );
$key = 'valid-10 prune-2';
is( $cache->get( $key ), undef, "post-purge delayed $key fetch" );
# Clean-up.
foreach $key ( keys( %vals ) )
{
$cache->remove( $key );
}