2 // Getdown - application installer, patcher and launcher
3 // Copyright (C) 2004-2018 Getdown authors
4 // https://github.com/threerings/getdown/blob/master/LICENSE
6 package com.threerings.getdown.util;
8 import static org.junit.Assert.assertEquals;
10 import java.net.MalformedURLException;
12 import java.util.Arrays;
13 import java.util.List;
15 import org.junit.Test;
18 * Tests {@link HostWhitelist}.
20 public class HostWhitelistTest
23 public void testVerify () throws MalformedURLException
25 checkCanVerify("foo.com", "http://foo.com", true);
26 checkCanVerify("foo.com", "http://foo.com/", true);
27 checkCanVerify("foo.com", "http://foo.com/x/y/z", true);
28 checkCanVerify("foo.com", "http://www.foo.com", false);
29 checkCanVerify("foo.com", "http://www.foo.com/", false);
30 checkCanVerify("foo.com", "http://www.foo.com/x/y/z", false);
31 checkCanVerify("foo.com", "http://a.b.foo.com", false);
32 checkCanVerify("foo.com", "http://a.b.foo.com/", false);
33 checkCanVerify("foo.com", "http://a.b.foo.com/x/y/z", false);
34 checkCanVerify("foo.com", "http://oo.com", false);
35 checkCanVerify("foo.com", "http://f.oo.com", false);
36 checkCanVerify("foo.com", "http://a.f.oo.com", false);
38 checkCanVerify("*.foo.com", "http://foo.com", false);
39 checkCanVerify("*.foo.com", "http://foo.com/", false);
40 checkCanVerify("*.foo.com", "http://foo.com/x/y/z", false);
41 checkCanVerify("*.foo.com", "http://www.foo.com", true);
42 checkCanVerify("*.foo.com", "http://www.foo.com/", true);
43 checkCanVerify("*.foo.com", "http://www.foo.com/x/y/z", true);
44 checkCanVerify("*.foo.com", "http://a.b.foo.com", true);
45 checkCanVerify("*.foo.com", "http://a.b.foo.com/", true);
46 checkCanVerify("*.foo.com", "http://a.b.foo.com/x/y/z", true);
47 checkCanVerify("*.foo.com", "http://oo.com", false);
48 checkCanVerify("*.foo.com", "http://f.oo.com", false);
49 checkCanVerify("*.foo.com", "http://a.f.oo.com", false);
51 checkCanVerify("*.com", "http://foo.com", true);
52 checkCanVerify("*.com", "http://foo.com/", true);
53 checkCanVerify("*.com", "http://foo.com/x/y/z", true);
54 checkCanVerify("*.com", "http://www.foo.com", true);
55 checkCanVerify("*.com", "http://www.foo.com/", true);
56 checkCanVerify("*.com", "http://www.foo.com/x/y/z", true);
57 checkCanVerify("*.com", "http://a.b.foo.com", true);
58 checkCanVerify("*.com", "http://a.b.foo.com/", true);
59 checkCanVerify("*.com", "http://a.b.foo.com/x/y/z", true);
60 checkCanVerify("*.com", "http://oo.com", true);
61 checkCanVerify("*.com", "http://f.oo.com", true);
62 checkCanVerify("*.com", "http://a.f.oo.com", true);
64 checkCanVerify("*.net", "http://foo.com", false);
65 checkCanVerify("*.net", "http://foo.com/", false);
66 checkCanVerify("*.net", "http://foo.com/x/y/z", false);
67 checkCanVerify("*.net", "http://www.foo.com", false);
68 checkCanVerify("*.net", "http://www.foo.com/", false);
69 checkCanVerify("*.net", "http://www.foo.com/x/y/z", false);
70 checkCanVerify("*.net", "http://a.b.foo.com", false);
71 checkCanVerify("*.net", "http://a.b.foo.com/", false);
72 checkCanVerify("*.net", "http://a.b.foo.com/x/y/z", false);
73 checkCanVerify("*.net", "http://oo.com", false);
74 checkCanVerify("*.net", "http://f.oo.com", false);
75 checkCanVerify("*.net", "http://a.f.oo.com", false);
77 checkCanVerify("www.*.com", "http://foo.com", false);
78 checkCanVerify("www.*.com", "http://foo.com/", false);
79 checkCanVerify("www.*.com", "http://foo.com/x/y/z", false);
80 checkCanVerify("www.*.com", "http://www.foo.com", true);
81 checkCanVerify("www.*.com", "http://www.foo.com/", true);
82 checkCanVerify("www.*.com", "http://www.foo.com/x/y/z", true);
83 checkCanVerify("www.*.com", "http://a.b.foo.com", false);
84 checkCanVerify("www.*.com", "http://a.b.foo.com/", false);
85 checkCanVerify("www.*.com", "http://a.b.foo.com/x/y/z", false);
86 checkCanVerify("www.*.com", "http://oo.com", false);
87 checkCanVerify("www.*.com", "http://f.oo.com", false);
88 checkCanVerify("www.*.com", "http://a.f.oo.com", false);
89 checkCanVerify("www.*.com", "http://www.a.f.oo.com", true);
91 checkCanVerify("foo.*", "http://foo.com", true);
92 checkCanVerify("foo.*", "http://foo.com/", true);
93 checkCanVerify("foo.*", "http://foo.com/x/y/z", true);
94 checkCanVerify("foo.*", "http://www.foo.com", false);
95 checkCanVerify("foo.*", "http://www.foo.com/", false);
96 checkCanVerify("foo.*", "http://www.foo.com/x/y/z", false);
97 checkCanVerify("foo.*", "http://a.b.foo.com", false);
98 checkCanVerify("foo.*", "http://a.b.foo.com/", false);
99 checkCanVerify("foo.*", "http://a.b.foo.com/x/y/z", false);
100 checkCanVerify("foo.*", "http://oo.com", false);
101 checkCanVerify("foo.*", "http://f.oo.com", false);
102 checkCanVerify("foo.*", "http://a.f.oo.com", false);
104 checkCanVerify("*.foo.*", "http://foo.com", false);
105 checkCanVerify("*.foo.*", "http://foo.com/", false);
106 checkCanVerify("*.foo.*", "http://foo.com/x/y/z", false);
107 checkCanVerify("*.foo.*", "http://www.foo.com", true);
108 checkCanVerify("*.foo.*", "http://www.foo.com/", true);
109 checkCanVerify("*.foo.*", "http://www.foo.com/x/y/z", true);
110 checkCanVerify("*.foo.*", "http://a.b.foo.com", true);
111 checkCanVerify("*.foo.*", "http://a.b.foo.com/", true);
112 checkCanVerify("*.foo.*", "http://a.b.foo.com/x/y/z", true);
113 checkCanVerify("*.foo.*", "http://oo.com", false);
114 checkCanVerify("*.foo.*", "http://f.oo.com", false);
115 checkCanVerify("*.foo.*", "http://a.f.oo.com", false);
117 checkCanVerify("127.0.0.1", "http://127.0.0.1", true);
118 checkCanVerify("127.0.0.1", "http://127.0.0.1/", true);
119 checkCanVerify("127.0.0.1", "http://127.0.0.1/x/y/z", true);
120 checkCanVerify("*.0.0.1", "http://127.0.0.1/abc", true);
121 checkCanVerify("127.*.0.1", "http://127.0.0.1/abc", true);
122 checkCanVerify("127.0.*.1", "http://127.0.0.1/abc", true);
123 checkCanVerify("127.0.0.*", "http://127.0.0.1/abc", true);
124 checkCanVerify("127.*.1", "http://127.0.0.1/abc", true);
125 checkCanVerify("*.0.1", "http://127.0.0.1/abc", true);
126 checkCanVerify("127.0.*", "http://127.0.0.1/abc", true);
127 checkCanVerify("*", "http://127.0.0.1/abc", true);
128 checkCanVerify("127.0.0.2", "http://127.0.0.1", false);
129 checkCanVerify("127.0.2.1", "http://127.0.0.1", false);
130 checkCanVerify("127.2.0.1", "http://127.0.0.1", false);
131 checkCanVerify("222.0.0.1", "http://127.0.0.1", false);
133 checkCanVerify("", "http://foo.com", true);
134 checkCanVerify("", "http://aaa.bbb.net/xyz", true);
135 checkCanVerify("", "https://127.0.0.1/abc", true);
137 checkCanVerify("aaa.bbb.com,xxx.yyy.com, *.jjj.net", "http://aaa.bbb.com/m", true);
138 checkCanVerify("aaa.bbb.com, xxx.yyy.com,*.jjj.net", "http://xxx.yyy.com/n", true);
139 checkCanVerify("aaa.bbb.com,xxx.yyy.com, *.jjj.net", "http://www.jjj.net/o", true);
142 private static void checkCanVerify (String whitelist, String url, boolean expectedToPass)
143 throws MalformedURLException
145 List<String> w = Arrays.asList(StringUtil.parseStringArray(whitelist));
146 URL u = new URL(url);
150 HostWhitelist.verify(w, u);
152 } catch (MalformedURLException e) {
156 assertEquals("with whitelist '" + whitelist + "' and URL '" + url + "'",
157 expectedToPass, passed);