1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.javascript.proxyautoconfig;
16
17 import java.net.MalformedURLException;
18 import java.net.URL;
19 import java.text.DateFormat;
20 import java.text.SimpleDateFormat;
21 import java.util.Calendar;
22 import java.util.Locale;
23
24 import org.htmlunit.BrowserVersion;
25 import org.htmlunit.SimpleWebTestCase;
26 import org.htmlunit.corejs.javascript.Undefined;
27 import org.htmlunit.javascript.JavaScriptEngine;
28 import org.junit.Test;
29
30
31
32
33
34
35
36 public class ProxyAutoConfigTest extends SimpleWebTestCase {
37
38
39
40
41 @Test
42 public void shExpMatch() {
43 assertTrue(ProxyAutoConfig.shExpMatch("http://home.netscape.com/people/ari/index.html", "*/ari/*"));
44 assertFalse(ProxyAutoConfig.shExpMatch("http://home.netscape.com/people/montulli/index.html", "*/ari/*"));
45 }
46
47
48
49
50 @Test
51 public void weekdayRange() {
52 final Calendar calendar = Calendar.getInstance(Locale.ROOT);
53 final DateFormat dateFormat = new SimpleDateFormat("EEE", Locale.ROOT);
54 final String today = dateFormat.format(calendar.getTime()).toUpperCase(Locale.ROOT);
55 calendar.add(Calendar.DAY_OF_MONTH, 1);
56 final String tomorrow = dateFormat.format(calendar.getTime()).toUpperCase(Locale.ROOT);
57 calendar.add(Calendar.DAY_OF_MONTH, -2);
58 final String yesterday = dateFormat.format(calendar.getTime()).toUpperCase(Locale.ROOT);
59 assertTrue(ProxyAutoConfig.weekdayRange(today, Undefined.instance, Undefined.instance));
60 assertTrue(ProxyAutoConfig.weekdayRange(today, tomorrow, Undefined.instance));
61 assertTrue(ProxyAutoConfig.weekdayRange(yesterday, today, Undefined.instance));
62 assertTrue(ProxyAutoConfig.weekdayRange(yesterday, tomorrow, Undefined.instance));
63 assertFalse(ProxyAutoConfig.weekdayRange(tomorrow, yesterday, Undefined.instance));
64 }
65
66
67
68
69 @Test
70 public void dateRange() {
71 final Object undefined = Undefined.instance;
72 final Calendar calendar = Calendar.getInstance(Locale.ROOT);
73 final int today = calendar.get(Calendar.DAY_OF_MONTH);
74 calendar.add(Calendar.DAY_OF_MONTH, 1);
75 final int tomorrow = calendar.get(Calendar.DAY_OF_MONTH);
76 calendar.add(Calendar.DAY_OF_MONTH, -2);
77 final int yesterday = calendar.get(Calendar.DAY_OF_MONTH);
78 assertTrue(ProxyAutoConfig.dateRange(String.valueOf(today),
79 undefined, undefined, undefined, undefined, undefined, undefined));
80 assertFalse(ProxyAutoConfig.dateRange(String.valueOf(yesterday),
81 undefined, undefined, undefined, undefined, undefined, undefined));
82 assertFalse(ProxyAutoConfig.dateRange(String.valueOf(tomorrow),
83 undefined, undefined, undefined, undefined, undefined, undefined));
84 }
85
86
87
88
89 @Test
90 public void timeRange() {
91 final Object undefined = Undefined.instance;
92 final Calendar calendar = Calendar.getInstance(Locale.ROOT);
93 final int now = calendar.get(Calendar.HOUR_OF_DAY);
94 calendar.add(Calendar.HOUR_OF_DAY, 2);
95 final int after = calendar.get(Calendar.HOUR_OF_DAY);
96 calendar.add(Calendar.HOUR_OF_DAY, -4);
97 final int before = calendar.get(Calendar.HOUR_OF_DAY);
98 assertTrue(ProxyAutoConfig.timeRange(String.valueOf(now),
99 undefined, undefined, undefined, undefined, undefined, undefined));
100 assertFalse(ProxyAutoConfig.timeRange(String.valueOf(before),
101 undefined, undefined, undefined, undefined, undefined, undefined));
102 assertFalse(ProxyAutoConfig.timeRange(String.valueOf(after),
103 undefined, undefined, undefined, undefined, undefined, undefined));
104 }
105
106
107
108
109 @Test
110 public void simple() {
111 final String content = "function FindProxyForURL(url, host) { "
112 + "return \"PROXY proxy.example.com:8080; DIRECT\"; }";
113 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME, content, URL_FIRST);
114 assertEquals("PROXY proxy.example.com:8080; DIRECT", value);
115 }
116
117
118
119
120 @Test
121 public void someConditions() throws MalformedURLException {
122 final String content = "function FindProxyForURL(url, host) {\n"
123 + " if (shExpMatch(host,\"*.example.com\")) {\n"
124 + " return \"DIRECT\";\n"
125 + " }\n"
126
127 + " return \"PROXY proxy.example.com:8000; DIRECT\";\n"
128 + "}";
129
130 String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
131 content, new URL("ftp://www.example.com"));
132 assertEquals("DIRECT", value);
133
134 value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME, content, new URL("ftp://example.com"));
135 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
136 }
137
138
139
140
141 @Test
142 public void bindings() {
143 final String content = "ProxyConfig.bindings.com = 'my_com';\n"
144 + "ProxyConfig.bindings.org = 'my_org';\n"
145 + "ProxyConfig.bindings.net = 'my_net';\n"
146 + "ProxyConfig.bindings.edu = 'my_edu';\n"
147 + "ProxyConfig.bindings.gov = 'my_gov';\n"
148 + "function FindProxyForURL(url, host) {\n"
149 + " var returnValue = '';\n"
150 + " for (var x in ProxyConfig.bindings) {\n"
151 + " returnValue += x + ' ';\n"
152 + " }\n"
153 + " return returnValue;\n"
154 + "}\n";
155 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME, content, URL_FIRST);
156 assertEquals("com org net edu gov ", value);
157 }
158
159
160
161
162 @Test
163 public void isInNet() {
164 final boolean isInNet = ProxyAutoConfig.isInNet("www.1234abcd.abc", "172.16.0.0", "255.240.0.0");
165 assertFalse(isInNet);
166 }
167
168
169
170
171 @Test
172 public void isInNetRange() {
173 final boolean isInNet = ProxyAutoConfig.isInNet("172.22.0.7", "172.16.0.0", "255.240.0.0");
174 assertTrue(isInNet);
175 }
176
177
178
179
180 @Test
181 public void isPlainHostNameFalse() throws MalformedURLException {
182 final String content = "function FindProxyForURL(url, host) {\n"
183 + " if (isPlainHostName('www.mozilla.org')) {\n"
184 + " return 'DIRECT';\n"
185 + " }\n"
186
187 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
188 + "}";
189
190 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
191 content, new URL("https://www.mozilla.org"));
192 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
193 }
194
195
196
197
198 @Test
199 public void isPlainHostNameTrue() throws MalformedURLException {
200 final String content = "function FindProxyForURL(url, host) {\n"
201 + " if (isPlainHostName('www')) {\n"
202 + " return 'DIRECT';\n"
203 + " }\n"
204
205 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
206 + "}";
207
208 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
209 content, new URL("https://www.mozilla.org"));
210 assertEquals("DIRECT", value);
211 }
212
213
214
215
216 @Test
217 public void dnsDomainIsFalse() throws MalformedURLException {
218 final String content = "function FindProxyForURL(url, host) {\n"
219 + " if (dnsDomainIs('www', '.mozilla.org')) {\n"
220 + " return 'DIRECT';\n"
221 + " }\n"
222
223 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
224 + "}";
225
226 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
227 content, new URL("https://www.mozilla.org"));
228 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
229 }
230
231
232
233
234 @Test
235 public void dnsDomainIsTrue() throws MalformedURLException {
236 final String content = "function FindProxyForURL(url, host) {\n"
237 + " if (dnsDomainIs('www.mozilla.org', '.mozilla.org')) {\n"
238 + " return 'DIRECT';\n"
239 + " }\n"
240
241 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
242 + "}";
243
244 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
245 content, new URL("https://www.mozilla.org"));
246 assertEquals("DIRECT", value);
247 }
248
249
250
251
252 @Test
253 public void localHostOrDomainIsFalseDomain() throws MalformedURLException {
254 final String content = "function FindProxyForURL(url, host) {\n"
255 + " if (localHostOrDomainIs('www.google.com', 'www.mozilla.org')) {\n"
256 + " return 'DIRECT';\n"
257 + " }\n"
258
259 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
260 + "}";
261
262 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
263 content, new URL("https://www.mozilla.org"));
264 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
265 }
266
267
268
269
270 @Test
271 public void localHostOrDomainIsFalseHostname() throws MalformedURLException {
272 final String content = "function FindProxyForURL(url, host) {\n"
273 + " if (localHostOrDomainIs('home.mozilla.org', 'www.mozilla.org')) {\n"
274 + " return 'DIRECT';\n"
275 + " }\n"
276
277 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
278 + "}";
279
280 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
281 content, new URL("https://www.mozilla.org"));
282 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
283 }
284
285
286
287
288 @Test
289 public void localHostOrDomainIsTrue() throws MalformedURLException {
290 final String content = "function FindProxyForURL(url, host) {\n"
291 + " if (localHostOrDomainIs('www.mozilla.org', 'www.mozilla.org')) {\n"
292 + " return 'DIRECT';\n"
293 + " }\n"
294
295 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
296 + "}";
297
298 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
299 content, new URL("https://www.mozilla.org"));
300 assertEquals("DIRECT", value);
301 }
302
303
304
305
306 @Test
307 public void localHostOrDomainIsTrueNoDomain() throws MalformedURLException {
308 final String content = "function FindProxyForURL(url, host) {\n"
309 + " if (localHostOrDomainIs('www', 'www.mozilla.org')) {\n"
310 + " return 'DIRECT';\n"
311 + " }\n"
312
313 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
314 + "}";
315
316 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
317 content, new URL("https://www.mozilla.org"));
318 assertEquals("DIRECT", value);
319 }
320
321
322
323
324 @Test
325 public void isResolvableFalse() throws MalformedURLException {
326 final String content = "function FindProxyForURL(url, host) {\n"
327 + " if (isResolvable('A17.2547876535.817')) {\n"
328 + " return 'DIRECT';\n"
329 + " }\n"
330
331 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
332 + "}";
333
334 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
335 content, new URL("https://www.mozilla.org"));
336 assertEquals("PROXY proxy.example.com:8000; DIRECT", value);
337 }
338
339
340
341
342 @Test
343 public void isResolvableTrue() throws MalformedURLException {
344 final String content = "function FindProxyForURL(url, host) {\n"
345 + " if (isResolvable('www.mozilla.org')) {\n"
346 + " return 'DIRECT';\n"
347 + " }\n"
348
349 + " return 'PROXY proxy.example.com:8000; DIRECT';\n"
350 + "}";
351
352 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
353 content, new URL("https://www.mozilla.org"));
354 assertEquals("DIRECT", value);
355 }
356
357
358
359
360 @Test
361 public void dnsResolve() throws MalformedURLException {
362 final String content = "function FindProxyForURL(url, host) {\n"
363 + " return dnsResolve('www.wetator.org');\n"
364 + "}";
365
366 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
367 content, new URL("https://www.mozilla.org"));
368 assertTrue(value, value.contains("."));
369 }
370
371
372
373
374 @Test
375 public void convertAddr() throws MalformedURLException {
376 final String content = "function FindProxyForURL(url, host) {\n"
377 + " return convert_addr('192.0.2.172');\n"
378 + "}";
379
380 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
381 content, new URL("https://www.mozilla.org"));
382 assertEquals("-1073741140", value);
383 }
384
385
386
387
388 @Test
389 public void myIpAddress() throws MalformedURLException {
390 final String content = "function FindProxyForURL(url, host) {\n"
391 + " return myIpAddress();\n"
392 + "}";
393
394 final String value = JavaScriptEngine.evaluateProxyAutoConfig(BrowserVersion.CHROME,
395 content, new URL("https://www.mozilla.org"));
396 assertTrue(value, value.contains("."));
397 }
398 }