Mercurial > hg > nginx-tests
annotate proxy_non_idempotent.t @ 1021:ebdf239722b9
Tests: relaxed proxy_cache_lock.t nolock tests to fix on Solaris.
Assumed that the order of responses being arrived in nolock case may be ignored.
An important part of such case is that the only last response should be cached.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 02 Sep 2016 12:17:35 +0300 |
parents | 196d33c2bb45 |
children | d51cc2526066 |
rev | line source |
---|---|
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 # (C) Nginx, Inc. |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 # Tests for proxy_next_upstream non_idempotent. |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 ############################################################################### |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use warnings; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 use strict; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
12 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 use Test::More; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
14 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 BEGIN { use FindBin; chdir($FindBin::Bin); } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 use lib 'lib'; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 use Test::Nginx; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 ############################################################################### |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 select STDERR; $| = 1; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 select STDOUT; $| = 1; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 |
1020
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite upstream_keepalive/) |
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
26 ->plan(6); |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 $t->write_file_expand('nginx.conf', <<'EOF'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 %%TEST_GLOBALS%% |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 daemon off; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 events { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 http { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 %%TEST_GLOBALS_HTTP%% |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 upstream u { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
41 server 127.0.0.1:8081 max_fails=0; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
42 server 127.0.0.1:8081 max_fails=0; |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 upstream uk { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
46 server 127.0.0.1:8081 max_fails=0; |
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
47 server 127.0.0.1:8081 max_fails=0; |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 keepalive 10; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
52 listen 127.0.0.1:8080; |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 server_name localhost; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 add_header X-IP $upstream_addr always; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 location / { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 proxy_pass http://u; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 proxy_next_upstream error timeout; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 location /non { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 proxy_pass http://u; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 proxy_next_upstream error timeout non_idempotent; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 location /keepalive { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 proxy_pass http://uk; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 proxy_next_upstream error timeout; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 proxy_http_version 1.1; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 proxy_set_header Connection ""; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 server { |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
76 listen 127.0.0.1:8081; |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 server_name localhost; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 location / { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 return 444; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 location /keepalive/establish { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 return 204; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 EOF |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 |
1020
196d33c2bb45
Tests: removed TODO and try_run() checks for legacy versions.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
974
diff
changeset
|
91 $t->run(); |
887
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 ############################################################################### |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 # non-idempotent requests should not be retried by default |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 # if a request has been sent to a backend |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 like(http_get('/'), qr/X-IP: (\S+), \1\x0d?$/m, 'get'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 like(http_post('/'), qr/X-IP: (\S+)\x0d?$/m, 'post'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 # with "proxy_next_upstream non_idempotent" there is no |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 # difference between idempotent and non-idempotent requests, |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 # non-idempotent requests are retried as usual |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 like(http_get('/non'), qr/X-IP: (\S+), \1\x0d?$/m, 'get non_idempotent'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 like(http_post('/non'), qr/X-IP: (\S+), \1\x0d?$/m, 'post non_idempotent'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 # cached connections follow the same rules |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 like(http_get('/keepalive/establish'), qr/204 No Content/m, 'keepalive'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 like(http_post('/keepalive/drop'), qr/X-IP: (\S+)\x0d?$/m, 'keepalive post'); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 ############################################################################### |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 sub http_post { |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 my ($uri, %extra) = @_; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 my $cl = $extra{cl} || 0; |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 http(<<"EOF"); |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 POST $uri HTTP/1.0 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 Content-Length: $cl |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 EOF |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 } |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 |
5debefd670bc
Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 ############################################################################### |