Mercurial > hg > nginx-tests
annotate proxy_protocol_port.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 | 766bcbb632ee |
children |
rev | line source |
---|---|
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
2 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
3 # (C) Andrey Zelenkov |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
5 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
6 # Tests for proxy_protocol_port variable. |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
7 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
8 ############################################################################### |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
9 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
10 use warnings; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
11 use strict; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
12 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
13 use Test::More; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
14 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
15 use Socket qw/ CRLF /; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
16 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
17 BEGIN { use FindBin; chdir($FindBin::Bin); } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
18 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
19 use lib 'lib'; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
20 use Test::Nginx; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
21 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
22 ############################################################################### |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
23 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
24 select STDERR; $| = 1; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
25 select STDOUT; $| = 1; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
26 |
1170
cf14cfe9ec8c
Tests: dropped obsolete ipv6 prerequisite.
Sergey Kandaurov <pluknet@nginx.com>
parents:
974
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http realip/) |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
28 ->write_file_expand('nginx.conf', <<'EOF'); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
29 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
31 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
32 daemon off; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
33 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
34 events { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
35 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
36 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
37 http { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
38 %%TEST_GLOBALS_HTTP%% |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
39 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
40 log_format port $proxy_protocol_port; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
41 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
42 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
961
diff
changeset
|
43 listen 127.0.0.1:8080 proxy_protocol; |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
44 server_name localhost; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
45 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
46 add_header X-PP-Port $proxy_protocol_port; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
47 add_header X-Remote-Port $remote_port; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
48 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
49 location /pp { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
50 real_ip_header proxy_protocol; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
51 error_page 404 =200 /t; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
52 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
53 location /pp/real { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
54 set_real_ip_from 127.0.0.1/32; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
55 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
56 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
57 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
58 location /log { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
59 access_log %%TESTDIR%%/port.log port; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
60 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
61 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
62 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
63 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
64 EOF |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
65 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
66 $t->write_file('t', 'SEE-THIS'); |
1251
766bcbb632ee
Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents:
1170
diff
changeset
|
67 $t->run()->plan(8); |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
68 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
69 ############################################################################### |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
70 |
961
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
71 my $tcp4 = 'PROXY TCP4 192.0.2.1 192.0.2.2 123 5678' . CRLF; |
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
72 my $tcp6 = 'PROXY TCP6 2001:Db8::1 2001:Db8::2 123 5678' . CRLF; |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
73 my $unk = 'PROXY UNKNOWN 1 2 3 4 5 6' . CRLF; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
74 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
75 # realip |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
76 |
961
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
77 like(pp_get('/pp', $tcp4), qr/X-PP-Port: 123\x0d/, 'pp port tcp4'); |
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
78 like(pp_get('/pp', $tcp6), qr/X-PP-Port: 123\x0d/, 'pp port tcp6'); |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
79 unlike(pp_get('/pp', $unk), qr/X-PP-Port/, 'pp port unknown'); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
80 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
81 # remote_port |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
82 |
961
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
83 like(pp_get('/pp/real', $tcp4), qr/X-Remote-Port: 123\x0d/, 'remote port tcp4'); |
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
84 unlike(pp_get('/pp', $tcp4), qr/X-Remote-Port: 123\x0d/, 'no remote port tcp4'); |
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
85 like(pp_get('/pp/real', $tcp6), qr/X-Remote-Port: 123\x0d/, 'remote port tcp6'); |
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
86 unlike(pp_get('/pp', $tcp6), qr/X-Remote-Port: 123\x0d/, 'no remote port tcp6'); |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
87 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
88 # log |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
89 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
90 pp_get('/log', $tcp4); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
91 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
92 $t->stop(); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
93 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
94 my $log = $t->read_file('/port.log'); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
95 chomp $log; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
96 |
961
4993ece8620e
Tests: avoid unexpected match in proxy_protocol_port.t at all.
Sergey Kandaurov <pluknet@nginx.com>
parents:
959
diff
changeset
|
97 is($log, 123, 'pp port log'); |
934
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
98 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
99 ############################################################################### |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
100 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
101 sub pp_get { |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
102 my ($url, $proxy) = @_; |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
103 return http($proxy . <<EOF); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
104 GET $url HTTP/1.0 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
105 Host: localhost |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
106 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
107 EOF |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
108 } |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
109 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
110 ############################################################################### |