Blame t/watcher_connid.t

Packit Service 584ef9
#!/usr/bin/perl
Packit Service 584ef9
# Test for adding connection id to the output when watching fetchers
Packit Service 584ef9
# and mutations.
Packit Service 584ef9
# Note that this test relies on the order of connection establishments. This
Packit Service 584ef9
# could be improved if there's a way for a client to retrieve its connection id.
Packit Service 584ef9
use strict;
Packit Service 584ef9
use warnings;
Packit Service 584ef9
use Socket qw/SO_RCVBUF/;
Packit Service 584ef9
Packit Service 584ef9
use Test::More tests => 4;
Packit Service 584ef9
use FindBin qw($Bin);
Packit Service 584ef9
use lib "$Bin/lib";
Packit Service 584ef9
use MemcachedTest;
Packit Service 584ef9
Packit Service 584ef9
my $server = new_memcached('-m 60 -o watcher_logbuf_size=8');
Packit Service 584ef9
my $client_first = $server->sock;
Packit Service 584ef9
Packit Service 584ef9
my $stats;
Packit Service 584ef9
Packit Service 584ef9
# get the first client's connection id
Packit Service 584ef9
print $client_first "stats conns\r\n";
Packit Service 584ef9
while (<$client_first>) {
Packit Service 584ef9
    last if /^(\.|END)/;
Packit Service 584ef9
    $stats = $_;
Packit Service 584ef9
}
Packit Service 584ef9
my $cfd_first  =(split(':', $stats))[0];
Packit Service 584ef9
$cfd_first =~ s/[^0-9]//g;
Packit Service 584ef9
Packit Service 584ef9
# start watching fetchers and mutations
Packit Service 584ef9
my $watcher = $server->new_sock;
Packit Service 584ef9
print $watcher "watch fetchers mutations\n";
Packit Service 584ef9
my $res = <$watcher>;
Packit Service 584ef9
is($res, "OK\r\n", "watching enabled for fetchers and mutations");
Packit Service 584ef9
Packit Service 584ef9
# first client does a set, which will result in a get and a set
Packit Service 584ef9
print $client_first "set foo 0 0 5 noreply\r\nhello\r\n";
Packit Service 584ef9
Packit Service 584ef9
# ensure client's connection id is correct
Packit Service 584ef9
$res = <$watcher>;
Packit Service 584ef9
print $res;
Packit Service 584ef9
like($res, qr/ts=\d+\.\d+\ gid=\d+ type=item_get key=foo status=not_found clsid=\d+ cfd=$cfd_first/,
Packit Service 584ef9
    "Saw a miss with the connection id $cfd_first");
Packit Service 584ef9
$res = <$watcher>;
Packit Service 584ef9
print $res;
Packit Service 584ef9
like($res, qr/ts=\d+\.\d+\ gid=\d+ type=item_store key=foo status=stored cmd=set ttl=\d+ clsid=\d+ cfd=$cfd_first/,
Packit Service 584ef9
    "Saw a set with the connection id $cfd_first");
Packit Service 584ef9
Packit Service 584ef9
# get the second client's connection id
Packit Service 584ef9
my $client_second = $server->new_sock;
Packit Service 584ef9
print $client_second "stats conns\r\n";
Packit Service 584ef9
while (<$client_second>) {
Packit Service 584ef9
    last if /^(\.|END)/;
Packit Service 584ef9
    $stats = $_;
Packit Service 584ef9
}
Packit Service 584ef9
my $cfd_second  =(split(':', $stats))[0];
Packit Service 584ef9
$cfd_second =~ s/[^0-9]//g;
Packit Service 584ef9
Packit Service 584ef9
# second client does a get
Packit Service 584ef9
print $client_second "get foo\r\n";
Packit Service 584ef9
Packit Service 584ef9
# now we should see second client's connection id
Packit Service 584ef9
$res = <$watcher>;
Packit Service 584ef9
print $res;
Packit Service 584ef9
like($res, qr/ts=\d+\.\d+\ gid=\d+ type=item_get key=foo status=found clsid=\d+ cfd=$cfd_second/,
Packit Service 584ef9
    "Saw a get with the connection id $cfd_second");
Packit Service 584ef9