Blame t/expirations.t

Packit 4e8bc4
#!/usr/bin/perl
Packit 4e8bc4
Packit 4e8bc4
use strict;
Packit 4e8bc4
use Test::More tests => 15;
Packit 4e8bc4
use FindBin qw($Bin);
Packit 4e8bc4
use lib "$Bin/lib";
Packit 4e8bc4
use MemcachedTest;
Packit 4e8bc4
Packit 4e8bc4
my $server = new_memcached();
Packit 4e8bc4
my $sock = $server->sock;
Packit 4e8bc4
my $expire;
Packit 4e8bc4
Packit 4e8bc4
sub wait_for_early_second {
Packit 4e8bc4
    my $have_hires = eval "use Time::HiRes (); 1";
Packit 4e8bc4
    if ($have_hires) {
Packit 4e8bc4
        my $tsh = Time::HiRes::time();
Packit 4e8bc4
        my $ts = int($tsh);
Packit 4e8bc4
        return if ($tsh - $ts) < 0.5;
Packit 4e8bc4
    }
Packit 4e8bc4
Packit 4e8bc4
    my $ts = int(time());
Packit 4e8bc4
    while (1) {
Packit 4e8bc4
        my $t = int(time());
Packit 4e8bc4
        return if $t != $ts;
Packit 4e8bc4
        select undef, undef, undef, 0.10;  # 1/10th of a second sleeps until time changes.
Packit 4e8bc4
    }
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
wait_for_early_second();
Packit 4e8bc4
Packit 4e8bc4
print $sock "set foo 0 3 6\r\nfooval\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored foo");
Packit 4e8bc4
Packit 4e8bc4
mem_get_is($sock, "foo", "fooval");
Packit 4e8bc4
sleep(4);
Packit 4e8bc4
mem_get_is($sock, "foo", undef);
Packit 4e8bc4
Packit 4e8bc4
$expire = time() - 1;
Packit 4e8bc4
print $sock "set foo 0 $expire 6\r\nfooval\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored foo");
Packit 4e8bc4
mem_get_is($sock, "foo", undef, "already expired");
Packit 4e8bc4
Packit 4e8bc4
$expire = time() + 1;
Packit 4e8bc4
print $sock "set foo 0 $expire 6\r\nfoov+1\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored foo");
Packit 4e8bc4
mem_get_is($sock, "foo", "foov+1");
Packit 4e8bc4
sleep(2.2);
Packit 4e8bc4
mem_get_is($sock, "foo", undef, "now expired");
Packit 4e8bc4
Packit 4e8bc4
$expire = time() - 20;
Packit 4e8bc4
print $sock "set boo 0 $expire 6\r\nbooval\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored boo");
Packit 4e8bc4
mem_get_is($sock, "boo", undef, "now expired");
Packit 4e8bc4
Packit 4e8bc4
print $sock "add add 0 2 6\r\naddval\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored add");
Packit 4e8bc4
mem_get_is($sock, "add", "addval");
Packit 4e8bc4
# second add fails
Packit 4e8bc4
print $sock "add add 0 2 7\r\naddval2\r\n";
Packit 4e8bc4
is(scalar <$sock>, "NOT_STORED\r\n", "add failure");
Packit 4e8bc4
sleep(2.3);
Packit 4e8bc4
print $sock "add add 0 2 7\r\naddval3\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored add again");
Packit 4e8bc4
mem_get_is($sock, "add", "addval3");