annotate stream_upstream_random.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents a37d8526e691
children 875967f737d4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1350
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for upstream random balancer module.
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx qw/ :DEFAULT http_end /;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
25 my $t = Test::Nginx->new()
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26 ->has(qw/stream stream_upstream_zone stream_upstream_random/)
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
27 ->write_file_expand('nginx.conf', <<'EOF');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32 worker_processes 2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 events {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 stream {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38 upstream u {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
39 zone z 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
40 random;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server 127.0.0.1:8082;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45 upstream lc {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 zone lc 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 random two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 server 127.0.0.1:8082;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 upstream w {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 zone w 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 random two least_conn;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56 server 127.0.0.1:8082 weight=2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 upstream mc {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
60 zone mc 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 random;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 server 127.0.0.1:8081 max_conns=2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63 server 127.0.0.1:8082 max_conns=1;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 upstream mc2 {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 zone mc 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68 random two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 server 127.0.0.1:8081 max_conns=2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 server 127.0.0.1:8082 max_conns=1;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 upstream one {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 random;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 upstream two {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 random two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83 upstream zone {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
84 zone z 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85 random;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 upstream ztwo {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90 zone z 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
91 random two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
92 server 127.0.0.1:8081;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
93 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
94
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
95 upstream fail {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
96 zone fail 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
97 random;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
98 server 127.0.0.1:8096;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
99 server 127.0.0.1:8083 down;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
100 server 127.0.0.1:8082;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
101 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
102
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
103 upstream fail2 {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
104 zone fail2 1m;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
105 random two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 server 127.0.0.1:8096;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107 server 127.0.0.1:8083 down;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 server 127.0.0.1:8082;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 listen 127.0.0.1:8080;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113 proxy_pass u;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 listen 127.0.0.1:8083;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118 proxy_pass lc;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 listen 127.0.0.1:8084;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123 proxy_pass w;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127 listen 127.0.0.1:8085;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 proxy_pass mc;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
129 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
130
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
131 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
132 listen 127.0.0.1:8086;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
133 proxy_pass mc2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
134 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
135
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
136 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
137 listen 127.0.0.1:8087;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
138 proxy_pass one;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
139 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
140
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
141 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
142 listen 127.0.0.1:8088;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
143 proxy_pass two;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
144 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
145
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
146 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
147 listen 127.0.0.1:8089;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
148 proxy_pass zone;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
149 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
150
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
151 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
152 listen 127.0.0.1:8090;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
153 proxy_pass ztwo;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
154 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
155
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
156 proxy_connect_timeout 1s;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
157
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
158 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
159 listen 127.0.0.1:8091;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
160 proxy_pass fail;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
161 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
162
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
163 server {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
164 listen 127.0.0.1:8092;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
165 proxy_pass fail2;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
166 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
167 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
168
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
169 EOF
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
170
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
171 $t->run_daemon(\&http_daemon, port(8081));
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
172 $t->run_daemon(\&http_daemon, port(8082));
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
173 $t->try_run('no upstream random')->plan(12);
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
174
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
175 $t->waitforsocket('127.0.0.1:' . port(8081));
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
176 $t->waitforsocket('127.0.0.1:' . port(8082));
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
177
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
178 ###############################################################################
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
179
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
180 my @ports = my ($port1, $port2) = (port(8081), port(8082));
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
181
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
182 like(get(8080, '/'), qr/X-Port: ($port1|$port2)/, 'random');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
183 like(get(8083, '/'), qr/X-Port: ($port1|$port2)/, 'random two');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
184
1369
a37d8526e691 Tests: adjusted delay in upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1350
diff changeset
185 my $s = get(8083, '/w', start => 1, sleep => 0.5);
1350
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
186 my $r = get(8083, '/');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
187 my ($p) = http_end($s) =~ /X-Port: (\d+)/;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
188 like($r, qr/X-Port: (?!$p)/, 'random wait');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
189
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
190 SKIP: {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
191 skip 'long test', 3 unless $ENV{TEST_NGINX_UNSAFE};
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
192
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
193 is(parallel(8084, '/w', 3), "$port1: 1, $port2: 2", 'random weight');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
194
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
195 is(parallel(8085, '/w', 4), "$port1: 2, $port2: 1", 'max_conns');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
196 is(parallel(8086, '/w', 4), "$port1: 2, $port2: 1", 'max_conns two');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
197
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
198 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
199
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
200 # single variants
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
201
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
202 like(get(8087, '/'), qr/X-Port: $port1/, 'single one');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
203 like(get(8088, '/'), qr/X-Port: $port1/, 'single two');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
204 like(get(8089, '/'), qr/X-Port: $port1/, 'zone one');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
205 like(get(8090, '/'), qr/X-Port: $port1/, 'zone two');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
206
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
207 like(many(8091, '/', 10), qr/$port2: 10/, 'failures');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
208 like(many(8092, '/', 10), qr/$port2: 10/, 'failures two');
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
209
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
210 ###############################################################################
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
211
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
212 sub get {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
213 my ($port, $uri, %opts) = @_;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
214 my $s = IO::Socket::INET->new(
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
215 Proto => 'tcp',
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
216 PeerAddr => '127.0.0.1',
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
217 PeerPort => port($port),
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
218 )
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
219 or die "Can't connect to nginx: $!\n";
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
220
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
221 http_get($uri, socket => $s, %opts);
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
222 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
223
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
224 sub many {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
225 my ($port, $uri, $count, %opts) = @_;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
226 my %ports;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
227
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
228 for (1 .. $count) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
229 if (get($port, $uri) =~ /X-Port: (\d+)/) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
230 $ports{$1} = 0 unless defined $ports{$1};
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
231 $ports{$1}++;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
232 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
233
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
234 select undef, undef, undef, $opts{delay} if $opts{delay};
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
235 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
236
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
237 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
238 return join ', ', map { $_ . ": " . $ports{$_} } @keys;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
239 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
240
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
241 sub parallel {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
242 my ($port, $uri, $n) = @_;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
243 my %ports;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
244
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
245 my @s = map { get($port, $uri, start => 1, sleep => 0.1) } (1 .. $n);
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
246
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
247 for (@s) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
248 if (http_end($_) =~ /X-Port: (\d+)/) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
249 $ports{$1} = 0 unless defined $ports{$1};
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
250 $ports{$1}++;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
251 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
252 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
253
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
254 my @keys = map { my $p = $_; grep { $p == $_ } keys %ports } @ports;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
255 return join ', ', map { $_ . ": " . $ports{$_} } @keys;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
256 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
257
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
258 ###############################################################################
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
259
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
260 sub http_daemon {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
261 my ($port) = @_;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
262
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
263 my $server = IO::Socket::INET->new(
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
264 Proto => 'tcp',
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
265 LocalHost => '127.0.0.1',
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
266 LocalPort => $port,
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
267 Listen => 5,
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
268 Reuse => 1
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
269 )
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
270 or die "Can't create listening socket: $!\n";
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
271
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
272 local $SIG{PIPE} = 'IGNORE';
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
273
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
274 while (my $client = $server->accept()) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
275 $client->autoflush(1);
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
276
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
277 my $headers = '';
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
278 my $uri = '';
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
279
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
280 while (<$client>) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
281 $headers .= $_;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
282 last if (/^\x0d?\x0a?$/);
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
283 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
284
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
285 $uri = $1 if $headers =~ /^\S+\s+([^ ]+)\s+HTTP/i;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
286
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
287 if ($uri eq '/w') {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
288 Test::Nginx::log_core('||', "$port: sleep(2.5)");
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
289 select undef, undef, undef, 2.5;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
290 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
291
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
292 if ($uri eq '/close' && $port == port(8081)) {
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
293 next;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
294 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
295
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
296 Test::Nginx::log_core('||', "$port: response, 200");
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
297 print $client <<EOF;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
298 HTTP/1.1 200 OK
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
299 Connection: close
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
300 X-Port: $port
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
301
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
302 OK
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
303 EOF
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
304
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
305 close $client;
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
306 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
307 }
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
308
fda743e92b31 Tests: upstream random tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
309 ###############################################################################