Mercurial > hg > nginx-tests
annotate realip.t @ 572:ca54b445d982
Tests: masked nginx bug in proxy next upstream.
When iterating through several next upstreams per a worker cycle,
a previously reported event about upstream connection error may
be improperly applied to the next upstream, thus leading to the
invalid connection error. E.g., in kqueue, where the problem is
visible, this is caused by "ev->instance" that does not tolerate
more than one next upstream at once, and kevents placed on the
kqueue separately for read and write events.
The change is to limit test case to the only one next upstream.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 14 May 2015 11:54:24 +0300 |
parents | a9621dbbd0d4 |
children | dc2f8aac0553 |
rev | line source |
---|---|
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for nginx realip module. |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 use Test::More; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 BEGIN { use FindBin; chdir($FindBin::Bin); } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 use lib 'lib'; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use Test::Nginx; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 ############################################################################### |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 select STDERR; $| = 1; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 select STDOUT; $| = 1; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
217
ea574aae77cb
Tests: unbreak geo and realip tests in jails.
Maxim Dounin <mdounin@mdounin.ru>
parents:
216
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http realip/); |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 $t->write_file_expand('nginx.conf', <<'EOF'); |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 %%TEST_GLOBALS%% |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
249
6a0d934950bc
Tests: remove extra spaces in "daemon off".
Maxim Dounin <mdounin@mdounin.ru>
parents:
247
diff
changeset
|
30 daemon off; |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 events { |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 http { |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 %%TEST_GLOBALS_HTTP%% |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
38 add_header X-IP $remote_addr; |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 real_ip_header X-Forwarded-For; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 server { |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 listen 127.0.0.1:8080; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 server_name localhost; |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
45 location /1 { |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
46 set_real_ip_from 127.0.0.1/32; |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
47 set_real_ip_from 10.0.1.0/24; |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
48 real_ip_recursive off; |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
49 } |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
50 |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
51 location /2 { |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
52 set_real_ip_from 127.0.0.1/32; |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
53 set_real_ip_from 10.0.1.0/24; |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
54 real_ip_recursive on; |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 EOF |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 $t->write_file('1', ''); |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
62 $t->write_file('2', ''); |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 $t->run(); |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 |
217
ea574aae77cb
Tests: unbreak geo and realip tests in jails.
Maxim Dounin <mdounin@mdounin.ru>
parents:
216
diff
changeset
|
65 plan(skip_all => 'no 127.0.0.1 on host') |
ea574aae77cb
Tests: unbreak geo and realip tests in jails.
Maxim Dounin <mdounin@mdounin.ru>
parents:
216
diff
changeset
|
66 if http_get('/1') !~ /X-IP: 127.0.0.1/m; |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
247
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
68 $t->plan(6); |
217
ea574aae77cb
Tests: unbreak geo and realip tests in jails.
Maxim Dounin <mdounin@mdounin.ru>
parents:
216
diff
changeset
|
69 |
ea574aae77cb
Tests: unbreak geo and realip tests in jails.
Maxim Dounin <mdounin@mdounin.ru>
parents:
216
diff
changeset
|
70 ############################################################################### |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
72 like(http_xff('/1', '192.0.2.1'), qr/^X-IP: 192.0.2.1/m, 'realip'); |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
73 like(http_xff('/1', '10.0.0.1, 192.0.2.1'), qr/^X-IP: 192.0.2.1/m, |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
74 'realip multi'); |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
75 like(http_xff('/1', '192.0.2.1, 10.0.1.1, 127.0.0.1'), |
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
76 qr/^X-IP: 127.0.0.1/m, 'realip recursive off'); |
247
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
77 like(http_xff('/2', '10.0.1.1, 192.0.2.1, 127.0.0.1'), |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
78 qr/^X-IP: 192.0.2.1/m, 'realip recursive on'); |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 |
247
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
80 like(http(<<EOF), qr/^X-IP: 10.0.1.1/m, 'realip multi xff recursive off'); |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
81 GET /1 HTTP/1.0 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
82 Host: localhost |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
83 X-Forwarded-For: 192.0.2.1 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
84 X-Forwarded-For: 127.0.0.1, 10.0.1.1 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
85 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
86 EOF |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
87 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
88 like(http(<<EOF), qr/^X-IP: 192.0.2.1/m, 'realip multi xff recursive on'); |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
89 GET /2 HTTP/1.0 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
90 Host: localhost |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
91 X-Forwarded-For: 10.0.1.1 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
92 X-Forwarded-For: 192.0.2.1 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
93 X-Forwarded-For: 127.0.0.1 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
94 |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
95 EOF |
bf6b05f03458
Tests: add realip tests for multiple X-Forwarded-For headers.
Andrei Belov <defan@nginx.com>
parents:
245
diff
changeset
|
96 |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 ############################################################################### |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 sub http_xff { |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
100 my ($uri, $xff) = @_; |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 return http(<<EOF); |
245
7189255c1b91
Tests: added real_ip_recursive test.
Andrei Belov <defan@nginx.com>
parents:
217
diff
changeset
|
102 GET $uri HTTP/1.0 |
216
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 Host: localhost |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 X-Forwarded-For: $xff |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 EOF |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 } |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 |
f2f37a52e42e
Tests: basic tests for geo and realip modules.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 ############################################################################### |