Mercurial > hg > nginx-tests
annotate referer.t @ 1817:c045fbb98e9a
Tests: revised tests for listen port ranges.
Renumbered testing ports to get more chance to execute when run in parallel.
Relaxed condition to skip tests only when the port range is out of sequence.
Adjacent port numbers out of a specified range aren't crucial to skip tests:
if not in sequence, statistically this will be caught in subsequent runs.
Unsafe tests that use wildcard addresses are moved to a separate file.
author | Sergey Kandaurov <pluknet@nginx.com> |
---|---|
date | Fri, 23 Dec 2022 19:20:50 +0400 |
parents | 882267679006 |
children |
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 { | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
39 listen 127.0.0.1:8080; |
321 | 40 server_name another; |
41 | |
42 valid_referers server_names; | |
43 return 200 "$host value $invalid_referer"; | |
44 } | |
45 | |
46 server { | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
47 listen 127.0.0.1:8080; |
321 | 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 { | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
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'); | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
120 ok(valid('/simple', 'http://www.example.org:' . port(8080) . '/uri'), |
952
e9064d691790
Tests: converted tests to run in parallel.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
397
diff
changeset
|
121 'simple port uri'); |
321 | 122 ok(!valid('/simple', 'localhost'), 'simple invalid'); |
123 ok(valid('/simple', 'https://www.example.org'), 'https'); | |
124 ok(!valid('/simple', 'example.com'), 'no scheme'); | |
125 ok(!valid('/simple'), 'no none'); | |
126 ok(valid('/none'), 'none'); | |
127 ok(!valid('/none', ''), 'none empty'); | |
128 | |
129 ok(valid('/blocked', 'www.example.org'), 'blocked'); | |
130 ok(valid('/blocked', 'www.example.com'), 'blocked 2'); | |
131 ok(valid('/blocked', 'http://su'), 'blocked short'); | |
132 ok(valid('/blocked', 'foobar'), 'blocked short no scheme'); | |
133 ok(valid('/blocked', ''), 'blocked empty'); | |
134 | |
135 ok(!valid('/simple', 'foobar'), 'small'); | |
136 ok(valid('/simple', 'http://www.example.org/' . 'a' x 256), 'long uri'); | |
137 ok(!valid('/simple', 'http://www.example.' . 'a' x 256), 'long hostname'); | |
138 ok(!valid('/wc', 'http://example.' . 'a' x 256), 'long hostname wildcard'); | |
139 | |
327
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 255), 'long hostname 255'); |
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 256), 'long hostname 256'); |
dacd55fa2cde
Tests: added edge case tests for long hostname in referer.
Sergey Kandaurov <pluknet@nginx.com>
parents:
325
diff
changeset
|
142 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
|
143 |
321 | 144 ok(valid('/uri', 'http://www.example.org/uri'), 'uri'); |
145 ok(valid('/uri', 'http://www.example.org/urii'), 'uri prefix'); | |
146 ok(!valid('/uri', 'http://www.example.org/uRi'), 'uri case'); | |
974
882267679006
Tests: simplified parallel modifications in tests.
Andrey Zelenkov <zelenkov@nginx.com>
parents:
952
diff
changeset
|
147 ok(valid('/uri', 'http://www.example.org:' . port(8080) . '/urii'), 'uri port'); |
321 | 148 ok(!valid('/uri', 'http://www.example.org/ur'), 'uri invalid len'); |
149 ok(!valid('/uri', 'http://www.example.org/urd'), 'uri invalid cmp'); | |
150 | |
151 ok(valid('/regex', 'http://www.example.org'), 'regex'); | |
152 ok(valid('/regex', 'http://www.eXample.org'), 'regex caseless'); | |
153 ok(valid('/regex', 'http://www.example.org/uri'), 'regex uri'); | |
154 ok(!valid('/regex', 'http://www.example.com'), 'regex mismatch'); | |
325
ba212f244288
Tests: more referer tests.
Sergey Kandaurov <pluknet@nginx.com>
parents:
324
diff
changeset
|
155 ok(!valid('/regex', 'http://www.eXample.net'), 'regex case mismatch'); |
321 | 156 |
157 ok(valid('/regex2', 'http://www.example.org/uri'), 'regex 2 uri'); | |
158 ok(!valid('/regex2', 'http://www.example.org'), 'regex 2 no uri'); | |
159 ok(valid('/regex2', 'http://www.example.org/uRI'), 'regex 2 uri caseless'); | |
160 ok(valid('/regex3', 'https://www.eXample.org'), 'regex https'); | |
161 | |
162 ok(valid('/sn', 'http://localhost'), 'server_names'); | |
163 ok(valid('/sn', 'http://localHost'), 'server_names caseless'); | |
164 ok(valid('/sn', 'http://localhost/uri'), 'server_names uri'); | |
165 ok(valid('/sn', 'http://foobar'), 'server_names regex'); | |
166 ok(valid('/sn', 'http://foobAr'), 'server_names regex caseless'); | |
167 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
|
168 ok(valid('/sn', 'http://anchoredre/uri'), 'server_names regex anchored'); |
321 | 169 ok(valid('/sn', 'http://foobar/uri'), 'server_names regex uri'); |
170 ok(!valid('/sn', 'localhost'), 'server_names no scheme'); | |
171 ok(!valid('/sn', 'foobar'), 'server_names regex no scheme'); | |
172 ok(valid('/sn_blocked', 'localhost'), 'server_names no scheme blocked'); | |
173 | |
174 ok(valid('/wc', 'http://www.example.org'), 'wildcard head'); | |
175 ok(valid('/wc', 'http://www.example.net'), 'wildcard tail'); | |
176 ok(valid('/wc2', 'http://www.example.net/uri'), 'wildcard uri'); | |
177 ok(valid('/wc2', 'http://www.example.net/urii'), 'wildcard uri prefix'); | |
178 ok(!valid('/wc2', 'http://www.example.net/uRI'), 'wildcard uri case'); | |
179 | |
180 ok(valid('/', 'http://another', 'another'), 'server context'); | |
181 | |
182 # server_name below valid_referers | |
183 | |
184 ok(valid('/', 'http://below', 'below'), 'server below'); | |
185 | |
186 ############################################################################### | |
187 | |
188 sub valid { | |
189 my ($uri, $referer, $host) = @_; | |
190 my $text; | |
191 | |
192 $host = 'localhost' unless defined $host; | |
193 | |
194 unless (defined $referer) { | |
195 $text = http_get($uri); | |
196 } else { | |
197 $text = http(<<EOF); | |
198 GET $uri HTTP/1.0 | |
199 Host: $host | |
200 Referer: $referer | |
201 | |
202 EOF | |
203 } | |
204 | |
205 $text =~ /value 1/ && return 0; | |
206 $text =~ /value/ && return 1; | |
207 fail("no valid_referers in $uri"); | |
208 } | |
209 | |
210 ############################################################################### |