summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordormando <dormando@rydia.net>2023-04-28 13:42:17 -0700
committerdormando <dormando@rydia.net>2023-04-28 13:42:17 -0700
commitae36ea593bb6c2f98a6caa41c96f036108cba106 (patch)
tree493f4310225a38c5ef99bb2080e02cd3aa76c4da
parent55607161dd04e91b5923ac294cb64bf4f374440f (diff)
downloadmemcached-ae36ea593bb6c2f98a6caa41c96f036108cba106.tar.gz
proxy: remove redundancy in test code
re-accepting backends was really common.
-rw-r--r--t/proxyconfig.t52
-rw-r--r--t/proxyunits.t91
2 files changed, 41 insertions, 102 deletions
diff --git a/t/proxyconfig.t b/t/proxyconfig.t
index b71e533..29009c5 100644
--- a/t/proxyconfig.t
+++ b/t/proxyconfig.t
@@ -38,6 +38,17 @@ sub mock_server {
return $srv;
}
+sub accept_backend {
+ my $srv = shift;
+ my $be = $srv->accept();
+ $be->autoflush(1);
+ ok(defined $be, "mock backend created");
+ like(<$be>, qr/version/, "received version command");
+ print $be "VERSION 1.0.0-mock\r\n";
+
+ return $be;
+}
+
# Put a version command down the pipe to ensure the socket is clear.
# client version commands skip the proxy code
sub check_version {
@@ -104,19 +115,11 @@ my %keymap = ();
my $keycount = 100;
{
# set up server backend sockets.
- for my $msrv ($mocksrvs[0], $mocksrvs[1], $mocksrvs[2]) {
- my $be = $msrv->accept();
- $be->autoflush(1);
- ok(defined $be, "mock backend created");
- push(@mbe, $be);
- }
-
my $s = IO::Select->new();
-
- for my $be (@mbe) {
+ for my $msrv ($mocksrvs[0], $mocksrvs[1], $mocksrvs[2]) {
+ my $be = accept_backend($msrv);
$s->add($be);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
+ push(@mbe, $be);
}
# Try sending something.
@@ -172,10 +175,7 @@ my @holdbe = (); # avoid having the backends immediately disconnect and pollute
like(<$watcher>, qr/ts=(\S+) gid=\d+ type=proxy_backend error=markedbad name=\S+ port=11511/, "backend was marked bad");
for my $msrv (@readable) {
- my $be = $msrv->accept();
- ok(defined $be, "mock backend accepted");
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
+ my $be = accept_backend($msrv);
push(@holdbe, $be);
}
@@ -223,10 +223,7 @@ is(<$watcher>, "OK\r\n", "watcher enabled");
for my $msrv (@readable) {
my @temp = ();
for (0 .. 3) {
- my $be = $msrv->accept();
- ok(defined $be, "mock backend accepted");
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
+ my $be = accept_backend($msrv);
$bes->add($be);
push(@temp, $be);
}
@@ -304,23 +301,16 @@ for my $port (11511, 11512, 11513) {
# Start up a clean server.
# Since limits are per worker thread, cut the worker threads down to 1 to ease
# testing.
-$p_srv = new_memcached('-o proxy_config=./t/proxyconfig.lua -l 127.0.0.1 -t 1', 11510);
+$p_srv = new_memcached('-o proxy_config=./t/proxyconfig.lua -t 1');
$ps = $p_srv->sock;
$ps->autoflush(1);
{
for my $msrv ($mocksrvs[0], $mocksrvs[1], $mocksrvs[2]) {
- my $be = $msrv->accept();
- $be->autoflush(1);
- ok(defined $be, "mock backend created");
+ my $be = accept_backend($msrv);
push(@mbe, $be);
}
- for my $be (@mbe) {
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- }
-
my $stats = mem_stats($ps, 'proxy');
isnt($stats->{active_req_limit}, 0, "active request limit is set");
@@ -415,11 +405,7 @@ $ps->autoflush(1);
is(scalar <$ps>, "SERVER_ERROR backend failure\r\n", "first request succeeded");
# Backend gets killed from a read OOM, so we need to re-establish.
- $mbe[0] = $mocksrvs[0]->accept();
- $be = $mbe[0];
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
like(<$watcher>, qr/error=outofmemory/, "OOM log line");
# Memory limits won't drop until the garbage collectors run, which
diff --git a/t/proxyunits.t b/t/proxyunits.t
index 992e73e..fb1f7a8 100644
--- a/t/proxyunits.t
+++ b/t/proxyunits.t
@@ -29,6 +29,17 @@ sub mock_server {
return $srv;
}
+sub accept_backend {
+ my $srv = shift;
+ my $be = $srv->accept();
+ $be->autoflush(1);
+ ok(defined $be, "mock backend created");
+ like(<$be>, qr/version/, "received version command");
+ print $be "VERSION 1.0.0-mock\r\n";
+
+ return $be;
+}
+
# Put a version command down the pipe to ensure the socket is clear.
# client version commands skip the proxy code
sub check_version {
@@ -53,18 +64,10 @@ $ps->autoflush(1);
my @mbe = ();
#diag "accepting mock backends";
for my $msrv (@mocksrvs) {
- my $be = $msrv->accept();
- $be->autoflush(1);
- ok(defined $be, "mock backend created");
+ my $be = accept_backend($msrv);
push(@mbe, $be);
}
-#diag "validating backends";
-for my $be (@mbe) {
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
-}
-
{
print $ps "set with the wrong number of tokens\n";
is(scalar <$ps>, "CLIENT_ERROR parsing request\r\n", "got CLIENT_ERROR for bad syntax");
@@ -80,12 +83,7 @@ for my $be (@mbe) {
is(scalar <$ps>, "SERVER_ERROR backend failure\r\n", "backend failure error");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $mbe[0] = accept_backend($mocksrvs[0]);
}
{
@@ -106,12 +104,7 @@ for my $be (@mbe) {
like(<$w>, qr/ts=(\S+) gid=\d+ type=proxy_backend error=trailingdata name=127.0.0.1 port=\d+ depth=0 rbuf=garbage/, "got backend error log line");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $mbe[0] = accept_backend($mocksrvs[0]);
}
SKIP: {
@@ -139,12 +132,7 @@ SKIP: {
like(<$w>, qr/ts=(\S+) gid=\d+ type=proxy_backend error=missingend name=127.0.0.1 port=\d+ depth=1 rbuf=/, "got missingend error log line");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $mbe[0] = accept_backend($mocksrvs[0]);
}
{
@@ -756,12 +744,7 @@ check_version($ps);
my $read = $be->read($data, 1);
is($read, 0, "backend disconnected");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
print $ps "get /b/too\r\n";
is(scalar <$be>, "get /b/too\r\n", "received get command");
@@ -771,12 +754,7 @@ check_version($ps);
$read = $be->read($data, 1);
is($read, 0, "backend disconnected");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
# Sometimes blank ERRORS can be sent.
print $ps "get /b/zoo\r\n";
@@ -787,12 +765,7 @@ check_version($ps);
$read = $be->read($data, 1);
is($read, 0, "backend disconnected");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
# Ensure garbage doesn't surface to client.
print $ps "get /b/doo\r\n";
@@ -800,12 +773,7 @@ check_version($ps);
print $be "garbage\r\n"; # don't need the \r\n but it makes tests easier
is(scalar <$ps>, "SERVER_ERROR backend failure\r\n", "generic backend error");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
# Check errors from pipelined commands past a CLIENT_ERROR
print $ps "get /b/quu\r\nget /b/muu\r\n";
@@ -815,12 +783,7 @@ check_version($ps);
is(scalar <$ps>, "CLIENT_ERROR bad protocol\r\n", "backend error");
is(scalar <$ps>, "SERVER_ERROR backend failure\r\n", "backend error");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
# Check that lua handles errors properly.
print $ps "get /errcheck/a\r\n";
@@ -828,24 +791,14 @@ check_version($ps);
print $be "ERROR test1\r\n";
is(scalar <$ps>, "ERROR\r\n", "lua saw correct error code");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
print $ps "get /errcheck/b\r\n";
is(scalar <$be>, "get /errcheck/b\r\n", "received get command");
print $be "CLIENT_ERROR test2\r\n";
is(scalar <$ps>, "CLIENT_ERROR\r\n", "lua saw correct error code");
- # re-accept the backend.
- $be = $mocksrvs[0]->accept();
- $be->autoflush(1);
- like(<$be>, qr/version/, "received version command");
- print $be "VERSION 1.0.0-mock\r\n";
- $mbe[0] = $be;
+ $be = $mbe[0] = accept_backend($mocksrvs[0]);
print $ps "get /errcheck/c\r\n";
is(scalar <$be>, "get /errcheck/c\r\n", "received get command");