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.assertNotNull;
12 import static org.junit.jupiter.api.Assertions.assertThrows;
13 import static org.junit.jupiter.api.Assertions.assertTrue;
14
15 import org.junit.jupiter.api.Test;
16 import org.junit.jupiter.params.ParameterizedTest;
17 import org.junit.jupiter.params.provider.ValueSource;
18
19 import de.powerstat.validation.values.MACAddress;
20 import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
21
22
23
24
25
26 @SuppressFBWarnings({"EC_NULL_ARG", "RV_NEGATING_RESULT_OF_COMPARETO", "RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT", "SPP_USE_ZERO_WITH_COMPARATOR"})
27 final class MACAddressTests
28 {
29
30
31
32 private static final String MAC_00_00_00_00_00_00 = "00:00:00:00:00:00";
33
34
35
36
37 private static final String MACM_00_00_00_00_00_00 = "00-00-00-00-00-00";
38
39
40
41
42 private static final String MAC_ZERO = "000000000000";
43
44
45
46
47 private static final String MAC_ONE = "00:00:00:00:00:01";
48
49
50
51
52 private static final String SEPARATOR = "-";
53
54
55
56
57 private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected";
58
59
60
61
62 private static final String ADDRESS_NOT_AS_EXPECTED = "Address not as expected";
63
64
65
66
67
68 MACAddressTests()
69 {
70 super();
71 }
72
73
74
75
76
77 @Test
78 void testConstructorFailureNull()
79 {
80 assertThrows(NullPointerException.class, () ->
81 {
82 MACAddress.of(null);
83 }, "Null pointer exception expected"
84 );
85 }
86
87
88
89
90
91
92
93 @ParameterizedTest
94 @ValueSource(strings = {"00:00:00:00:00:0g", "00:00:00:00:00:00:", "00:00:00:00:00:0"})
95 void testConstructorFailure1(final String mac)
96 {
97 assertThrows(IllegalArgumentException.class, () ->
98 {
99 MACAddress.of(mac);
100 }, MACAddressTests.ILLEGAL_ARGUMENT
101 );
102 }
103
104
105
106
107
108
109
110 @ParameterizedTest
111 @ValueSource(strings = {MACAddressTests.MAC_00_00_00_00_00_00, MACAddressTests.MACM_00_00_00_00_00_00, MACAddressTests.MAC_ZERO})
112 void testConstructorSuccess(final String mac)
113 {
114 final MACAddress address = MACAddress.of(mac);
115 assertNotNull(address, MACAddressTests.ADDRESS_NOT_AS_EXPECTED);
116 }
117
118
119
120
121
122 @Test
123 void testStringValue1()
124 {
125 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
126 assertEquals(MACAddressTests.MAC_00_00_00_00_00_00, address.stringValue(), MACAddressTests.ADDRESS_NOT_AS_EXPECTED);
127 }
128
129
130
131
132
133 @Test
134 void testStringValue2()
135 {
136 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
137 assertEquals(MACAddressTests.MACM_00_00_00_00_00_00, address.stringValue(MACAddressTests.SEPARATOR), MACAddressTests.ADDRESS_NOT_AS_EXPECTED);
138 }
139
140
141
142
143
144 @Test
145 void testStringValue3()
146 {
147 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
148 assertEquals(MACAddressTests.MAC_ZERO, address.stringValue(""), MACAddressTests.ADDRESS_NOT_AS_EXPECTED);
149 }
150
151
152
153
154
155
156
157 @ParameterizedTest
158 @ValueSource(strings = {"::", ","})
159 void testGetAddressFailure(final String delimiter)
160 {
161 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
162 assertThrows(IllegalArgumentException.class, () ->
163 {
164 address.stringValue(delimiter);
165 }, MACAddressTests.ILLEGAL_ARGUMENT
166 );
167 }
168
169
170
171
172
173 @Test
174 void testIsBroadcastTrue()
175 {
176 final MACAddress address = MACAddress.of("ff:ff:ff:ff:ff:ff");
177 assertTrue(address.isBroadcast(), "Is not a broadcast address");
178 }
179
180
181
182
183
184
185
186 @ParameterizedTest
187 @ValueSource(strings = {"ff:ff:ff:ff:ff:fe", "ff:ff:ff:ff:fe:ff", "ff:ff:ff:fe:ff:ff", "ff:ff:fe:ff:ff:ff", "ff:fe:ff:ff:ff:ff", "fe:ff:ff:ff:ff:ff"})
188 void testIsBroadcastFalse(final String mac)
189 {
190 final MACAddress address = MACAddress.of(mac);
191 assertFalse(address.isBroadcast(), "Is a broadcast address");
192 }
193
194
195
196
197
198 @Test
199 void testIsGroupTrue()
200 {
201 final MACAddress address = MACAddress.of("01:00:00:00:00:00");
202 assertTrue(address.isGroup(), "Is not a group address");
203 }
204
205
206
207
208
209 @Test
210 void testIsGroupFalse()
211 {
212 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
213 assertFalse(address.isGroup(), "Is a group address");
214 }
215
216
217
218
219
220 @Test
221 void testIsLocalTrue()
222 {
223 final MACAddress address = MACAddress.of("02:00:00:00:00:00");
224 assertTrue(address.isLocal(), "Is not a local address");
225 }
226
227
228
229
230
231 @Test
232 void testIsLocalFalse()
233 {
234 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
235 assertFalse(address.isLocal(), "Is a local address");
236 }
237
238
239
240
241
242 @Test
243 void testIsIPV4MulticastTrue()
244 {
245 final MACAddress address = MACAddress.of("01:00:5e:7f:00:00");
246 assertTrue(address.isIPV4Multicast(), "Is not a ip v4 multicast address");
247 }
248
249
250
251
252
253
254
255 @ParameterizedTest
256 @ValueSource(strings = {"01:00:5e:80:00:00", "01:00:00:00:00:00", "01:01:00:00:00:00", "00:00:00:00:00:00"})
257 void testIsIPV4MulticastFalse(final String mac)
258 {
259 final MACAddress address = MACAddress.of(mac);
260 assertFalse(address.isIPV4Multicast(), "Is a ip v4 multicast address");
261 }
262
263
264
265
266
267 @Test
268 void testIsIPV6MulticastTrue()
269 {
270 final MACAddress address = MACAddress.of("33:33:00:00:00:00");
271 assertTrue(address.isIPV6Multicast(), "Is not a ip v6 multicast address");
272 }
273
274
275
276
277
278
279
280 @ParameterizedTest
281 @ValueSource(strings = {"33:00:00:00:00:00", "00:33:00:00:00:00"})
282 void testIsIPV6MulticastFalse(final String mac)
283 {
284 final MACAddress address = MACAddress.of(mac);
285 assertFalse(address.isIPV6Multicast(), "Is a ip v6 multicast address");
286 }
287
288
289
290
291
292 @Test
293 void testIsVRRPTrue()
294 {
295 final MACAddress address = MACAddress.of("00:00:5e:00:01:00");
296 assertTrue(address.isVRRP(), "Is not a vrrp address");
297 }
298
299
300
301
302
303
304
305 @ParameterizedTest
306 @ValueSource(strings = {MACAddressTests.MAC_00_00_00_00_00_00, "00:00:5e:00:00:00", "00:00:5e:01:00:00", "00:01:00:00:00:00", "01:00:00:00:00:00"})
307 void testIsVRRPFalse(final String mac)
308 {
309 final MACAddress address = MACAddress.of(mac);
310 assertFalse(address.isVRRP(), "Is a vrrp address");
311 }
312
313
314
315
316
317 @Test
318 void testGetOUI()
319 {
320 final MACAddress address = MACAddress.of("00:07:e9:00:00:00");
321 assertEquals("0007E9", address.getOUI(), "OUI is not as expected");
322 }
323
324
325
326
327
328 @Test
329 void testHashCode()
330 {
331 final MACAddress address1 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
332 final MACAddress address2 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
333 final MACAddress address3 = MACAddress.of(MACAddressTests.MAC_ONE);
334 assertAll("testHashCode",
335 () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"),
336 () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal")
337 );
338 }
339
340
341
342
343
344 @Test
345 @SuppressWarnings("java:S5785")
346 void testEquals()
347 {
348 final MACAddress address1 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
349 final MACAddress address2 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
350 final MACAddress address3 = MACAddress.of(MACAddressTests.MAC_ONE);
351 final MACAddress address4 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
352 assertAll("testEquals",
353 () -> assertTrue(address1.equals(address1), "address11 is not equal"),
354 () -> assertTrue(address1.equals(address2), "address12 are not equal"),
355 () -> assertTrue(address2.equals(address1), "address21 are not equal"),
356 () -> assertTrue(address2.equals(address4), "address24 are not equal"),
357 () -> assertTrue(address1.equals(address4), "address14 are not equal"),
358 () -> assertFalse(address1.equals(address3), "address13 are equal"),
359 () -> assertFalse(address3.equals(address1), "address31 are equal"),
360 () -> assertFalse(address1.equals(null), "address10 is equal")
361 );
362 }
363
364
365
366
367
368 @Test
369 void testToString()
370 {
371 final MACAddress address = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
372 assertEquals("MACAddress[address=00:00:00:00:00:00]", address.toString(), "toString not equal");
373 }
374
375
376
377
378
379 @Test
380 @SuppressWarnings("java:S5785")
381 void testCompareTo()
382 {
383 final MACAddress address1 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
384 final MACAddress address2 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
385 final MACAddress address3 = MACAddress.of(MACAddressTests.MAC_ONE);
386 final MACAddress address4 = MACAddress.of("00:00:00:00:00:02");
387 final MACAddress address5 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
388 assertAll("testCompareTo",
389 () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"),
390 () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"),
391 () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"),
392 () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"),
393 () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals")
394 );
395 }
396
397 }