JAL-3130 adapted getdown src. attempt 2. first attempt failed due to cp'ed .git files
[jalview.git] / getdown / src / getdown / core / src / test / java / com / threerings / getdown / util / HostWhitelistTest.java
1 //
2 // Getdown - application installer, patcher and launcher
3 // Copyright (C) 2004-2018 Getdown authors
4 // https://github.com/threerings/getdown/blob/master/LICENSE
5
6 package com.threerings.getdown.util;
7
8 import static org.junit.Assert.assertEquals;
9
10 import java.net.MalformedURLException;
11 import java.net.URL;
12 import java.util.Arrays;
13 import java.util.List;
14
15 import org.junit.Test;
16
17 /**
18  * Tests {@link HostWhitelist}.
19  */
20 public class HostWhitelistTest
21 {
22     @Test
23     public void testVerify () throws MalformedURLException
24     {
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);
37
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);
50
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);
63
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);
76
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);
90
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);
103
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);
116
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);
132
133         checkCanVerify("", "http://foo.com", true);
134         checkCanVerify("", "http://aaa.bbb.net/xyz", true);
135         checkCanVerify("", "https://127.0.0.1/abc", true);
136
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);
140     }
141
142     private static void checkCanVerify (String whitelist, String url, boolean expectedToPass)
143         throws MalformedURLException
144     {
145         List<String> w = Arrays.asList(StringUtil.parseStringArray(whitelist));
146         URL u = new URL(url);
147         boolean passed;
148
149         try {
150             HostWhitelist.verify(w, u);
151             passed = true;
152         } catch (MalformedURLException e) {
153             passed = false;
154         }
155
156         assertEquals("with whitelist '" + whitelist + "' and URL '" + url + "'",
157             expectedToPass, passed);
158     }
159 }