diff upstream_hash.t @ 1481:06fbf6269f38

Tests: upstream hash tests for round-robin fallback on empty key.
author Sergey Kandaurov <pluknet@nginx.com>
date Tue, 28 May 2019 16:25:34 +0300
parents 766bcbb632ee
children 5ac6efbe5552
line wrap: on
line diff
--- a/upstream_hash.t
+++ b/upstream_hash.t
@@ -22,7 +22,7 @@ use Test::Nginx;
 select STDERR; $| = 1;
 select STDOUT; $| = 1;
 
-my $t = Test::Nginx->new()->has(qw/http proxy rewrite upstream_hash/)->plan(13);
+my $t = Test::Nginx->new()->has(qw/http proxy rewrite upstream_hash/)->plan(15);
 
 $t->write_file_expand('nginx.conf', <<'EOF');
 
@@ -166,7 +166,7 @@ EOF
 
 ###############################################################################
 
-my ($p1, $p2, $p3) = (port(8081), port(8082), port(8083));
+my @ports = my ($p1, $p2, $p3) = (port(8081), port(8082), port(8083));
 
 # Only requests for absent peer are moved to other peers if hash is consistent.
 # Check this by comparing two upstreams with different number of peers.
@@ -178,6 +178,16 @@ ok(cmp_peers([iter('/cw', 20)], [iter('/
 like(many('/?a=1', 10), qr/($p1|$p2|$p3): 10/, 'stable hash');
 like(many('/c?a=1', 10), qr/($p1|$p2|$p3): 10/, 'stable hash - consistent');
 
+# fallback to round-robin
+
+TODO: {
+local $TODO = 'not yet' unless $t->has_version('1.17.1');
+
+like(many('/?a=', 6), qr/$p1: 2, $p2: 2, $p3: 2/, 'empty key');
+like(many('/c?a=', 6), qr/$p1: 2, $p2: 2, $p3: 2/, 'empty key - consistent');
+
+}
+
 my @res = iter('/', 10);
 
 is(@res, 10, 'all hashed peers');
@@ -244,7 +254,8 @@ sub many {
 		}
 	}
 
-	return join ', ', map { $_ . ": " . $ports{$_} } sort keys %ports;
+	my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports;
+	return join ', ', map { $_ . ": " . $ports{$_} } @keys;
 }
 
 ###############################################################################