Mercurial > hg > nginx-tests
annotate auth_request.t @ 386:1b205a3332de
Tests: adjusted limit_req rate value.
This shortens excessive test execution time due to unnecessarily delayed
backend connection after client connection close, which is usually observed
when the client connection is closed before the request is proxied to backend.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Wed, 26 Mar 2014 22:50:22 +0400 |
parents | e7647a966212 |
children | 4ac60aad723e |
rev | line source |
---|---|
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 #!/usr/bin/perl |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
3 # (C) Maxim Dounin |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 # Tests for auth request module. |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 ############################################################################### |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 use warnings; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 use strict; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
11 |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
12 use Test::More; |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
13 |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
14 use Socket qw/ CRLF /; |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
15 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 BEGIN { use FindBin; chdir($FindBin::Bin); } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
17 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 use lib 'lib'; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
19 use Test::Nginx; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
20 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
21 ############################################################################### |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
22 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 select STDERR; $| = 1; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 select STDOUT; $| = 1; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 my $t = Test::Nginx->new() |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 ->has(qw/http rewrite proxy fastcgi auth_basic auth_request/) |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
28 ->plan(17); |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
29 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 $t->write_file_expand('nginx.conf', <<'EOF'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
31 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
32 %%TEST_GLOBALS%% |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
34 daemon off; |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 events { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 http { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 %%TEST_GLOBALS_HTTP%% |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 server { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 listen 127.0.0.1:8080; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 server_name localhost; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 location / { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 return 444; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
48 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
49 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
50 location /open { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 auth_request /auth-open; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 location = /auth-open { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 return 204; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 location /open-static { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 auth_request /auth-open-static; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
59 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 location = /auth-open-static { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 # nothing, use static file |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 location /unauthorized { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 auth_request /auth-unauthorized; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 location = /auth-unauthorized { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 return 401; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 location /forbidden { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 auth_request /auth-forbidden; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 location = /auth-forbidden { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 return 403; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 location /error { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 auth_request /auth-error; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 location = /auth-error { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 return 404; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 location /off { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 auth_request off; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 location /proxy { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 auth_request /auth-proxy; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 location = /auth-proxy { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 proxy_pass http://127.0.0.1:8080/auth-basic; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 proxy_pass_request_body off; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 proxy_set_header Content-Length ""; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 location = /auth-basic { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 auth_basic "restricted"; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 auth_basic_user_file %%TESTDIR%%/htpasswd; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 location = /proxy-double { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 proxy_pass http://127.0.0.1:8080/auth-error; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
104 proxy_intercept_errors on; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 error_page 404 = /proxy-double-fallback; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
106 client_body_buffer_size 4k; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 location = /proxy-double-fallback { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 auth_request /auth-proxy-double; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 proxy_pass http://127.0.0.1:8080/auth-open; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 location = /auth-proxy-double { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 proxy_pass http://127.0.0.1:8080/auth-open; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 proxy_pass_request_body off; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 proxy_set_header Content-Length ""; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 location /fastcgi { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 auth_request /auth-fastcgi; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 location = /auth-fastcgi { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
122 fastcgi_pass 127.0.0.1:8081; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
123 fastcgi_pass_request_body off; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
124 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
125 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
126 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
127 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
128 EOF |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
129 |
333
e7647a966212
Tests: use {PLAIN} passwords on win32 to unbreak auth_request.t.
Maxim Dounin <mdounin@mdounin.ru>
parents:
331
diff
changeset
|
130 $t->write_file('htpasswd', 'user:{PLAIN}secret' . "\n"); |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
131 $t->write_file('auth-basic', 'INVISIBLE'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
132 $t->write_file('auth-open-static', 'INVISIBLE'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
133 $t->run(); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
134 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
135 ############################################################################### |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
136 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 like(http_get('/open'), qr/ 404 /, 'auth open'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 like(http_get('/unauthorized'), qr/ 401 /, 'auth unauthorized'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 like(http_get('/forbidden'), qr/ 403 /, 'auth forbidden'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 like(http_get('/error'), qr/ 500 /, 'auth error'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 like(http_get('/off'), qr/ 404 /, 'auth off'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 like(http_post('/open'), qr/ 404 /, 'auth post open'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 like(http_post('/unauthorized'), qr/ 401 /, 'auth post unauthorized'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 like(http_get('/open-static'), qr/ 404 /, 'auth open static'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 unlike(http_get('/open-static'), qr/INVISIBLE/, 'auth static no content'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 like(http_get('/proxy'), qr/ 401 /, 'proxy auth unauthorized'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 like(http_get('/proxy'), qr/WWW-Authenticate: Basic realm="restricted"/, |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 'proxy auth has www-authenticate'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 like(http_get_auth('/proxy'), qr/ 404 /, 'proxy auth pass'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 unlike(http_get_auth('/proxy'), qr/INVISIBLE/, 'proxy auth no content'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 like(http_post('/proxy'), qr/ 401 /, 'proxy auth post'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 # Consider the following scenario: |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 # |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 # 1. proxy_pass reads request body, then goes to fallback via error_page |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 # 2. auth request uses proxy_pass, and upstream module closes request body file |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 # in ngx_http_upstream_send_response() |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 # 3. oops: fallback has no body |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
163 # |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 # To prevent this we always allocate fake request body for auth request. |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 # |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 # Note that this doesn't happen when using header_only as relevant code |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 # in ngx_http_upstream_send_response() isn't reached. It may be reached |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 # with proxy_cache or proxy_store, but they will shutdown client connection |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 # in case of header_only and hence do not work for us at all. |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 like(http_post_big('/proxy-double'), qr/ 204 /, 'proxy auth with body read'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 SKIP: { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 eval { require FCGI; }; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 skip 'FCGI not installed', 2 if $@; |
331
241acee85fd1
Tests: skip FCGI use on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents:
323
diff
changeset
|
176 skip 'win32', 2 if $^O eq 'MSWin32'; |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 $t->run_daemon(\&fastcgi_daemon); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 $t->waitforsocket('127.0.0.1:8081'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
180 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 like(http_get('/fastcgi'), qr/ 404 /, 'fastcgi auth open'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
182 unlike(http_get('/fastcgi'), qr/INVISIBLE/, 'fastcgi auth no content'); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
183 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
184 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 ############################################################################### |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 sub http_get_auth { |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
188 my ($url, %extra) = @_; |
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
189 return http(<<EOF, %extra); |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
190 GET $url HTTP/1.0 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
191 Host: localhost |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
192 Authorization: Basic dXNlcjpzZWNyZXQ= |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
193 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
194 EOF |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
195 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
196 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
197 sub http_post { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
198 my ($url, %extra) = @_; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
199 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
200 my $p = "POST $url HTTP/1.0" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
201 "Host: localhost" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
202 "Content-Length: 10" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
203 CRLF . |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
204 "1234567890"; |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
205 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
206 return http($p, %extra); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
207 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
208 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
209 sub http_post_big { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
210 my ($url, %extra) = @_; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 my $p = "POST $url HTTP/1.0" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
213 "Host: localhost" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 "Content-Length: 10240" . CRLF . |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 CRLF . |
323
d48de852157c
Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents:
322
diff
changeset
|
216 ("1234567890" x 1024); |
322
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 return http($p, %extra); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
220 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
221 ############################################################################### |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
222 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
223 sub fastcgi_daemon { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
224 my $socket = FCGI::OpenSocket('127.0.0.1:8081', 5); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 $socket); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
228 while ($request->Accept() >= 0) { |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
229 print <<EOF; |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
230 Content-Type: text/html |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
231 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
232 INVISIBLE |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
233 EOF |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
234 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
235 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
236 FCGI::CloseSocket($socket); |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
237 } |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
238 |
67c348ba1768
Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
239 ############################################################################### |