annotate auth_request.t @ 1427:eb1d883305ea

Tests: avoid edge cases in upstream random two test. Unavailable servers contribute to the number of attempts, if selected, before the balancer would fall back to the default round-robin method. This means that it's quite possible to get server with more connections. To facilitate with selecting two alive servers, down server was removed from the upstream configuration at the cost of slightly worse coverage.
author Sergey Kandaurov <pluknet@nginx.com>
date Thu, 10 Jan 2019 17:42:34 +0300
parents 856ab7671404
children 83ec64929612
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/)
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
28 ->plan(19);
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
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
42 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
43 keys_zone=NAME:1m;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
44
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 server {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
46 listen 127.0.0.1:8080;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47 server_name localhost;
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 location / {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 return 444;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 }
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 /open {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 auth_request /auth-open;
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 location = /auth-open {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57 return 204;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 }
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 /open-static {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 auth_request /auth-open-static;
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 location = /auth-open-static {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 # nothing, use static file
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 }
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 /unauthorized {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 auth_request /auth-unauthorized;
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 location = /auth-unauthorized {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 return 401;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 }
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 /forbidden {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 auth_request /auth-forbidden;
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 location = /auth-forbidden {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 return 403;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 }
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 /error {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 auth_request /auth-error;
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 location = /auth-error {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 return 404;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 }
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 location /off {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89 auth_request off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 }
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 /proxy {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 auth_request /auth-proxy;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 location = /auth-proxy {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
96 proxy_pass http://127.0.0.1:8080/auth-basic;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 proxy_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 proxy_set_header Content-Length "";
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 location = /auth-basic {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 auth_basic "restricted";
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 auth_basic_user_file %%TESTDIR%%/htpasswd;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 }
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 location = /proxy-double {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
106 proxy_pass http://127.0.0.1:8080/auth-error;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 proxy_intercept_errors on;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 error_page 404 = /proxy-double-fallback;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 client_body_buffer_size 4k;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111 location = /proxy-double-fallback {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 auth_request /auth-proxy-double;
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
113 proxy_pass http://127.0.0.1:8080/auth-open;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 location = /auth-proxy-double {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
116 proxy_pass http://127.0.0.1:8080/auth-open;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 proxy_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118 proxy_set_header Content-Length "";
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 }
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
121 location /proxy-cache {
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
122 auth_request /auth-proxy-cache;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
123 }
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
124 location = /auth-proxy-cache {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
125 proxy_pass http://127.0.0.1:8080/auth-basic;
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
126 proxy_pass_request_body off;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
127 proxy_set_header Content-Length "";
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
128 proxy_cache NAME;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
129 proxy_cache_valid 1m;
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
130 }
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
131
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 location /fastcgi {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133 auth_request /auth-fastcgi;
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 location = /auth-fastcgi {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
136 fastcgi_pass 127.0.0.1:8081;
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 fastcgi_pass_request_body off;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138 }
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 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143
333
e7647a966212 Tests: use {PLAIN} passwords on win32 to unbreak auth_request.t.
Maxim Dounin <mdounin@mdounin.ru>
parents: 331
diff changeset
144 $t->write_file('htpasswd', 'user:{PLAIN}secret' . "\n");
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 $t->write_file('auth-basic', 'INVISIBLE');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 $t->write_file('auth-open-static', 'INVISIBLE');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
147 $t->run();
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 ###############################################################################
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 like(http_get('/open'), qr/ 404 /, 'auth open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 like(http_get('/unauthorized'), qr/ 401 /, 'auth unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 like(http_get('/forbidden'), qr/ 403 /, 'auth forbidden');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 like(http_get('/error'), qr/ 500 /, 'auth error');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155 like(http_get('/off'), qr/ 404 /, 'auth off');
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 like(http_post('/open'), qr/ 404 /, 'auth post open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
158 like(http_post('/unauthorized'), qr/ 401 /, 'auth post unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
159
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 like(http_get('/open-static'), qr/ 404 /, 'auth open static');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
161 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
162
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
163 like(http_get('/proxy'), qr/ 401 /, 'proxy auth unauthorized');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 like(http_get('/proxy'), qr/WWW-Authenticate: Basic realm="restricted"/,
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 'proxy auth has www-authenticate');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166 like(http_get_auth('/proxy'), qr/ 404 /, 'proxy auth pass');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 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
168
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 like(http_post('/proxy'), qr/ 401 /, 'proxy auth post');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
508
4ac60aad723e Tests: test for auth request with proxy cache.
Sergey Kandaurov <pluknet@nginx.com>
parents: 333
diff changeset
171 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
172 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
173
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 # Consider the following scenario:
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
175 #
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
176 # 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
177 # 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
178 # in ngx_http_upstream_send_response()
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179 # 3. oops: fallback has no body
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 # 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
182 #
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183 # 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
184 # 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
185 # 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
186 # 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
187
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
188 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
189
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
190 SKIP: {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
191 eval { require FCGI; };
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
192 skip 'FCGI not installed', 2 if $@;
331
241acee85fd1 Tests: skip FCGI use on win32.
Maxim Dounin <mdounin@mdounin.ru>
parents: 323
diff changeset
193 skip 'win32', 2 if $^O eq 'MSWin32';
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 $t->run_daemon(\&fastcgi_daemon);
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
196 $t->waitforsocket('127.0.0.1:' . port(8081));
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
197
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
198 like(http_get('/fastcgi'), qr/ 404 /, 'fastcgi auth open');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
199 unlike(http_get('/fastcgi'), qr/INVISIBLE/, 'fastcgi auth no content');
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
200 }
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 sub http_get_auth {
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
205 my ($url, %extra) = @_;
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
206 return http(<<EOF, %extra);
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
207 GET $url HTTP/1.0
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
208 Host: localhost
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
209 Authorization: Basic dXNlcjpzZWNyZXQ=
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
210
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
211 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
212 }
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 sub http_post {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
215 my ($url, %extra) = @_;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
216
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
217 my $p = "POST $url HTTP/1.0" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
218 "Host: localhost" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
219 "Content-Length: 10" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
220 CRLF .
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
221 "1234567890";
322
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 return http($p, %extra);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
224 }
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 sub http_post_big {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
227 my ($url, %extra) = @_;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
228
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
229 my $p = "POST $url HTTP/1.0" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
230 "Host: localhost" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
231 "Content-Length: 10240" . CRLF .
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
232 CRLF .
323
d48de852157c Tests: auth_request assorted fixes.
Sergey Kandaurov <pluknet@nginx.com>
parents: 322
diff changeset
233 ("1234567890" x 1024);
322
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 return http($p, %extra);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
236 }
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 sub fastcgi_daemon {
974
882267679006 Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents: 952
diff changeset
241 my $socket = FCGI::OpenSocket('127.0.0.1:' . port(8081), 5);
322
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
242 my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV,
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
243 $socket);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
244
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
245 while ($request->Accept() >= 0) {
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
246 print <<EOF;
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
247 Content-Type: text/html
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
248
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
249 INVISIBLE
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
250 EOF
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
251 }
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 FCGI::CloseSocket($socket);
67c348ba1768 Tests: auth request tests import.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
254 }
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 ###############################################################################