annotate auth_request.t @ 605:a77f19282f63

Tests: switched to using headers to test variables in userid.t. Tests might behave incorrectly due to the delay in writing to log. Made tests stricter for different endianness. While here, improved style.
author Andrey Zelenkov <zelenkov@nginx.com>
date Thu, 11 Jun 2015 20:56:19 +0300
parents fa71c725d40a
children e9064d691790
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()
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
27 ->has(qw/http rewrite proxy cache fastcgi auth_basic auth_request/)
580
fa71c725d40a Tests: added missing shmem prerequisites.
Sergey Kandaurov <pluknet@nginx.com>
parents: 568
diff changeset
28 ->has(qw/shmem/)
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
29 ->plan(19);
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 $t->write_file_expand('nginx.conf', <<'EOF');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 %%TEST_GLOBALS%%
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
35 daemon off;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37 events {
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 http {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41 %%TEST_GLOBALS_HTTP%%
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
43 proxy_cache_path %%TESTDIR%%/cache levels=1:2
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
44 keys_zone=NAME:1m;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
45
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 server {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 listen 127.0.0.1:8080;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 server_name localhost;
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 / {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 return 444;
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 location /open {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 auth_request /auth-open;
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 = /auth-open {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 return 204;
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 location /open-static {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 auth_request /auth-open-static;
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 = /auth-open-static {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 # nothing, use static file
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 location /unauthorized {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 auth_request /auth-unauthorized;
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 = /auth-unauthorized {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 return 401;
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 location /forbidden {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 auth_request /auth-forbidden;
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 = /auth-forbidden {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 return 403;
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 location /error {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 auth_request /auth-error;
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 = /auth-error {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 return 404;
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 /off {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 auth_request off;
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
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 location /proxy {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 auth_request /auth-proxy;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 location = /auth-proxy {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 proxy_pass http://127.0.0.1:8080/auth-basic;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 proxy_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 proxy_set_header Content-Length "";
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 location = /auth-basic {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 auth_basic "restricted";
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 auth_basic_user_file %%TESTDIR%%/htpasswd;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106 location = /proxy-double {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 proxy_pass http://127.0.0.1:8080/auth-error;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 proxy_intercept_errors on;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 error_page 404 = /proxy-double-fallback;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 client_body_buffer_size 4k;
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 = /proxy-double-fallback {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 auth_request /auth-proxy-double;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 proxy_pass http://127.0.0.1:8080/auth-open;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 location = /auth-proxy-double {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 proxy_pass http://127.0.0.1:8080/auth-open;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 proxy_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 proxy_set_header Content-Length "";
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
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
122 location /proxy-cache {
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
123 auth_request /auth-proxy-cache;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
124 }
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
125 location = /auth-proxy-cache {
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
126 proxy_pass http://127.0.0.1:8080/auth-basic;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
127 proxy_pass_request_body off;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
128 proxy_set_header Content-Length "";
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
129 proxy_cache NAME;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
130 proxy_cache_valid 1m;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
131 }
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
132
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 location /fastcgi {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 auth_request /auth-fastcgi;
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 location = /auth-fastcgi {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 fastcgi_pass 127.0.0.1:8081;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 fastcgi_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 }
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 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
144
333
e7647a966212 Tests: use {PLAIN} passwords on win32 to unbreak auth_request.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 331
diff changeset
145 $t->write_file('htpasswd', 'user:{PLAIN}secret' . "\n");
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 $t->write_file('auth-basic', 'INVISIBLE');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 $t->write_file('auth-open-static', 'INVISIBLE');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
148 $t->run();
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 ###############################################################################
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
151
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 like(http_get('/open'), qr/ 404 /, 'auth open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 like(http_get('/unauthorized'), qr/ 401 /, 'auth unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 like(http_get('/forbidden'), qr/ 403 /, 'auth forbidden');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 like(http_get('/error'), qr/ 500 /, 'auth error');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 like(http_get('/off'), qr/ 404 /, 'auth off');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
157
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 like(http_post('/open'), qr/ 404 /, 'auth post open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159 like(http_post('/unauthorized'), qr/ 401 /, 'auth post unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 like(http_get('/open-static'), qr/ 404 /, 'auth open static');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
162 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
163
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 like(http_get('/proxy'), qr/ 401 /, 'proxy auth unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 like(http_get('/proxy'), qr/WWW-Authenticate: Basic realm="restricted"/,
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 'proxy auth has www-authenticate');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 like(http_get_auth('/proxy'), qr/ 404 /, 'proxy auth pass');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 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
169
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170 like(http_post('/proxy'), qr/ 401 /, 'proxy auth post');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
171
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
172 like(http_get_auth('/proxy-cache'), qr/ 404 /, 'proxy auth with cache');
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
173 like(http_get('/proxy-cache'), qr/ 404 /, 'proxy auth cached');
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
174
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 # Consider the following scenario:
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 #
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 # 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
178 # 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
179 # in ngx_http_upstream_send_response()
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 # 3. oops: fallback has no body
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 #
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182 # 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
183 #
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 # 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
185 # 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
186 # 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
187 # 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
188
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189 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
190
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 SKIP: {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 eval { require FCGI; };
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
193 skip 'FCGI not installed', 2 if $@;
331
241acee85fd1 Tests: skip FCGI use on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents: 323
diff changeset
194 skip 'win32', 2 if $^O eq 'MSWin32';
322
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 $t->run_daemon(\&fastcgi_daemon);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197 $t->waitforsocket('127.0.0.1:8081');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 like(http_get('/fastcgi'), qr/ 404 /, 'fastcgi auth open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 unlike(http_get('/fastcgi'), qr/INVISIBLE/, 'fastcgi auth no content');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
201 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
202
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
203 ###############################################################################
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
204
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
205 sub http_get_auth {
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
206 my ($url, %extra) = @_;
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
207 return http(<<EOF, %extra);
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 GET $url HTTP/1.0
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 Host: localhost
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210 Authorization: Basic dXNlcjpzZWNyZXQ=
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 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
213 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
214
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 sub http_post {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216 my ($url, %extra) = @_;
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 my $p = "POST $url HTTP/1.0" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 "Host: localhost" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 "Content-Length: 10" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
221 CRLF .
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
222 "1234567890";
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
223
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 return http($p, %extra);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
225 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
226
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 sub http_post_big {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228 my ($url, %extra) = @_;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 my $p = "POST $url HTTP/1.0" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 "Host: localhost" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 "Content-Length: 10240" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
233 CRLF .
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
234 ("1234567890" x 1024);
322
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 return http($p, %extra);
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 ###############################################################################
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
240
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
241 sub fastcgi_daemon {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $socket = FCGI::OpenSocket('127.0.0.1:8081', 5);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV,
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244 $socket);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 while ($request->Accept() >= 0) {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 print <<EOF;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248 Content-Type: text/html
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 INVISIBLE
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
252 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
253
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 FCGI::CloseSocket($socket);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
255 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
256
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 ###############################################################################