annotate proxy_non_idempotent.t @ 887:5debefd670bc

Tests: proxy_next_upstream non_idempotent tests.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 28 Mar 2016 19:47:38 +0300
parents
children e9064d691790
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite upstream_keepalive/);
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 daemon off;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 events {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34 }
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 http {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 upstream u {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server 127.0.0.1:8081 max_fails=0;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 server 127.0.0.1:8081 max_fails=0;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 }
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 upstream uk {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 server 127.0.0.1:8081 max_fails=0;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server 127.0.0.1:8081 max_fails=0;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 keepalive 10;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 }
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 server {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 listen 127.0.0.1:8080;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 server_name localhost;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 add_header X-IP $upstream_addr always;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 location / {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 proxy_pass http://u;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 proxy_next_upstream error timeout;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 }
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 location /non {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 proxy_pass http://u;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 proxy_next_upstream error timeout non_idempotent;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 }
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 location /keepalive {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 proxy_pass http://uk;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 proxy_next_upstream error timeout;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 proxy_http_version 1.1;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 proxy_set_header Connection "";
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 }
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 server {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 listen 127.0.0.1:8081;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 server_name localhost;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 location / {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 return 444;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 }
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 location /keepalive/establish {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 return 204;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 }
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 EOF
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 $t->try_run('no proxy_next_upstream non_idempotent')->plan(6);
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91
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 # 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
95 # 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
96
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 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
98 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
99
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 # 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
101 # difference between idempotent and non-idempotent requests,
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 # non-idempotent requests are retried as usual
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 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
105 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
106
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 # cached connections follow the same rules
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 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
110 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
111
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 sub http_post {
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 my ($uri, %extra) = @_;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 my $cl = $extra{cl} || 0;
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 http(<<"EOF");
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 POST $uri HTTP/1.0
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120 Content-Length: $cl
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 EOF
5debefd670bc Tests: proxy_next_upstream non_idempotent tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 }
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 ###############################################################################