View Javadoc
1   /*
2    * Copyright (C) 2020-2023 Dipl.-Inform. Kai Hofmann. All rights reserved!
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   * MAC address tests.
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     * MAC address 00:00:00:00:00:00.
31     */
32    private static final String MAC_00_00_00_00_00_00 = "00:00:00:00:00:00"; //$NON-NLS-1$
33  
34    /**
35     * MAC address 00-00-00-00-00-00.
36     */
37    private static final String MACM_00_00_00_00_00_00 = "00-00-00-00-00-00"; //$NON-NLS-1$
38  
39    /**
40     * Mac address.
41     */
42    private static final String MAC_ZERO = "000000000000"; //$NON-NLS-1$
43  
44    /**
45     * Mac address.
46     */
47    private static final String MAC_ONE = "00:00:00:00:00:01"; //$NON-NLS-1$
48  
49    /**
50     * Separator.
51     */
52    private static final String SEPARATOR = "-"; //$NON-NLS-1$
53  
54    /**
55     * Illegal argument exception expected constant.
56     */
57    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$NON-NLS-1$
58  
59    /**
60     * Address not as expected.
61     */
62    private static final String ADDRESS_NOT_AS_EXPECTED = "Address not as expected"; //$NON-NLS-1$
63  
64  
65    /**
66     * Default constructor.
67     */
68    /* default */ MACAddressTests()
69     {
70      super();
71     }
72  
73  
74    /**
75     * Test constructor failure null pointer.
76     */
77    @Test
78    /* default */ void testConstructorFailureNull()
79     {
80      assertThrows(NullPointerException.class, () ->
81       {
82        /* final MACAddress address = */ MACAddress.of(null);
83       }, "Null pointer exception expected" //$NON-NLS-1$
84      );
85     }
86  
87  
88    /**
89     * Test constructor failure illegal argument.
90     *
91     * @param mac MAC address
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    /* default */ void testConstructorFailure1(final String mac)
96     {
97      assertThrows(IllegalArgumentException.class, () ->
98       {
99        /* final MACAddress address = */ MACAddress.of(mac);
100      }, MACAddressTests.ILLEGAL_ARGUMENT
101     );
102    }
103 
104 
105   /**
106    * Test constructor successfully.
107    *
108    * @param mac MAC address
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   /* default */ 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    * Test get address.
121    */
122   @Test
123   /* default */ 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    * Test get address.
132    */
133   @Test
134   /* default */ 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    * Test get address.
143    */
144   @Test
145   /* default */ 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); //$NON-NLS-1$
149    }
150 
151 
152   /**
153    * Test get address failure.
154    *
155    * @param delimiter Delimiters
156    */
157   @ParameterizedTest
158   @ValueSource(strings = {"::", ","})
159   /* default */ 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       /* String result = */ address.stringValue(delimiter);
165      }, MACAddressTests.ILLEGAL_ARGUMENT
166     );
167    }
168 
169 
170   /**
171    * Test if mac is a broadcast address.
172    */
173   @Test
174   /* default */ void testIsBroadcastTrue()
175    {
176     final MACAddress address = MACAddress.of("ff:ff:ff:ff:ff:ff"); //$NON-NLS-1$
177     assertTrue(address.isBroadcast(), "Is not a broadcast address"); //$NON-NLS-1$
178    }
179 
180 
181   /**
182    * Test if mac is not a broadcast address.
183    *
184    * @param mac MAC
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   /* default */ void testIsBroadcastFalse(final String mac)
189    {
190     final MACAddress address = MACAddress.of(mac);
191     assertFalse(address.isBroadcast(), "Is a broadcast address"); //$NON-NLS-1$
192    }
193 
194 
195   /**
196    * Test if mac is a group address.
197    */
198   @Test
199   /* default */ void testIsGroupTrue()
200    {
201     final MACAddress address = MACAddress.of("01:00:00:00:00:00"); //$NON-NLS-1$
202     assertTrue(address.isGroup(), "Is not a group address"); //$NON-NLS-1$
203    }
204 
205 
206   /**
207    * Test if mac is not a group address.
208    */
209   @Test
210   /* default */ 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"); //$NON-NLS-1$
214    }
215 
216 
217   /**
218    * Test if mac is a local address.
219    */
220   @Test
221   /* default */ void testIsLocalTrue()
222    {
223     final MACAddress address = MACAddress.of("02:00:00:00:00:00"); //$NON-NLS-1$
224     assertTrue(address.isLocal(), "Is not a local address"); //$NON-NLS-1$
225    }
226 
227 
228   /**
229    * Test if mac is not a local address.
230    */
231   @Test
232   /* default */ 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"); //$NON-NLS-1$
236    }
237 
238 
239   /**
240    * Test if mac is an ip v4 multicast address.
241    */
242   @Test
243   /* default */ void testIsIPV4MulticastTrue()
244    {
245     final MACAddress address = MACAddress.of("01:00:5e:7f:00:00"); //$NON-NLS-1$
246     assertTrue(address.isIPV4Multicast(), "Is not a ip v4 multicast address"); //$NON-NLS-1$
247    }
248 
249 
250   /**
251    * Test if mac is not an ip v4 multicast address.
252    *
253    * @param mac MAC
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   /* default */ void testIsIPV4MulticastFalse(final String mac)
258    {
259     final MACAddress address = MACAddress.of(mac);
260     assertFalse(address.isIPV4Multicast(), "Is a ip v4 multicast address"); //$NON-NLS-1$
261    }
262 
263 
264   /**
265    * Test if mac is an ip v6 multicast address.
266    */
267   @Test
268   /* default */ void testIsIPV6MulticastTrue()
269    {
270     final MACAddress address = MACAddress.of("33:33:00:00:00:00"); //$NON-NLS-1$
271     assertTrue(address.isIPV6Multicast(), "Is not a ip v6 multicast address"); //$NON-NLS-1$
272    }
273 
274 
275   /**
276    * Test if mac is not an ip v6 multicast address.
277    *
278    * @param mac MAC
279    */
280   @ParameterizedTest
281   @ValueSource(strings = {"33:00:00:00:00:00", "00:33:00:00:00:00"})
282   /* default */ void testIsIPV6MulticastFalse(final String mac)
283    {
284     final MACAddress address = MACAddress.of(mac);
285     assertFalse(address.isIPV6Multicast(), "Is a ip v6 multicast address"); //$NON-NLS-1$
286    }
287 
288 
289   /**
290    * Test if mac is a vrrp address.
291    */
292   @Test
293   /* default */ void testIsVRRPTrue()
294    {
295     final MACAddress address = MACAddress.of("00:00:5e:00:01:00"); //$NON-NLS-1$
296     assertTrue(address.isVRRP(), "Is not a vrrp address"); //$NON-NLS-1$
297    }
298 
299 
300   /**
301    * Test if mac is not a vrrp address.
302    *
303    * @param mac MAC
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   /* default */ void testIsVRRPFalse(final String mac)
308    {
309     final MACAddress address = MACAddress.of(mac);
310     assertFalse(address.isVRRP(), "Is a vrrp address"); //$NON-NLS-1$
311    }
312 
313 
314   /**
315    * Test getOUI.
316    */
317   @Test
318   /* default */ void testGetOUI()
319    {
320     final MACAddress address = MACAddress.of("00:07:e9:00:00:00"); //$NON-NLS-1$
321     assertEquals("0007E9", address.getOUI(), "OUI is not as expected"); //$NON-NLS-1$ //$NON-NLS-2$
322    }
323 
324 
325   /**
326    * Test hash code.
327    */
328   @Test
329   /* default */ 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", //$NON-NLS-1$
335       () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
336       () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
337     );
338    }
339 
340 
341   /**
342    * Test equals.
343    */
344   @Test
345   @SuppressWarnings("java:S5785")
346   /* default */ 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", //$NON-NLS-1$
353       () -> assertTrue(address1.equals(address1), "address11 is not equal"), //$NON-NLS-1$
354       () -> assertTrue(address1.equals(address2), "address12 are not equal"), //$NON-NLS-1$
355       () -> assertTrue(address2.equals(address1), "address21 are not equal"), //$NON-NLS-1$
356       () -> assertTrue(address2.equals(address4), "address24 are not equal"), //$NON-NLS-1$
357       () -> assertTrue(address1.equals(address4), "address14 are not equal"), //$NON-NLS-1$
358       () -> assertFalse(address1.equals(address3), "address13 are equal"), //$NON-NLS-1$
359       () -> assertFalse(address3.equals(address1), "address31 are equal"), //$NON-NLS-1$
360       () -> assertFalse(address1.equals(null), "address10 is equal") //$NON-NLS-1$
361     );
362    }
363 
364 
365   /**
366    * Test toString.
367    */
368   @Test
369   /* default */ 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"); //$NON-NLS-1$ //$NON-NLS-2$
373    }
374 
375 
376   /**
377    * Test compareTo.
378    */
379   @Test
380   @SuppressWarnings("java:S5785")
381   /* default */ 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"); //$NON-NLS-1$
387     final MACAddress address5 = MACAddress.of(MACAddressTests.MAC_00_00_00_00_00_00);
388     assertAll("testCompareTo", //$NON-NLS-1$
389       () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"), //$NON-NLS-1$
390       () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"), //$NON-NLS-1$
391       () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"), //$NON-NLS-1$
392       () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"), //$NON-NLS-1$
393       () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals") //$NON-NLS-1$
394     );
395    }
396 
397  }