Blame t/lru-crawler.t

Packit 4e8bc4
#!/usr/bin/perl
Packit 4e8bc4
Packit 4e8bc4
use strict;
Packit 4e8bc4
use warnings;
Packit 4e8bc4
use Test::More tests => 222;
Packit 4e8bc4
use FindBin qw($Bin);
Packit 4e8bc4
use lib "$Bin/lib";
Packit 4e8bc4
use MemcachedTest;
Packit 4e8bc4
Packit 4e8bc4
my $server = new_memcached('-m 32 -o no_modern');
Packit 4e8bc4
{
Packit 4e8bc4
    my $stats = mem_stats($server->sock, ' settings');
Packit 4e8bc4
    is($stats->{lru_crawler}, "no");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
my $sock = $server->sock;
Packit 4e8bc4
Packit 4e8bc4
# Fill a slab a bit.
Packit 4e8bc4
# Some immortal items, some long expiring items, some short expiring items.
Packit 4e8bc4
# Done so the immortals end up at the tail.
Packit 4e8bc4
for (1 .. 30) {
Packit 4e8bc4
    print $sock "set ifoo$_ 0 0 2\r\nok\r\n";
Packit 4e8bc4
    is(scalar <$sock>, "STORED\r\n", "stored key");
Packit 4e8bc4
}
Packit 4e8bc4
for (1 .. 30) {
Packit 4e8bc4
    print $sock "set lfoo$_ 0 3600 2\r\nok\r\n";
Packit 4e8bc4
    is(scalar <$sock>, "STORED\r\n", "stored key");
Packit 4e8bc4
}
Packit 4e8bc4
for (1 .. 30) {
Packit 4e8bc4
    print $sock "set sfoo$_ 0 1 2\r\nok\r\n";
Packit 4e8bc4
    is(scalar <$sock>, "STORED\r\n", "stored key");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
{
Packit 4e8bc4
    my $slabs = mem_stats($sock, "slabs");
Packit 4e8bc4
    is($slabs->{"1:used_chunks"}, 90, "slab1 has 90 used chunks");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
sleep 3;
Packit 4e8bc4
Packit 4e8bc4
print $sock "lru_crawler enable\r\n";
Packit 4e8bc4
is(scalar <$sock>, "OK\r\n", "enabled lru crawler");
Packit 4e8bc4
{
Packit 4e8bc4
    my $stats = mem_stats($server->sock, ' settings');
Packit 4e8bc4
    is($stats->{lru_crawler}, "yes");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
print $sock "lru_crawler crawl 1\r\n";
Packit 4e8bc4
is(scalar <$sock>, "OK\r\n", "kicked lru crawler");
Packit 4e8bc4
while (1) {
Packit 4e8bc4
    my $stats = mem_stats($sock);
Packit 4e8bc4
    last unless $stats->{lru_crawler_running};
Packit 4e8bc4
    sleep 1;
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
{
Packit 4e8bc4
    my $slabs = mem_stats($sock, "slabs");
Packit 4e8bc4
    is($slabs->{"1:used_chunks"}, 60, "slab1 now has 60 used chunks");
Packit 4e8bc4
    my $items = mem_stats($sock, "items");
Packit 4e8bc4
    is($items->{"items:1:crawler_reclaimed"}, 30, "slab1 has 30 reclaims");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
# Check that crawler metadump works correctly.
Packit 4e8bc4
{
Packit 4e8bc4
    print $sock "lru_crawler metadump all\r\n";
Packit 4e8bc4
    my $count = 0;
Packit 4e8bc4
    while (<$sock>) {
Packit 4e8bc4
        last if /^(\.|END)/;
Packit 4e8bc4
        /^(key=) (\S+).*([^\r\n]+)/;
Packit 4e8bc4
        $count++;
Packit 4e8bc4
    }
Packit 4e8bc4
    is ($count, 60);
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
for (1 .. 30) {
Packit 4e8bc4
    mem_get_is($sock, "ifoo$_", "ok");
Packit 4e8bc4
    mem_get_is($sock, "lfoo$_", "ok");
Packit 4e8bc4
    mem_get_is($sock, "sfoo$_", undef);
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
print $sock "lru_crawler disable\r\n";
Packit 4e8bc4
is(scalar <$sock>, "OK\r\n", "disabled lru crawler");
Packit 4e8bc4
{
Packit 4e8bc4
    my $stats = mem_stats($server->sock, ' settings');
Packit 4e8bc4
    is($stats->{lru_crawler}, "no");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
$server->stop;
Packit 4e8bc4
Packit 4e8bc4
# Test initializing crawler from starttime.
Packit 4e8bc4
$server = new_memcached('-m 32 -o no_modern,lru_crawler');
Packit 4e8bc4
$sock = $server->sock;
Packit 4e8bc4
Packit 4e8bc4
for (1 .. 30) {
Packit 4e8bc4
    print $sock "set sfoo$_ 0 1 2\r\nok\r\n";
Packit 4e8bc4
    is(scalar <$sock>, "STORED\r\n", "stored key");
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
sleep 3;
Packit 4e8bc4
Packit 4e8bc4
print $sock "lru_crawler crawl 1\r\n";
Packit 4e8bc4
is(scalar <$sock>, "OK\r\n", "kicked lru crawler");
Packit 4e8bc4
while (1) {
Packit 4e8bc4
    my $stats = mem_stats($sock);
Packit 4e8bc4
    last unless $stats->{lru_crawler_running};
Packit 4e8bc4
    sleep 1;
Packit 4e8bc4
}
Packit 4e8bc4
Packit 4e8bc4
{
Packit 4e8bc4
    my $slabs = mem_stats($sock, "slabs");
Packit 4e8bc4
    is($slabs->{"1:used_chunks"}, 0, "slab1 now has 0 used chunks");
Packit 4e8bc4
}