|
Packit |
4e8bc4 |
#!/usr/bin/perl
|
|
Packit |
4e8bc4 |
# Networked logging tests.
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
use strict;
|
|
Packit |
4e8bc4 |
use warnings;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
use Test::More;
|
|
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 48 -o slab_chunk_max=16384');
|
|
Packit |
4e8bc4 |
my $sock = $server->sock;
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# We're testing to ensure item chaining doesn't corrupt or poorly overlap
|
|
Packit |
4e8bc4 |
# data, so create a non-repeating pattern.
|
|
Packit |
4e8bc4 |
my @parts = ();
|
|
Packit |
4e8bc4 |
for (1 .. 8000) {
|
|
Packit |
4e8bc4 |
push(@parts, $_);
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
my $pattern = join(':', @parts);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
my $plen = length($pattern);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
print $sock "set pattern 0 0 $plen\r\n$pattern\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored pattern successfully");
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
mem_get_is($sock, "pattern", $pattern);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
for (1..5) {
|
|
Packit |
4e8bc4 |
my $size = 400 * 1024;
|
|
Packit |
4e8bc4 |
my $data = "x" x $size;
|
|
Packit |
4e8bc4 |
print $sock "set foo$_ 0 0 $size\r\n$data\r\n";
|
|
Packit |
4e8bc4 |
my $res = <$sock>;
|
|
Packit |
4e8bc4 |
is($res, "STORED\r\n", "stored some big items");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
my $max = 1024 * 1024;
|
|
Packit |
4e8bc4 |
my $big = "a big value that's > .5M and < 1M. ";
|
|
Packit |
4e8bc4 |
while (length($big) * 2 < $max) {
|
|
Packit |
4e8bc4 |
$big = $big . $big;
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
my $biglen = length($big);
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
for (1..100) {
|
|
Packit |
4e8bc4 |
print $sock "set toast$_ 0 0 $biglen\r\n$big\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored big");
|
|
Packit |
4e8bc4 |
mem_get_is($sock, "toast$_", $big);
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Test a wide range of sets.
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
my $len = 1024 * 200;
|
|
Packit |
4e8bc4 |
while ($len < 1024 * 1024) {
|
|
Packit |
4e8bc4 |
my $val = "B" x $len;
|
|
Packit |
4e8bc4 |
print $sock "set foo_$len 0 0 $len\r\n$val\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored size $len");
|
|
Packit |
4e8bc4 |
$len += 2048;
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
# Test long appends and prepends.
|
|
Packit |
4e8bc4 |
# Note: memory bloats like crazy if we use one test per request.
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
my $str = 'seedstring';
|
|
Packit |
4e8bc4 |
my $len = length($str);
|
|
Packit |
4e8bc4 |
print $sock "set appender 0 0 $len\r\n$str\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored seed string for append");
|
|
Packit |
4e8bc4 |
my $unexpected = 0;
|
|
Packit |
4e8bc4 |
for my $part (@parts) {
|
|
Packit |
4e8bc4 |
# reduce required loops but still have a pattern.
|
|
Packit |
4e8bc4 |
my $todo = $part . "x" x 10;
|
|
Packit |
4e8bc4 |
$str .= $todo;
|
|
Packit |
4e8bc4 |
my $len = length($todo);
|
|
Packit |
4e8bc4 |
print $sock "append appender 0 0 $len\r\n$todo\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "append $todo size $len");
|
|
Packit |
4e8bc4 |
print $sock "get appender\r\n";
|
|
Packit |
4e8bc4 |
my $header = scalar <$sock>;
|
|
Packit |
4e8bc4 |
my $body = scalar <$sock>;
|
|
Packit |
4e8bc4 |
my $end = scalar <$sock>;
|
|
Packit |
4e8bc4 |
$unexpected++ unless $body eq "$str\r\n";
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
is($unexpected, 0, "No unexpected results during appends\n");
|
|
Packit |
4e8bc4 |
# Now test appending a chunked item to a chunked item.
|
|
Packit |
4e8bc4 |
$len = length($str);
|
|
Packit |
4e8bc4 |
print $sock "append appender 0 0 $len\r\n$str\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "append large string size $len");
|
|
Packit |
4e8bc4 |
mem_get_is($sock, "appender", $str . $str);
|
|
Packit |
4e8bc4 |
print $sock "delete appender\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "DELETED\r\n", "removed appender key");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
{
|
|
Packit |
4e8bc4 |
my $str = 'seedstring';
|
|
Packit |
4e8bc4 |
my $len = length($str);
|
|
Packit |
4e8bc4 |
print $sock "set prepender 0 0 $len\r\n$str\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "stored seed string for append");
|
|
Packit |
4e8bc4 |
my $unexpected = 0;
|
|
Packit |
4e8bc4 |
for my $part (@parts) {
|
|
Packit |
4e8bc4 |
# reduce required loops but still have a pattern.
|
|
Packit |
4e8bc4 |
$part .= "x" x 10;
|
|
Packit |
4e8bc4 |
$str = $part . $str;
|
|
Packit |
4e8bc4 |
my $len = length($part);
|
|
Packit |
4e8bc4 |
print $sock "prepend prepender 0 0 $len\r\n$part\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "prepend $part size $len");
|
|
Packit |
4e8bc4 |
print $sock "get prepender\r\n";
|
|
Packit |
4e8bc4 |
my $header = scalar <$sock>;
|
|
Packit |
4e8bc4 |
my $body = scalar <$sock>;
|
|
Packit |
4e8bc4 |
my $end = scalar <$sock>;
|
|
Packit |
4e8bc4 |
$unexpected++ unless $body eq "$str\r\n";
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
is($unexpected, 0, "No unexpected results during prepends\n");
|
|
Packit |
4e8bc4 |
# Now test prepending a chunked item to a chunked item.
|
|
Packit |
4e8bc4 |
$len = length($str);
|
|
Packit |
4e8bc4 |
print $sock "prepend prepender 0 0 $len\r\n$str\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "STORED\r\n", "prepend large string size $len");
|
|
Packit |
4e8bc4 |
mem_get_is($sock, "prepender", $str . $str);
|
|
Packit |
4e8bc4 |
print $sock "delete prepender\r\n";
|
|
Packit |
4e8bc4 |
is(scalar <$sock>, "DELETED\r\n", "removed prepender key");
|
|
Packit |
4e8bc4 |
}
|
|
Packit |
4e8bc4 |
|
|
Packit |
4e8bc4 |
done_testing();
|