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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 ###############################################################################