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.IPV4Address;
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 IPV4AddressTests
27 {
28
29
30
31 private static final String PRIVATE_IP_192_168_1_1 = "192.168.1.1";
32
33
34
35
36 private static final String PRIVATE_IP_192_168_1_2 = "192.168.1.2";
37
38
39
40
41 private static final String ADDRESS_IS_NOT_PRIVATE = "Address is not private";
42
43
44
45
46 private static final String ADDRESS_IS_NOT_SPECIAL = "Address is not special";
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 ILLEGAL_ARGUMENT = "Illegal argument exception expected";
57
58
59
60
61 private static final String ADDRESS_NOT_AS_EXPECTED = "Address not as expected";
62
63
64
65
66
67 IPV4AddressTests()
68 {
69 super();
70 }
71
72
73
74
75
76 @Test
77 void testConstructorFailure0()
78 {
79 assertThrows(IllegalArgumentException.class, () ->
80 {
81 IPV4Address.of("256.0.0.0");
82 }, IPV4AddressTests.ILLEGAL_ARGUMENT
83 );
84 }
85
86
87
88
89
90 @Test
91 void testConstructorFailure1()
92 {
93 assertThrows(NullPointerException.class, () ->
94 {
95 IPV4Address.of(null);
96 }, "Null pointer exception expected"
97 );
98 }
99
100
101
102
103
104 @Test
105 void testConstructorFailure2()
106 {
107 assertThrows(IllegalArgumentException.class, () ->
108 {
109 IPV4Address.of("255.255.255.255.");
110 }, IPV4AddressTests.ILLEGAL_ARGUMENT
111 );
112 }
113
114
115
116
117
118 @Test
119 void testConstructorFailure3()
120 {
121 assertThrows(IllegalArgumentException.class, () ->
122 {
123 IPV4Address.of("0.0.0.");
124 }, IPV4AddressTests.ILLEGAL_ARGUMENT
125 );
126 }
127
128
129
130
131
132
133
134 @ParameterizedTest
135 @ValueSource(strings = {IPV4AddressTests.PRIVATE_IP_192_168_1_1, "10.0.0.1", "172.16.0.1", "172.31.0.1", "169.254.0.1"})
136 void testIsPrivate(final String ipv4)
137 {
138 final IPV4Address address = IPV4Address.of(ipv4);
139 assertTrue(address.isPrivate(), IPV4AddressTests.ADDRESS_IS_NOT_PRIVATE);
140 }
141
142
143
144
145
146
147
148 @ParameterizedTest
149 @ValueSource(strings = {"172.15.0.0", "172.32.0.0", "192.167.0.0", "169.253.0.0"})
150 void testIsNotPrivate(final String ipv4)
151 {
152 final IPV4Address address = IPV4Address.of(ipv4);
153 assertFalse(address.isPrivate(), "Address is private");
154 }
155
156
157
158
159
160
161
162 @ParameterizedTest
163 @ValueSource(strings = {"127.0.0.1", "0.0.0.1", "192.0.0.1", "192.0.2.1", "192.88.99.1", "198.18.0.1", "198.51.100.1", "203.0.113.1", "224.0.0.1", "240.0.0.1", "255.255.255.255", "100.64.0.1", "198.19.0.1", "100.127.0.1", "239.0.0.1"})
164 void testIsSpecial(final String ipv4)
165 {
166 final IPV4Address address = IPV4Address.of(ipv4);
167 assertTrue(address.isSpecial(), IPV4AddressTests.ADDRESS_IS_NOT_SPECIAL);
168 }
169
170
171
172
173
174
175
176 @ParameterizedTest
177 @ValueSource(strings = {"223.0.0.0", "198.17.0.0", "198.20.0.0", "100.63.0.0", "100.128.0.0", "192.0.1.0", "192.88.98.0", "198.51.99.0", "203.0.112.0", "203.1.113.0"})
178 void testIsNotSpecial(final String ipv4)
179 {
180 final IPV4Address address = IPV4Address.of(ipv4);
181 assertFalse(address.isSpecial(), "Address is special");
182 }
183
184
185
186
187
188 @Test
189 void testIsPublic0()
190 {
191 final IPV4Address address = IPV4Address.of("8.8.8.8");
192 assertTrue(address.isPublic(), IPV4AddressTests.ADDRESS_IS_NOT_PUBLIC);
193 }
194
195
196
197
198
199
200
201 @ParameterizedTest
202 @ValueSource(strings = {"192.168.0.1", "127.0.0.0"})
203 void testIsNotPublic0(final String adr)
204 {
205 final IPV4Address address = IPV4Address.of(adr);
206 assertFalse(address.isPublic(), IPV4AddressTests.ADDRESS_IS_NOT_PUBLIC);
207 }
208
209
210
211
212
213 @Test
214 void testStringValue()
215 {
216 final IPV4Address address = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
217 assertEquals(IPV4AddressTests.PRIVATE_IP_192_168_1_1, address.stringValue(), IPV4AddressTests.ADDRESS_NOT_AS_EXPECTED);
218 }
219
220
221
222
223
224 @Test
225 void testHashCode()
226 {
227 final IPV4Address address1 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
228 final IPV4Address address2 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
229 final IPV4Address address3 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_2);
230 assertAll("testHashCode",
231 () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"),
232 () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal")
233 );
234 }
235
236
237
238
239
240 @Test
241 @SuppressWarnings("java:S5785")
242 void testEquals()
243 {
244 final IPV4Address address1 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
245 final IPV4Address address2 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
246 final IPV4Address address3 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_2);
247 final IPV4Address address4 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
248 assertAll("testEquals",
249 () -> assertTrue(address1.equals(address1), "address11 is not equal"),
250 () -> assertTrue(address1.equals(address2), "address12 are not equal"),
251 () -> assertTrue(address2.equals(address1), "address21 are not equal"),
252 () -> assertTrue(address2.equals(address4), "address24 are not equal"),
253 () -> assertTrue(address1.equals(address4), "address14 are not equal"),
254 () -> assertFalse(address1.equals(address3), "address13 are equal"),
255 () -> assertFalse(address3.equals(address1), "address31 are equal"),
256 () -> assertFalse(address1.equals(null), "address10 is equal")
257 );
258 }
259
260
261
262
263
264 @Test
265 void testToString()
266 {
267 final IPV4Address address = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
268 assertEquals("IPV4Address[address=192.168.1.1]", address.toString(), "toString not equal");
269 }
270
271
272
273
274
275 @Test
276 @SuppressWarnings("java:S5785")
277 void testCompareTo()
278 {
279 final IPV4Address address1 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
280 final IPV4Address address2 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
281 final IPV4Address address3 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_2);
282 final IPV4Address address4 = IPV4Address.of("192.168.1.3");
283 final IPV4Address address5 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
284 assertAll("testCompareTo",
285 () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"),
286 () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"),
287 () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"),
288 () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"),
289 () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals")
290 );
291 }
292
293 }