annotate mirror_proxy.t @ 1606:e4e0695552ed

Tests: fixed stream_proxy_ssl_conf_command.t. The stream_proxy_ssl_conf_command.t test used stream return module to return the response. Since this ignores actual request, but the perl test code used http_get(). This might result in the request being sent after the response is returned and the connection closed by the server, resulting in RST being generated and no response seen by the client at all. Fix is to use "stream(...)->read()" instead of http_get(), so no request is sent at all, eliminating possibility of RST being generated.
author Maxim Dounin <mdounin@mdounin.ru>
date Tue, 10 Nov 2020 05:03:29 +0300
parents 97c8280de681
children 8b7ab9245916
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
1 #!/usr/bin/perl
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
2
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
3 # (C) Sergey Kandaurov
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
4 # (C) Nginx, Inc.
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
5
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
6 # Tests for http mirror module and it's interaction with proxy.
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
7
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
8 ###############################################################################
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
9
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
10 use warnings;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
11 use strict;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
12
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
13 use Test::More;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
14
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
16
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
17 use lib 'lib';
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
18 use Test::Nginx;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
19
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
20 ###############################################################################
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
21
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
22 select STDERR; $| = 1;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
24
1366
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy mirror rewrite limit_req/);
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
26
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1368
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF')->plan(7);
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
28
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
29 %%TEST_GLOBALS%%
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
30
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
31 daemon off;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
32
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
33 events {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
34 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
35
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
36 http {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
38
1366
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
39 limit_req_zone $uri zone=slow:1m rate=30r/m;
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
40 log_format test $request_uri:$request_body;
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
41
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
42 server {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
43 listen 127.0.0.1:8080;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
44 server_name localhost;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
45
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
46 location / {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
47 mirror /mirror;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
48 proxy_pass http://127.0.0.1:8081;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
49 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
50
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
51 location /off {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
52 mirror /mirror/off;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
53 mirror_request_body off;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
54 proxy_pass http://127.0.0.1:8081;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
55 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
56
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
57 location /mirror {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
58 internal;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
59 proxy_pass http://127.0.0.1:8082;
1366
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
60 limit_req zone=slow burst=1;
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
61 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
62 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
63
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
64 server {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
65 listen 127.0.0.1:8081;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
66 listen 127.0.0.1:8082;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
67 server_name localhost;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
68
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
69 location / {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
70 client_body_timeout 1s;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
71 proxy_pass http://127.0.0.1:$server_port/return204;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
72 access_log %%TESTDIR%%/test.log test;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
73 add_header X-Body $request_body;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
74 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
75
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
76 location /return204 {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
77 return 204;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
78 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
79 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
80 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
81
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
82 EOF
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
83
1381
97c8280de681 Tests: removed TODO and try_run() checks for legacy versions.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1368
diff changeset
84 $t->run();
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
85
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
86 ###############################################################################
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
87
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
88 like(http_post('/'), qr/X-Body: 1234567890\x0d?$/m, 'mirror proxy');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
89 like(http_post('/off'), qr/X-Body: 1234567890\x0d?$/m, 'mirror_request_body');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
90
1366
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
91 # delayed subrequest should not affect main request processing nor stuck itself
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
92
1367
c6721d7bf1a0 Tests: skip mirror test with limit_req on win32, it hangs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1366
diff changeset
93 SKIP: {
c6721d7bf1a0 Tests: skip mirror test with limit_req on win32, it hangs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1366
diff changeset
94 skip 'hang on win32', 1 if $^O eq 'MSWin32' and !$ENV{TEST_NGINX_UNSAFE};
c6721d7bf1a0 Tests: skip mirror test with limit_req on win32, it hangs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1366
diff changeset
95
1366
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
96 TODO: {
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
97 local $TODO = 'not yet';
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
98
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
99 like(http_post('/delay?1'), qr/X-Body: 1234567890\x0d?$/m, 'mirror delay');
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
100
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
101 }
e16eecc84b49 Tests: added mirror test with subrequest delayed in limit_req.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1208
diff changeset
102
1367
c6721d7bf1a0 Tests: skip mirror test with limit_req on win32, it hangs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1366
diff changeset
103 }
c6721d7bf1a0 Tests: skip mirror test with limit_req on win32, it hangs.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1366
diff changeset
104
1368
c0dbb94fa36c Tests: adjusted todo_alerts() in mirror_proxy.t on win32.
Sergey Kandaurov <pluknet@nginx.com>
parents: 1367
diff changeset
105 $t->todo_alerts() unless $^O eq 'MSWin32';
1208
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
106 $t->stop();
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
107
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
108 my $log = $t->read_file('test.log');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
109 like($log, qr!^/:1234567890$!m, 'log - request body');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
110 like($log, qr!^/mirror:1234567890$!m, 'log - request body in mirror');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
111 like($log, qr!^/off:1234567890$!m, 'log - mirror_request_body off');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
112 like($log, qr!^/mirror/off:-$!m,, 'log - mirror_request_body off in mirror');
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
113
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
114 ###############################################################################
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
115
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
116 sub http_post {
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
117 my ($url) = @_;
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
118
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
119 http(<<EOF);
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
120 POST $url HTTP/1.0
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
121 Host: localhost
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
122 Content-Length: 10
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
123
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
124 1234567890
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
125 EOF
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
126 }
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
127
a6453cf5786a Tests: http mirror module tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
diff changeset
128 ###############################################################################