View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.validator.routines;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertFalse;
21  import static org.junit.jupiter.api.Assertions.assertNotNull;
22  import static org.junit.jupiter.api.Assertions.assertThrows;
23  import static org.junit.jupiter.api.Assertions.assertTrue;
24  
25  import java.util.ArrayList;
26  import java.util.List;
27  
28  import org.apache.commons.validator.routines.DomainValidator.ArrayType;
29  import org.bitstrings.test.junit.runner.ClassLoaderPerTestRunner;
30  import org.junit.Test;
31  import org.junit.runner.RunWith;
32  
33  /**
34   * Startup Tests for the DomainValidator.
35   *
36   * TODO Port to JUnit 5.
37   */
38  @RunWith(ClassLoaderPerTestRunner.class)
39  class DomainValidatorStartupTest {
40  
41      @Test
42      void testCannotUpdate() {
43          DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch"); // OK
44          final DomainValidator dv = DomainValidator.getInstance();
45          assertNotNull(dv);
46          assertThrows(IllegalStateException.class, () -> DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch"));
47      }
48  
49      @Test
50      void testInstanceOverride() { // Show that the instance picks up static values
51          DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "gp");
52          DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "com");
53          DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_PLUS, "cp");
54          DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_MINUS, "ch");
55          DomainValidator validator = DomainValidator.getInstance(false);
56          assertTrue(validator.isValidGenericTld("gp"));
57          assertFalse(validator.isValidGenericTld("com"));
58          assertTrue(validator.isValidCountryCodeTld("cp"));
59          assertFalse(validator.isValidCountryCodeTld("ch"));
60  
61          // show we can override them for a new instance
62          final List<DomainValidator.Item> items = new ArrayList<>();
63          items.add(new DomainValidator.Item(ArrayType.GENERIC_MINUS, ""));
64          items.add(new DomainValidator.Item(ArrayType.COUNTRY_CODE_MINUS, ""));
65          validator = DomainValidator.getInstance(false, items);
66          assertTrue(validator.isValidGenericTld("gp"));
67          assertTrue(validator.isValidGenericTld("com")); // Should be true again
68          assertTrue(validator.isValidCountryCodeTld("cp"));
69          assertTrue(validator.isValidCountryCodeTld("ch")); // Should be true again
70  
71          // Show the class overrides are unaffected
72          validator = DomainValidator.getInstance(false);
73          assertTrue(validator.isValidGenericTld("gp"));
74          assertFalse(validator.isValidGenericTld("com"));
75          assertTrue(validator.isValidCountryCodeTld("cp"));
76          assertFalse(validator.isValidCountryCodeTld("ch"));
77      }
78  
79      @Test
80      void testUpdateBaseArrayCC() {
81          final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
82                  () -> DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_RO, "com"));
83          assertEquals("Cannot update the table: COUNTRY_CODE_RO", thrown.getMessage());
84      }
85  
86      @Test
87      void testUpdateBaseArrayGeneric() {
88          final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
89                  () -> DomainValidator.updateTLDOverride(ArrayType.GENERIC_RO, "com"));
90          assertEquals("Cannot update the table: GENERIC_RO", thrown.getMessage());
91      }
92  
93      @Test
94      void testUpdateBaseArrayInfra() {
95          final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
96                  () -> DomainValidator.updateTLDOverride(ArrayType.INFRASTRUCTURE_RO, "com"));
97          assertEquals("Cannot update the table: INFRASTRUCTURE_RO", thrown.getMessage());
98      }
99  
100     @Test
101     void testUpdateBaseArrayLocal() {
102         final IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class,
103                 () -> DomainValidator.updateTLDOverride(ArrayType.LOCAL_RO, "com"));
104         assertEquals("Cannot update the table: LOCAL_RO", thrown.getMessage());
105     }
106 
107     @Test
108     void testUpdateCountryCode1a() {
109         final DomainValidator validator = DomainValidator.getInstance();
110         assertFalse(validator.isValidCountryCodeTld("com")); // cannot be valid
111     }
112 
113     @Test
114     void testUpdateCountryCode1b() {
115         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_PLUS, "com");
116         final DomainValidator validator = DomainValidator.getInstance();
117         assertTrue(validator.isValidCountryCodeTld("com")); // it is now!
118     }
119 
120     @Test
121     void testUpdateCountryCode2() {
122         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_PLUS, "com");
123         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_MINUS, "com");
124         final DomainValidator validator = DomainValidator.getInstance();
125         assertFalse(validator.isValidCountryCodeTld("com")); // show that minus overrides the rest
126     }
127 
128     @Test
129     void testUpdateCountryCode3a() { // show ch is valid
130         final DomainValidator validator = DomainValidator.getInstance();
131         assertTrue(validator.isValidCountryCodeTld("ch"));
132     }
133 
134     @Test
135     void testUpdateCountryCode3b() { // show ch can be made invalid
136         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_MINUS, "ch");
137         final DomainValidator validator = DomainValidator.getInstance();
138         assertFalse(validator.isValidCountryCodeTld("ch"));
139     }
140 
141     @Test
142     void testUpdateCountryCode3c() { // show ch can be made valid again by replacing the CC array
143         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_MINUS, "ch");
144         DomainValidator.updateTLDOverride(ArrayType.COUNTRY_CODE_MINUS, "xx");
145         final DomainValidator validator = DomainValidator.getInstance();
146         assertTrue(validator.isValidCountryCodeTld("ch"));
147     }
148 
149     @Test
150     void testUpdateGeneric1() {
151         final DomainValidator validator = DomainValidator.getInstance();
152         assertFalse(validator.isValidGenericTld("ch")); // cannot be valid
153     }
154 
155     @Test
156     void testUpdateGeneric2() {
157         DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch");
158         final DomainValidator validator = DomainValidator.getInstance();
159         assertTrue(validator.isValidGenericTld("ch")); // it is now!
160     }
161 
162     @Test
163     void testUpdateGeneric3() {
164         DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch");
165         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "ch");
166         final DomainValidator validator = DomainValidator.getInstance();
167         assertFalse(validator.isValidGenericTld("ch")); // show that minus overrides the rest
168         assertTrue(validator.isValidGenericTld("com"));
169     }
170 
171     @Test
172     void testUpdateGeneric4() {
173         DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch");
174         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "ch");
175         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "com");
176         final DomainValidator validator = DomainValidator.getInstance();
177         assertFalse(validator.isValidGenericTld("com"));
178     }
179 
180     @Test
181     void testUpdateGeneric5() {
182         DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "ch");
183         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "ch");
184         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "com");
185         DomainValidator.updateTLDOverride(ArrayType.GENERIC_MINUS, "xx"); // change the minus list
186         final DomainValidator validator = DomainValidator.getInstance();
187         assertTrue(validator.isValidGenericTld("com"));
188     }
189 
190     @Test
191     void testValidator412a() {
192         final DomainValidator validator = DomainValidator.getInstance();
193         assertFalse(validator.isValidGenericTld("local"));
194         assertFalse(validator.isValid("abc.local"));
195         assertFalse(validator.isValidGenericTld("pvt"));
196         assertFalse(validator.isValid("abc.pvt"));
197     }
198 
199     @Test
200     void testValidator412b() {
201         DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, "local", "pvt");
202         final DomainValidator validator = DomainValidator.getInstance();
203         assertTrue(validator.isValidGenericTld("local"));
204         assertTrue(validator.isValid("abc.local"));
205         assertTrue(validator.isValidGenericTld("pvt"));
206         assertTrue(validator.isValid("abc.pvt"));
207     }
208 
209     @Test
210     void testValidator412c() {
211         final DomainValidator validator = DomainValidator.getInstance(true);
212         assertFalse(validator.isValidLocalTld("local"));
213         assertFalse(validator.isValid("abc.local"));
214         assertFalse(validator.isValidLocalTld("pvt"));
215         assertFalse(validator.isValid("abc.pvt"));
216     }
217 
218     @Test
219     void testValidator412d() {
220         DomainValidator.updateTLDOverride(ArrayType.LOCAL_PLUS, "local", "pvt");
221         final DomainValidator validator = DomainValidator.getInstance(true);
222         assertTrue(validator.isValidLocalTld("local"));
223         assertTrue(validator.isValidLocalTld("pvt"));
224         assertTrue(validator.isValid("abc.local"));
225         assertTrue(validator.isValid("abc.pvt"));
226     }
227 }