Blame t/multiversioning.t

Packit 4e8bc4
#!/usr/bin/perl
Packit 4e8bc4
Packit 4e8bc4
use strict;
Packit 4e8bc4
use Test::More tests => 13;
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 $sock2 = $server->new_sock;
Packit 4e8bc4
Packit 4e8bc4
ok($sock != $sock2, "have two different connections open");
Packit 4e8bc4
Packit 4e8bc4
# set large value
Packit 4e8bc4
my $size   = 256 * 1024;  # 256 kB
Packit 4e8bc4
my $bigval = "0123456789abcdef" x ($size / 16);
Packit 4e8bc4
$bigval =~ s/^0/\[/; $bigval =~ s/f$/\]/;
Packit 4e8bc4
my $bigval2 = uc($bigval);
Packit 4e8bc4
Packit 4e8bc4
print $sock "set big 0 0 $size\r\n$bigval\r\n";
Packit 4e8bc4
is(scalar <$sock>, "STORED\r\n", "stored foo");
Packit 4e8bc4
mem_get_is($sock, "big", $bigval, "big value got correctly");
Packit 4e8bc4
Packit 4e8bc4
print $sock "get big\r\n";
Packit 4e8bc4
my $buf;
Packit 4e8bc4
my $read = 0;
Packit 4e8bc4
my $to_read = $size / 2;
Packit 4e8bc4
while ($read < $to_read) {
Packit 4e8bc4
    my $read_bytes = $sock->sysread($buf,
Packit 4e8bc4
                        ($to_read - $read > MemcachedTest::MAX_READ_WRITE_SIZE ?
Packit 4e8bc4
                                MemcachedTest::MAX_READ_WRITE_SIZE : $to_read - $read),
Packit 4e8bc4
                        $read);
Packit 4e8bc4
    last if ($read_bytes <= 0);
Packit 4e8bc4
    $read += $read_bytes;
Packit 4e8bc4
}
Packit 4e8bc4
is($read, $size / 2, "read half the answer back");
Packit 4e8bc4
like($buf, qr/VALUE big/, "buf has big value header in it");
Packit 4e8bc4
like($buf, qr/abcdef/, "buf has some data in it");
Packit 4e8bc4
unlike($buf, qr/abcde\]/, "buf doesn't yet close");
Packit 4e8bc4
Packit 4e8bc4
# sock2 interrupts (maybe sock1 is slow) and deletes stuff:
Packit 4e8bc4
print $sock2 "delete big\r\n";
Packit 4e8bc4
is(scalar <$sock2>, "DELETED\r\n", "deleted big from sock2 while sock1's still reading it");
Packit 4e8bc4
mem_get_is($sock2, "big", undef, "nothing from sock2 now.  gone from namespace.");
Packit 4e8bc4
print $sock2 "set big 0 0 $size\r\n$bigval2\r\n";
Packit 4e8bc4
is(scalar <$sock2>, "STORED\r\n", "stored big w/ val2");
Packit 4e8bc4
mem_get_is($sock2, "big", $bigval2, "big value2 got correctly");
Packit 4e8bc4
Packit 4e8bc4
# sock1 resumes reading...
Packit 4e8bc4
$buf .= <$sock>;
Packit 4e8bc4
$buf .= <$sock>;
Packit 4e8bc4
like($buf, qr/abcde\]/, "buf now closes");
Packit 4e8bc4
Packit 4e8bc4
# and if sock1 reads again, it's the uppercase version:
Packit 4e8bc4
mem_get_is($sock, "big", $bigval2, "big value2 got correctly from sock1");