Mercurial > hg > nginx-tests
annotate referer.t @ 570:f7bc1f74970a
Tests: avoid send errors in syslog tests with mail error_log.
Use a separate mail server block for syslog parsing tests to make sure
that syslog messages are always read by the receiver on the remote side.
Otherwise, syslog message might not be sent due to a pending socket error.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Thu, 07 May 2015 14:28:44 +0300 |
parents | 847ea345becb |
children | e9064d691790 |
rev | line source |
---|---|
321 | 1 #!/usr/bin/perl |
2 | |
3 # (C) Sergey Kandaurov | |
4 | |
5 # Tests for referer module. | |
6 | |
7 ############################################################################### | |
8 | |
9 use warnings; | |
10 use strict; | |
11 | |
12 use Test::More; | |
13 | |
14 BEGIN { use FindBin; chdir($FindBin::Bin); } | |
15 | |
16 use lib 'lib'; | |
17 use Test::Nginx; | |
18 | |
19 ############################################################################### | |
20 | |
21 select STDERR; $| = 1; | |
22 select STDOUT; $| = 1; | |
23 | |
327
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
24 my $t = Test::Nginx->new()->has(qw/http referer rewrite/)->plan(54); |
321 | 25 |
26 $t->write_file_expand('nginx.conf', <<'EOF'); | |
27 | |
28 %%TEST_GLOBALS%% | |
29 | |
30 daemon off; | |
31 | |
32 events { | |
33 } | |
34 | |
35 http { | |
36 %%TEST_GLOBALS_HTTP%% | |
37 | |
38 server { | |
39 listen 127.0.0.1:8080; | |
40 server_name another; | |
41 | |
42 valid_referers server_names; | |
43 return 200 "$host value $invalid_referer"; | |
44 } | |
45 | |
46 server { | |
47 listen 127.0.0.1:8080; | |
48 server_name _; | |
49 | |
50 location / { | |
51 valid_referers server_names; | |
52 return 200 "$host value $invalid_referer"; | |
53 } | |
54 server_name below; | |
55 } | |
56 | |
57 server { | |
58 listen 127.0.0.1:8080; | |
325
ba212f244288
Tests: more referer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
324
diff
changeset
|
59 server_name localhost ~bar ~^anchoredre$; |
321 | 60 |
61 location /blocked { | |
62 valid_referers blocked www.example.org; | |
63 return 200 "value $invalid_referer"; | |
64 } | |
65 location /none { | |
66 valid_referers none www.example.org; | |
67 return 200 "value $invalid_referer"; | |
68 } | |
69 location /simple { | |
70 valid_referers www.example.org; | |
71 return 200 "value $invalid_referer"; | |
72 } | |
73 location /regex { | |
325
ba212f244288
Tests: more referer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
324
diff
changeset
|
74 valid_referers ~example.org ~(?-i)example.net; |
321 | 75 return 200 "value $invalid_referer"; |
76 } | |
77 location /regex2 { | |
78 valid_referers ~example.org/uri; | |
79 return 200 "value $invalid_referer"; | |
80 } | |
81 location /regex3 { | |
82 valid_referers ~example.org$; | |
83 return 200 "value $invalid_referer"; | |
84 } | |
85 location /uri { | |
86 valid_referers www.example.org/uri; | |
87 return 200 "value $invalid_referer"; | |
88 } | |
89 location /sn { | |
90 valid_referers server_names; | |
91 return 200 "value $invalid_referer"; | |
92 } | |
93 location /sn_blocked { | |
94 valid_referers blocked server_names; | |
95 return 200 "value $invalid_referer"; | |
96 } | |
97 location /wc { | |
98 valid_referers *.example.com *.example.org www.example.* example.*; | |
99 return 200 "value $invalid_referer"; | |
100 } | |
327
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
101 location /long { |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
102 valid_referers ~.*; |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
103 return 200 "value $invalid_referer"; |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
104 } |
321 | 105 location /wc2 { |
106 valid_referers www.example.*/uri; | |
107 return 200 "value $invalid_referer"; | |
108 } | |
109 } | |
110 } | |
111 | |
112 EOF | |
113 | |
114 $t->run(); | |
115 | |
116 ############################################################################### | |
117 | |
118 ok(valid('/simple', 'http://www.example.org'), 'simple'); | |
119 ok(valid('/simple', 'http://www.example.org/uri'), 'simple uri'); | |
120 ok(valid('/simple', 'http://www.example.org:8080/uri'), 'simple port uri'); | |
121 ok(!valid('/simple', 'localhost'), 'simple invalid'); | |
122 ok(valid('/simple', 'https://www.example.org'), 'https'); | |
123 ok(!valid('/simple', 'example.com'), 'no scheme'); | |
124 ok(!valid('/simple'), 'no none'); | |
125 ok(valid('/none'), 'none'); | |
126 ok(!valid('/none', ''), 'none empty'); | |
127 | |
128 ok(valid('/blocked', 'www.example.org'), 'blocked'); | |
129 ok(valid('/blocked', 'www.example.com'), 'blocked 2'); | |
130 ok(valid('/blocked', 'http://su'), 'blocked short'); | |
131 ok(valid('/blocked', 'foobar'), 'blocked short no scheme'); | |
132 ok(valid('/blocked', ''), 'blocked empty'); | |
133 | |
134 ok(!valid('/simple', 'foobar'), 'small'); | |
135 ok(valid('/simple', 'http://www.example.org/' . 'a' x 256), 'long uri'); | |
136 ok(!valid('/simple', 'http://www.example.' . 'a' x 256), 'long hostname'); | |
137 ok(!valid('/wc', 'http://example.' . 'a' x 256), 'long hostname wildcard'); | |
138 | |
327
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
139 ok(valid('/long', 'http://' . 'a' x 255), 'long hostname 255'); |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
140 ok(valid('/long', 'http://' . 'a' x 256), 'long hostname 256'); |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
141 ok(!valid('/long', 'http://' . 'a' x 257), 'long hostname 257'); |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
142 |
321 | 143 ok(valid('/uri', 'http://www.example.org/uri'), 'uri'); |
144 ok(valid('/uri', 'http://www.example.org/urii'), 'uri prefix'); | |
145 ok(!valid('/uri', 'http://www.example.org/uRi'), 'uri case'); | |
146 ok(valid('/uri', 'http://www.example.org:8080/urii'), 'uri port'); | |
147 ok(!valid('/uri', 'http://www.example.org/ur'), 'uri invalid len'); | |
148 ok(!valid('/uri', 'http://www.example.org/urd'), 'uri invalid cmp'); | |
149 | |
150 ok(valid('/regex', 'http://www.example.org'), 'regex'); | |
151 ok(valid('/regex', 'http://www.eXample.org'), 'regex caseless'); | |
152 ok(valid('/regex', 'http://www.example.org/uri'), 'regex uri'); | |
153 ok(!valid('/regex', 'http://www.example.com'), 'regex mismatch'); | |
325
ba212f244288
Tests: more referer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
324
diff
changeset
|
154 ok(!valid('/regex', 'http://www.eXample.net'), 'regex case mismatch'); |
321 | 155 |
156 ok(valid('/regex2', 'http://www.example.org/uri'), 'regex 2 uri'); | |
157 ok(!valid('/regex2', 'http://www.example.org'), 'regex 2 no uri'); | |
158 ok(valid('/regex2', 'http://www.example.org/uRI'), 'regex 2 uri caseless'); | |
159 ok(valid('/regex3', 'https://www.eXample.org'), 'regex https'); | |
160 | |
161 ok(valid('/sn', 'http://localhost'), 'server_names'); | |
162 ok(valid('/sn', 'http://localHost'), 'server_names caseless'); | |
163 ok(valid('/sn', 'http://localhost/uri'), 'server_names uri'); | |
164 ok(valid('/sn', 'http://foobar'), 'server_names regex'); | |
165 ok(valid('/sn', 'http://foobAr'), 'server_names regex caseless'); | |
166 ok(valid('/sn', 'http://foobAr/uri'), 'server_names regex caseless uri'); | |
325
ba212f244288
Tests: more referer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
324
diff
changeset
|
167 ok(valid('/sn', 'http://anchoredre/uri'), 'server_names regex anchored'); |
321 | 168 ok(valid('/sn', 'http://foobar/uri'), 'server_names regex uri'); |
169 ok(!valid('/sn', 'localhost'), 'server_names no scheme'); | |
170 ok(!valid('/sn', 'foobar'), 'server_names regex no scheme'); | |
171 ok(valid('/sn_blocked', 'localhost'), 'server_names no scheme blocked'); | |
172 | |
173 ok(valid('/wc', 'http://www.example.org'), 'wildcard head'); | |
174 ok(valid('/wc', 'http://www.example.net'), 'wildcard tail'); | |
175 ok(valid('/wc2', 'http://www.example.net/uri'), 'wildcard uri'); | |
176 ok(valid('/wc2', 'http://www.example.net/urii'), 'wildcard uri prefix'); | |
177 ok(!valid('/wc2', 'http://www.example.net/uRI'), 'wildcard uri case'); | |
178 | |
179 ok(valid('/', 'http://another', 'another'), 'server context'); | |
180 | |
181 # server_name below valid_referers | |
182 | |
183 ok(valid('/', 'http://below', 'below'), 'server below'); | |
184 | |
185 ############################################################################### | |
186 | |
187 sub valid { | |
188 my ($uri, $referer, $host) = @_; | |
189 my $text; | |
190 | |
191 $host = 'localhost' unless defined $host; | |
192 | |
193 unless (defined $referer) { | |
194 $text = http_get($uri); | |
195 } else { | |
196 $text = http(<<EOF); | |
197 GET $uri HTTP/1.0 | |
198 Host: $host | |
199 Referer: $referer | |
200 | |
201 EOF | |
202 } | |
203 | |
204 $text =~ /value 1/ && return 0; | |
205 $text =~ /value/ && return 1; | |
206 fail("no valid_referers in $uri"); | |
207 } | |
208 | |
209 ############################################################################### |