1
2
3
4 package de.powerstat.validation.values.test;
5
6
7 import static org.junit.jupiter.api.Assertions.assertAll;
8 import static org.junit.jupiter.api.Assertions.assertEquals;
9 import static org.junit.jupiter.api.Assertions.assertFalse;
10 import static org.junit.jupiter.api.Assertions.assertNotEquals;
11 import static org.junit.jupiter.api.Assertions.assertThrows;
12 import static org.junit.jupiter.api.Assertions.assertTrue;
13
14 import org.junit.jupiter.api.Test;
15 import org.junit.jupiter.params.ParameterizedTest;
16 import org.junit.jupiter.params.provider.ValueSource;
17
18 import de.powerstat.validation.values.IPV6Address;
19 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20
21
22
23
24
25 @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"})
26 final class IPV6AddressTests
27 {
28
29
30
31 private static final String IPV6_FD00 = "fd00::";
32
33
34
35
36 private static final String FD00_0000 = "fd00:0000:0000:0000:0000:0000:0000:0000";
37
38
39
40
41 private static final String FD00_1 = "fd00::1";
42
43
44
45
46 private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected";
47
48
49
50
51 private static final String ADDRESS_IS_NOT_PUBLIC = "Address is not public";
52
53
54
55
56 private static final String ADDRESS_IS_NOT_PRIVATE = "Address is not private";
57
58
59
60
61 private static final String ADDRESS_NOT_AS_EXPECTED = "Address not as expected";
62
63
64
65
66
67 IPV6AddressTests()
68 {
69 super();
70 }
71
72
73
74
75
76 @Test
77 void testConstructorFailure0()
78 {
79 assertThrows(IllegalArgumentException.class, () ->
80 {
81 IPV6Address.of(":");
82 }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
83 );
84 }
85
86
87
88
89
90 @Test
91 void testConstructorFailure1()
92 {
93 assertThrows(IllegalArgumentException.class, () ->
94 {
95 IPV6Address.of("fd00:0000:0000:0000:0000:0000:255.255.255.255:");
96 }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
97 );
98 }
99
100
101
102
103
104 @Test
105 void testConstructorFailure2()
106 {
107 assertThrows(IllegalArgumentException.class, () ->
108 {
109 IPV6Address.of("fg00:0000:0000:0000:0000:0000:0000:0000");
110 }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
111 );
112 }
113
114
115
116
117
118 @Test
119 void testConstructorFailure3()
120 {
121 assertThrows(IllegalArgumentException.class, () ->
122 {
123 IPV6Address.of("fd00::0001::");
124 }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
125 );
126 }
127
128
129
130
131
132 @Test
133 void testConstructorSuccess0()
134 {
135 final IPV6Address address = IPV6Address.of("::");
136 assertEquals("0000:0000:0000:0000:0000:0000:0000:0000", address.stringValue(), IPV6AddressTests.ADDRESS_NOT_AS_EXPECTED);
137 }
138
139
140
141
142
143 @Test
144 void testConstructorSuccess1()
145 {
146 final IPV6Address address = IPV6Address.of("fd00:0000:0000:0000:0000:0000:255.255.255.255");
147 assertEquals("fd00:0000:0000:0000:0000:0000:ffff:ffff", address.stringValue(), IPV6AddressTests.ADDRESS_NOT_AS_EXPECTED);
148 }
149
150
151
152
153
154
155
156 @ParameterizedTest
157 @ValueSource(strings = {"00fe:0080::", "00fc::", "00fd::"})
158 void testIsPrivate(final String ipv6)
159 {
160 final IPV6Address address = IPV6Address.of(ipv6);
161 assertTrue(address.isPrivate(), IPV6AddressTests.ADDRESS_IS_NOT_PRIVATE);
162 }
163
164
165
166
167
168 @Test
169 void testIsPrivate3()
170 {
171 final IPV6Address address = IPV6Address.of("00fe::");
172 assertFalse(address.isPrivate(), IPV6AddressTests.ADDRESS_IS_NOT_PRIVATE);
173 }
174
175
176
177
178
179 @Test
180 void testIsSpecial0()
181 {
182 final IPV6Address address = IPV6Address.of("00fd::");
183 assertFalse(address.isSpecial(), "Address is special");
184 }
185
186
187
188
189
190
191
192 @ParameterizedTest
193 @ValueSource(strings = {"::", "::1", "ff::"})
194 void testIsSpecial1(final String ipv6)
195 {
196 final IPV6Address address = IPV6Address.of(ipv6);
197 assertTrue(address.isSpecial(), "Address is not special");
198 }
199
200
201
202
203
204 @Test
205 void testIsPublic0()
206 {
207 final IPV6Address address = IPV6Address.of("00c0::");
208 assertTrue(address.isPublic(), IPV6AddressTests.ADDRESS_IS_NOT_PUBLIC);
209 }
210
211
212
213
214
215
216
217 @ParameterizedTest
218 @ValueSource(strings = {"00fc::", "ff::"})
219 void testIsNotPublic0(final String ipv6)
220 {
221 final IPV6Address address = IPV6Address.of(ipv6);
222 assertFalse(address.isPublic(), IPV6AddressTests.ADDRESS_IS_NOT_PUBLIC);
223 }
224
225
226
227
228
229 @Test
230 void testStringValue()
231 {
232 final IPV6Address address = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
233 assertEquals(IPV6AddressTests.FD00_0000, address.stringValue(), IPV6AddressTests.ADDRESS_NOT_AS_EXPECTED);
234 }
235
236
237
238
239
240 @Test
241 void testHashCode()
242 {
243 final IPV6Address address1 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
244 final IPV6Address address2 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
245 final IPV6Address address3 = IPV6Address.of(IPV6AddressTests.FD00_1);
246 assertAll("testHashCode",
247 () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"),
248 () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal")
249 );
250 }
251
252
253
254
255
256 @Test
257 @SuppressWarnings("java:S5785")
258 void testEquals()
259 {
260 final IPV6Address address1 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
261 final IPV6Address address2 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
262 final IPV6Address address3 = IPV6Address.of(IPV6AddressTests.FD00_1);
263 final IPV6Address address4 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
264 assertAll("testEquals",
265 () -> assertTrue(address1.equals(address1), "address11 is not equal"),
266 () -> assertTrue(address1.equals(address2), "address12 are not equal"),
267 () -> assertTrue(address2.equals(address1), "address21 are not equal"),
268 () -> assertTrue(address2.equals(address4), "address24 are not equal"),
269 () -> assertTrue(address1.equals(address4), "address14 are not equal"),
270 () -> assertFalse(address1.equals(address3), "address13 are equal"),
271 () -> assertFalse(address3.equals(address1), "address31 are equal"),
272 () -> assertFalse(address1.equals(null), "address10 is equal")
273 );
274 }
275
276
277
278
279
280 @Test
281 void testToString()
282 {
283 final IPV6Address address = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
284 assertEquals("IPV6Address[address=fd00:0000:0000:0000:0000:0000:0000:0000]", address.toString(), "toString not equal");
285 }
286
287
288
289
290
291 @Test
292 @SuppressWarnings("java:S5785")
293 void testCompareTo()
294 {
295 final IPV6Address address1 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
296 final IPV6Address address2 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
297 final IPV6Address address3 = IPV6Address.of(IPV6AddressTests.FD00_1);
298 final IPV6Address address4 = IPV6Address.of("fd00::2");
299 final IPV6Address address5 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
300 assertAll("testCompareTo",
301 () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"),
302 () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"),
303 () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"),
304 () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"),
305 () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals")
306 );
307 }
308
309 }