annotate t/auth-request-set.t @ 10:2b95417a1715

Auth request: fix body handling again. Setting r->discard_body is wrong way to go as it causes lingering timer to be armed on subrequest finalization. Create fake body instead. This also allows to protect real body file from being closed in case it was already read. Though it doesn't matter now as we set r->header_only and relevant code in ngx_http_upstream_send_response() isn't reached.
author Maxim Dounin <mdounin@mdounin.ru>
date Wed, 24 Mar 2010 07:23:22 +0300
parents b77577b9c005
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
1 #!/usr/bin/perl
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
2
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
4
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
5 # Tests for auth request module, auth_request_set.
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
6
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
7 ###############################################################################
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
8
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
9 use warnings;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
10 use strict;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
11
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
12 use Socket qw/ CRLF /;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
13
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
14 use Test::More;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
15 use Test::Nginx;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
16
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
17 ###############################################################################
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 select STDERR; $| = 1;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 select STDOUT; $| = 1;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 my $t = Test::Nginx->new()->has(qw/http rewrite/)
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23 ->plan(6);
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
24
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 $t->write_file_expand('nginx.conf', <<'EOF');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
26
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
27 %%TEST_GLOBALS%%
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29 master_process off;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 daemon off;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32 events {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
34
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
35 http {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
36 %%TEST_GLOBALS_HTTP%%
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
37
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
38 server {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
39 listen 127.0.0.1:8080;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
40 server_name localhost;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
41
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
42 location = /t1.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
43 auth_request /auth;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
44 auth_request_set $username $upstream_http_x_username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
45 add_header X-Set-Username $username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
46 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
47
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 location = /t2.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
49 auth_request /auth;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 auth_request_set $username $upstream_http_x_username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
51 error_page 404 = /fallback;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
53 location = /fallback {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54 add_header X-Set-Username $username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
55 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
56 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
57
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 location = /t3.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
59 auth_request /auth;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
60 auth_request_set $username $upstream_http_x_username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61 error_page 404 = @fallback;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 location @fallback {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
64 add_header X-Set-Username $username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
65 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
66 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 location = /t4.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 auth_request /auth;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 auth_request_set $username $upstream_http_x_username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71 error_page 404 = /t4-fallback.html;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 location = /t4-fallback.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74 auth_request /auth2;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
75 auth_request_set $username $upstream_http_x_username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
76 add_header X-Set-Username $username;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
77 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79 location = /t5.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 auth_request /auth;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 auth_request_set $args "setargs";
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
82 proxy_pass http://127.0.0.1:8081/t5.html;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
83 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85 location = /t6.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 add_header X-Unset-Username "x${username}x";
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90 location = /auth {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 proxy_pass http://127.0.0.1:8081;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 location = /auth2 {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 proxy_pass http://127.0.0.1:8081;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 server {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 listen 127.0.0.1:8081;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 server_name localhost;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 location = /auth {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 add_header X-Username "username";
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 location = /auth2 {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 add_header X-Username "username2";
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
111
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 location = /t5.html {
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
113 add_header X-Args $args;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114 return 204;
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
117 }
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
118
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 EOF
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 $t->write_file('t1.html', '');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 $t->write_file('t4-fallback.html', '');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 $t->run();
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 ###############################################################################
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 like(http_get('/t1.html'), qr/X-Set-Username: username/, 'set normal');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128 like(http_get('/t2.html'), qr/X-Set-Username: username/, 'set after redirect');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
129 like(http_get('/t3.html'), qr/X-Set-Username: username/,
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
130 'set after named location');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
131 like(http_get('/t4.html'), qr/X-Set-Username: username2/,
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
132 'set on second auth');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
133
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
134 # there are two variables with set_handler: $args and $limit_rate
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
135 # we do test $args as it's a bit more simple thing to do
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
136
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
137 like(http_get('/t5.html'), qr/X-Args: setargs/, 'variable with set_handler');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
138
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
139 # check that using variable without setting it returns empty content
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
140
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
141 like(http_get('/t6.html'), qr/X-Unset-Username: xx/, 'unset variable');
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
142
b77577b9c005 Auth request: auth_request_set tests.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
143 ###############################################################################