Mercurial > hg > nginx-tests
annotate proxy_protocol_port.t @ 1054:9b8e13e2ee67
Tests: one more $realip_remote_addr test case on internal redirect.
List the address set by realip in set_real_ip_from to catch the bug
causing $realip_remote_addr overwrite fixed in cecf415643d7 (1.11.5).
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Tue, 11 Oct 2016 13:08:00 +0300 |
parents | 882267679006 |
children | cf14cfe9ec8c |
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 |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
27 my $t = Test::Nginx->new()->has(qw/http ipv6 realip/) |
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'); |
d5762cd27ad9
Tests: added tests for proxy_protocol_port variable.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
diff
changeset
|
67 $t->try_run('no proxy_protocol_port')->plan(8); |
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 ############################################################################### |