]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - t/useragent.t
does not seem possible
[git.ikiwiki.info.git] / t / useragent.t
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4 use Test::More;
6 my $have_paranoid_agent;
7 BEGIN {
8         plan(skip_all => 'LWP not available')
9                 unless eval q{
10                         use LWP qw(); 1;
11                 };
12         use_ok("IkiWiki");
13         $have_paranoid_agent = eval q{
14                 use LWPx::ParanoidAgent qw(); 1;
15         };
16 }
18 eval { useragent(future_feature => 1); };
19 ok($@, 'future features should cause useragent to fail');
21 diag "==== No proxy ====";
22 delete $ENV{http_proxy};
23 delete $ENV{https_proxy};
24 delete $ENV{no_proxy};
25 delete $ENV{HTTPS_PROXY};
26 delete $ENV{NO_PROXY};
28 diag "---- Unspecified URL ----";
29 my $ua = useragent(for_url => undef);
30 SKIP: {
31         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
32         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
33 }
34 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
35 is($ua->proxy('http'), undef, 'No http proxy');
36 is($ua->proxy('https'), undef, 'No https proxy');
38 diag "---- Specified URL ----";
39 $ua = useragent(for_url => 'http://example.com');
40 SKIP: {
41         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
42         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
43 }
44 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
45 is($ua->proxy('http'), undef, 'No http proxy');
46 is($ua->proxy('https'), undef, 'No https proxy');
48 diag "==== Proxy for everything ====";
49 $ENV{http_proxy} = 'http://proxy:8080';
50 $ENV{https_proxy} = 'http://sproxy:8080';
51 delete $ENV{no_proxy};
52 delete $ENV{HTTPS_PROXY};
53 delete $ENV{NO_PROXY};
55 diag "---- Unspecified URL ----";
56 $ua = useragent(for_url => undef);
57 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
58 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
59 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
60 is($ua->proxy('https'), 'http://sproxy:8080', 'should use CONNECT proxy');
61 $ua = useragent(for_url => 'http://example.com');
62 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
63 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http)]);
64 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
65 # We don't care what $ua->proxy('https') is, because it won't be used
66 $ua = useragent(for_url => 'https://example.com');
67 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
68 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
69 # We don't care what $ua->proxy('http') is, because it won't be used
70 is($ua->proxy('https'), 'http://sproxy:8080', 'should use CONNECT proxy');
72 diag "==== Selective proxy ====";
73 $ENV{http_proxy} = 'http://proxy:8080';
74 $ENV{https_proxy} = 'http://sproxy:8080';
75 $ENV{no_proxy} = '*.example.net,example.com,.example.org';
76 delete $ENV{HTTPS_PROXY};
77 delete $ENV{NO_PROXY};
79 diag "---- Unspecified URL ----";
80 $ua = useragent(for_url => undef);
81 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
82 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
83 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
84 is($ua->proxy('https'), 'http://sproxy:8080', 'should use CONNECT proxy');
86 diag "---- Exact match for no_proxy ----";
87 $ua = useragent(for_url => 'http://example.com');
88 SKIP: {
89         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
90         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
91 }
92 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
93 is($ua->proxy('http'), undef);
94 is($ua->proxy('https'), undef);
96 diag "---- Subdomain of exact domain in no_proxy ----";
97 $ua = useragent(for_url => 'http://sub.example.com');
98 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
99 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http)]);
100 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
102 diag "---- example.net matches *.example.net ----";
103 $ua = useragent(for_url => 'https://example.net');
104 SKIP: {
105         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
106         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
108 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
109 is($ua->proxy('http'), undef);
110 is($ua->proxy('https'), undef);
112 diag "---- sub.example.net matches *.example.net ----";
113 $ua = useragent(for_url => 'https://sub.example.net');
114 SKIP: {
115         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
116         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
118 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
119 is($ua->proxy('http'), undef);
120 is($ua->proxy('https'), undef);
122 diag "---- badexample.net does not match *.example.net ----";
123 $ua = useragent(for_url => 'https://badexample.net');
124 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
125 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
126 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
128 diag "---- example.org matches .example.org ----";
129 $ua = useragent(for_url => 'https://example.org');
130 SKIP: {
131         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
132         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
134 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
135 is($ua->proxy('http'), undef);
136 is($ua->proxy('https'), undef);
138 diag "---- sub.example.org matches .example.org ----";
139 $ua = useragent(for_url => 'https://sub.example.org');
140 SKIP: {
141         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
142         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
144 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
145 is($ua->proxy('http'), undef);
146 is($ua->proxy('https'), undef);
148 diag "---- badexample.org does not match .example.org ----";
149 $ua = useragent(for_url => 'https://badexample.org');
150 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
151 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
152 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
154 diag "==== Selective proxy (alternate variables) ====";
155 $ENV{http_proxy} = 'http://proxy:8080';
156 delete $ENV{https_proxy};
157 $ENV{HTTPS_PROXY} = 'http://sproxy:8080';
158 delete $ENV{no_proxy};
159 $ENV{NO_PROXY} = '*.example.net,example.com,.example.org';
161 diag "---- Unspecified URL ----";
162 $ua = useragent(for_url => undef);
163 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
164 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
165 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
166 is($ua->proxy('https'), 'http://sproxy:8080', 'should use CONNECT proxy');
168 diag "---- Exact match for no_proxy ----";
169 $ua = useragent(for_url => 'http://example.com');
170 SKIP: {
171         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
172         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
174 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
175 is($ua->proxy('http'), undef);
176 is($ua->proxy('https'), undef);
178 diag "---- Subdomain of exact domain in no_proxy ----";
179 $ua = useragent(for_url => 'http://sub.example.com');
180 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
181 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http)]);
182 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
184 diag "---- example.net matches *.example.net ----";
185 $ua = useragent(for_url => 'https://example.net');
186 SKIP: {
187         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
188         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
190 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
191 is($ua->proxy('http'), undef);
192 is($ua->proxy('https'), undef);
194 diag "---- sub.example.net matches *.example.net ----";
195 $ua = useragent(for_url => 'https://sub.example.net');
196 SKIP: {
197         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
198         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
200 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
201 is($ua->proxy('http'), undef);
202 is($ua->proxy('https'), undef);
204 diag "---- badexample.net does not match *.example.net ----";
205 $ua = useragent(for_url => 'https://badexample.net');
206 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
207 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
208 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
210 diag "---- example.org matches .example.org ----";
211 $ua = useragent(for_url => 'https://example.org');
212 SKIP: {
213         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
214         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
216 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
217 is($ua->proxy('http'), undef);
218 is($ua->proxy('https'), undef);
220 diag "---- sub.example.org matches .example.org ----";
221 $ua = useragent(for_url => 'https://sub.example.org');
222 SKIP: {
223         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
224         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
226 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
227 is($ua->proxy('http'), undef);
228 is($ua->proxy('https'), undef);
230 diag "---- badexample.org does not match .example.org ----";
231 $ua = useragent(for_url => 'https://badexample.org');
232 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
233 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
234 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
236 diag "==== Selective proxy (many variables) ====";
237 $ENV{http_proxy} = 'http://proxy:8080';
238 $ENV{https_proxy} = 'http://sproxy:8080';
239 # This one should be ignored in favour of https_proxy
240 $ENV{HTTPS_PROXY} = 'http://not.preferred.proxy:3128';
241 # These two should be merged
242 $ENV{no_proxy} = '*.example.net,example.com';
243 $ENV{NO_PROXY} = '.example.org';
245 diag "---- Unspecified URL ----";
246 $ua = useragent(for_url => undef);
247 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
248 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
249 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
250 is($ua->proxy('https'), 'http://sproxy:8080', 'should use CONNECT proxy');
252 diag "---- Exact match for no_proxy ----";
253 $ua = useragent(for_url => 'http://example.com');
254 SKIP: {
255         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
256         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
258 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
259 is($ua->proxy('http'), undef);
260 is($ua->proxy('https'), undef);
262 diag "---- Subdomain of exact domain in no_proxy ----";
263 $ua = useragent(for_url => 'http://sub.example.com');
264 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
265 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http)]);
266 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
268 diag "---- example.net matches *.example.net ----";
269 $ua = useragent(for_url => 'https://example.net');
270 SKIP: {
271         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
272         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
274 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
275 is($ua->proxy('http'), undef);
276 is($ua->proxy('https'), undef);
278 diag "---- sub.example.net matches *.example.net ----";
279 $ua = useragent(for_url => 'https://sub.example.net');
280 SKIP: {
281         skip 'paranoid agent not available', 1 unless $have_paranoid_agent;
282         ok($ua->isa('LWPx::ParanoidAgent'), 'uses ParanoidAgent if possible');
284 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
285 is($ua->proxy('http'), undef);
286 is($ua->proxy('https'), undef);
288 diag "---- badexample.net does not match *.example.net ----";
289 $ua = useragent(for_url => 'https://badexample.net');
290 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
291 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(https)]);
292 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
294 diag "==== One but not the other ====\n";
295 $ENV{http_proxy} = 'http://proxy:8080';
296 delete $ENV{https_proxy};
297 delete $ENV{HTTPS_PROXY};
298 delete $ENV{no_proxy};
299 delete $ENV{NO_PROXY};
300 $ua = useragent(for_url => undef);
301 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
302 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
303 is($ua->proxy('http'), 'http://proxy:8080', 'should use proxy');
304 is($ua->proxy('https'), 'http://proxy:8080', 'should use proxy');
306 delete $ENV{http_proxy};
307 $ENV{https_proxy} = 'http://sproxy:8080';
308 delete $ENV{HTTPS_PROXY};
309 delete $ENV{no_proxy};
310 delete $ENV{NO_PROXY};
311 $ua = useragent(for_url => undef);
312 ok(! $ua->isa('LWPx::ParanoidAgent'), 'should use proxy instead of ParanoidAgent');
313 is_deeply([sort @{$ua->protocols_allowed}], [sort qw(http https)]);
314 is($ua->proxy('http'), 'http://sproxy:8080', 'should use proxy');
315 is($ua->proxy('https'), 'http://sproxy:8080', 'should use proxy');
317 done_testing;