annotate proxy_next_upstream.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 882267679006
children da1325cb1c39
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for http proxy module, proxy_next_upstream directive.
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Test::More;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16 use lib 'lib';
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 use Test::Nginx;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ###############################################################################
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21 select STDERR; $| = 1;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 select STDOUT; $| = 1;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
24 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/)->plan(7);
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26 $t->write_file_expand('nginx.conf', <<'EOF');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 %%TEST_GLOBALS%%
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 daemon off;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 events {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 http {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 upstream u {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
39 server 127.0.0.1:8081;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
40 server 127.0.0.1:8082;
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
43 upstream u2 {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
44 server 127.0.0.1:8081;
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
45 server 127.0.0.1:8082;
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
46 }
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
47
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
49 listen 127.0.0.1:8080;
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 server_name localhost;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 location / {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 proxy_pass http://u;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 proxy_next_upstream http_500 http_404;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 }
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
56
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
57 location /all/ {
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
58 proxy_pass http://u2;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
59 proxy_next_upstream http_500 http_404;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
60 error_page 404 /all/404;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
61 proxy_intercept_errors on;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
62 }
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
63
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
64 location /all/404 {
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
65 return 200 "$upstream_addr\n";
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
66 }
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
70 listen 127.0.0.1:8081;
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 server_name localhost;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 location / {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 return 404;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 location /ok {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 return 200 "AND-THIS\n";
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 location /500 {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 return 500;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 }
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
82
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
83 location /all/ {
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
84 return 404;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
85 }
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
89 listen 127.0.0.1:8082;
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 server_name localhost;
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 location / {
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 return 200 "TEST-OK-IF-YOU-SEE-THIS\n";
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 }
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
95
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
96 location /all/ {
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
97 return 404;
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
98 }
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 }
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 EOF
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 $t->run();
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 ###############################################################################
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
108 my ($p1, $p2) = (port(8081), port(8082));
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 351
diff changeset
109
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 # check if both request fallback to a backend
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 # which returns valid response
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 like(http_get('/'), qr/SEE-THIS/, 'proxy request');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 like(http_get('/'), qr/SEE-THIS/, 'second request');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 # make sure backend isn't switched off after
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 # proxy_next_upstream http_404
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 like(http_get('/ok') . http_get('/ok'), qr/AND-THIS/, 'not down');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 # next upstream on http_500
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 like(http_get('/500'), qr/SEE-THIS/, 'request 500');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124 like(http_get('/500'), qr/SEE-THIS/, 'request 500 second');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126 # make sure backend switched off with http_500
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 unlike(http_get('/ok') . http_get('/ok'), qr/AND-THIS/, 'down after 500');
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
130 # make sure all backends are tried once
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
131
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
132 like(http_get('/all/rr'),
952
e9064d691790 Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 351
diff changeset
133 qr/^127.0.0.1:($p1, 127.0.0.1:$p2|$p2, 127.0.0.1:$p1)$/mi,
351
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
134 'all tried once');
3d3c8b5ea8ee Tests: improved proxy_next_upstream tests.
Sergey Kandaurov <pluknet@nginx.com>
parents: 288
diff changeset
135
288
56157712d744 Tests: proxy_next_upstream tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136 ###############################################################################