diff t/memcached-keepalive.t @ 6:bef88ba0b378

Keepalive: distinguish between upstream servers by default. Option 'single' may be used if single pool of connections desired for some reason.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 24 Oct 2008 02:03:39 +0400
parents ca955a7f651b
children 15530a464dba
line wrap: on
line diff
--- a/t/memcached-keepalive.t
+++ b/t/memcached-keepalive.t
@@ -20,7 +20,7 @@ select STDOUT; $| = 1;
 eval { require Cache::Memcached; };
 plain(skip_all => 'Cache::Memcached not installed') if $@;
 
-my $t = Test::Nginx->new()->has('rewrite')->has_daemon('memcached')->plan(7)
+my $t = Test::Nginx->new()->has('rewrite')->has_daemon('memcached')->plan(10)
 	->write_file_expand('nginx.conf', <<'EOF');
 
 master_process off;
@@ -39,7 +39,25 @@ http {
 
     upstream memd {
         server 127.0.0.1:8081;
-        keepalive;
+        keepalive 1;
+    }
+
+    upstream memd2 {
+        server 127.0.0.1:8081;
+        server 127.0.0.1:8082;
+        keepalive 1 single;
+    }
+
+    upstream memd3 {
+        server 127.0.0.1:8081;
+        server 127.0.0.1:8082;
+        keepalive 1;
+    }
+
+    upstream memd4 {
+        server 127.0.0.1:8081;
+        server 127.0.0.1:8082;
+        keepalive 10;
     }
 
     server {
@@ -56,20 +74,39 @@ http {
             memcached_next_upstream  not_found;
             memcached_pass memd;
         }
+
+        location /memd2 {
+            set $memcached_key "/";
+            memcached_pass memd2;
+        }
+
+        location /memd3 {
+            set $memcached_key "/";
+            memcached_pass memd3;
+        }
+
+        location /memd4 {
+            set $memcached_key "/";
+            memcached_pass memd4;
+        }
     }
 }
 
 EOF
 
 $t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8081');
+$t->run_daemon('memcached', '-l', '127.0.0.1', '-p', '8082');
 $t->run();
 
 ###############################################################################
 
-my $memd = Cache::Memcached->new(servers => [ '127.0.0.1:8081' ]);
-$memd->set('/', 'SEE-THIS');
+my $memd1 = Cache::Memcached->new(servers => [ '127.0.0.1:8081' ]);
+my $memd2 = Cache::Memcached->new(servers => [ '127.0.0.1:8082' ]);
 
-my $total = $memd->stats()->{total}->{total_connections};
+$memd1->set('/', 'SEE-THIS');
+$memd2->set('/', 'SEE-THIS');
+
+my $total = $memd1->stats()->{total}->{total_connections};
 
 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request');
 like(http_get('/notfound'), qr/404/, 'keepalive memcached not found');
@@ -79,6 +116,48 @@ like(http_get('/'), qr/SEE-THIS/, 'keepa
 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request again');
 like(http_get('/'), qr/SEE-THIS/, 'keepalive memcached request again');
 
-is($memd->stats()->{total}->{total_connections}, $total + 1, 'keepalive used');
+is($memd1->stats()->{total}->{total_connections}, $total + 1,
+	'only one connection used');
+
+# two backends with 'single' option - should establish only one connection
+
+$total = $memd1->stats()->{total}->{total_connections} +
+	$memd2->stats()->{total}->{total_connections};
+
+http_get('/memd2');
+http_get('/memd2');
+http_get('/memd2');
+
+is($memd1->stats()->{total}->{total_connections} +
+	$memd2->stats()->{total}->{total_connections}, $total + 1,
+	'only one connection with two backends and single');
+
+$total = $memd1->stats()->{total}->{total_connections} +
+	$memd2->stats()->{total}->{total_connections};
+
+# two backends without 'single' option and maximum number of cached
+# connections set to 1 - should establish new connection on each request
+
+http_get('/memd3');
+http_get('/memd3');
+http_get('/memd3');
+
+is($memd1->stats()->{total}->{total_connections} +
+	$memd2->stats()->{total}->{total_connections}, $total + 3,
+	'3 connections should be established');
+
+# two backends without 'single' option and maximum number of cached
+# connections set to 10 - should establish only two connections (1 per backend)
+
+$total = $memd1->stats()->{total}->{total_connections} +
+        $memd2->stats()->{total}->{total_connections};
+
+http_get('/memd4');
+http_get('/memd4');
+http_get('/memd4');
+
+is($memd1->stats()->{total}->{total_connections} +
+	$memd2->stats()->{total}->{total_connections}, $total + 2,
+	'connection per backend');
 
 ###############################################################################