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.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   * IP V6 tests.
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     * IP V6 test address.
30     */
31    private static final String IPV6_FD00 = "fd00::"; //$NON-NLS-1$
32  
33    /**
34     * IP V6 test address.
35     */
36    private static final String FD00_0000 = "fd00:0000:0000:0000:0000:0000:0000:0000"; //$NON-NLS-1$
37  
38    /**
39     * IP V6 test address.
40     */
41    private static final String FD00_1 = "fd00::1"; //$NON-NLS-1$
42  
43    /**
44     * Illegal argument exception expected constant.
45     */
46    private static final String ILLEGAL_ARGUMENT_EXCEPTION = "Illegal argument exception expected"; //$NON-NLS-1$
47  
48    /**
49     * Address is not public constant.
50     */
51    private static final String ADDRESS_IS_NOT_PUBLIC = "Address is not public"; //$NON-NLS-1$
52  
53    /**
54     * Address is not private constant.
55     */
56    private static final String ADDRESS_IS_NOT_PRIVATE = "Address is not private"; //$NON-NLS-1$
57  
58    /**
59     * Address not as expected constant.
60     */
61    private static final String ADDRESS_NOT_AS_EXPECTED = "Address not as expected"; //$NON-NLS-1$
62  
63  
64    /**
65     * Default constructor.
66     */
67    /* default */ IPV6AddressTests()
68     {
69      super();
70     }
71  
72  
73    /**
74     * Test constructor failure illegal argument.
75     */
76    @Test
77    /* default */ void testConstructorFailure0()
78     {
79      assertThrows(IllegalArgumentException.class, () ->
80       {
81        /* final IPV6Address address = */ IPV6Address.of(":"); //$NON-NLS-1$
82       }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
83      );
84     }
85  
86  
87    /**
88     * Test constructor failure illegal argument.
89     */
90    @Test
91    /* default */ void testConstructorFailure1()
92     {
93      assertThrows(IllegalArgumentException.class, () ->
94       {
95        /* final IPV6Address address = */ IPV6Address.of("fd00:0000:0000:0000:0000:0000:255.255.255.255:"); //$NON-NLS-1$
96       }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
97      );
98     }
99  
100 
101   /**
102    * Test constructor failure illegal argument.
103    */
104   @Test
105   /* default */ void testConstructorFailure2()
106    {
107     assertThrows(IllegalArgumentException.class, () ->
108      {
109       /* final IPV6Address address = */ IPV6Address.of("fg00:0000:0000:0000:0000:0000:0000:0000"); //$NON-NLS-1$
110      }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
111     );
112    }
113 
114 
115   /**
116    * Test constructor failure illegal argument.
117    */
118   @Test
119   /* default */ void testConstructorFailure3()
120    {
121     assertThrows(IllegalArgumentException.class, () ->
122      {
123       /* final IPV6Address address = */ IPV6Address.of("fd00::0001::"); //$NON-NLS-1$
124      }, IPV6AddressTests.ILLEGAL_ARGUMENT_EXCEPTION
125     );
126    }
127 
128 
129   /**
130    * Test constructor success.
131    */
132   @Test
133   /* default */ void testConstructorSuccess0()
134    {
135     final IPV6Address address = IPV6Address.of("::"); //$NON-NLS-1$
136     assertEquals("0000:0000:0000:0000:0000:0000:0000:0000", address.stringValue(), IPV6AddressTests.ADDRESS_NOT_AS_EXPECTED); //$NON-NLS-1$
137    }
138 
139 
140   /**
141    * Test constructor success.
142    */
143   @Test
144   /* default */ void testConstructorSuccess1()
145    {
146     final IPV6Address address = IPV6Address.of("fd00:0000:0000:0000:0000:0000:255.255.255.255"); //$NON-NLS-1$
147     assertEquals("fd00:0000:0000:0000:0000:0000:ffff:ffff", address.stringValue(), IPV6AddressTests.ADDRESS_NOT_AS_EXPECTED); //$NON-NLS-1$
148    }
149 
150 
151   /**
152    * Test if ip v6 is private.
153    *
154    * @param ipv6 IP V6 address string
155    */
156   @ParameterizedTest
157   @ValueSource(strings = {"00fe:0080::", "00fc::", "00fd::"})
158   /* default */ 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    * Test if ip v6 is private.
167    */
168   @Test
169   /* default */ void testIsPrivate3()
170    {
171     final IPV6Address address = IPV6Address.of("00fe::"); //$NON-NLS-1$
172     assertFalse(address.isPrivate(), IPV6AddressTests.ADDRESS_IS_NOT_PRIVATE);
173    }
174 
175 
176   /**
177    * Test if ip v6 is special.
178    */
179   @Test
180   /* default */ void testIsSpecial0()
181    {
182     final IPV6Address address = IPV6Address.of("00fd::"); //$NON-NLS-1$
183     assertFalse(address.isSpecial(), "Address is special"); //$NON-NLS-1$
184    }
185 
186 
187   /**
188    * Test if ip v6 is special.
189    *
190    * @param ipv6 IP V6 address string
191    */
192   @ParameterizedTest
193   @ValueSource(strings = {"::", "::1", "ff::"})
194   /* default */ void testIsSpecial1(final String ipv6)
195    {
196     final IPV6Address address = IPV6Address.of(ipv6);
197     assertTrue(address.isSpecial(), "Address is not special"); //$NON-NLS-1$
198    }
199 
200 
201   /**
202    * Test if ip v6 is public.
203    */
204   @Test
205   /* default */ void testIsPublic0()
206    {
207     final IPV6Address address = IPV6Address.of("00c0::"); //$NON-NLS-1$
208     assertTrue(address.isPublic(), IPV6AddressTests.ADDRESS_IS_NOT_PUBLIC);
209    }
210 
211 
212   /**
213    * Test if ip v6 is not public.
214    *
215    * @param ipv6 IP V6 address string
216    */
217   @ParameterizedTest
218   @ValueSource(strings = {"00fc::", "ff::"})
219   /* default */ 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    * Test get address.
228    */
229   @Test
230   /* default */ 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    * Test hash code.
239    */
240   @Test
241   /* default */ 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", //$NON-NLS-1$
247       () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
248       () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
249     );
250    }
251 
252 
253   /**
254    * Test equals.
255    */
256   @Test
257   @SuppressWarnings("java:S5785")
258   /* default */ 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", //$NON-NLS-1$
265       () -> assertTrue(address1.equals(address1), "address11 is not equal"), //$NON-NLS-1$
266       () -> assertTrue(address1.equals(address2), "address12 are not equal"), //$NON-NLS-1$
267       () -> assertTrue(address2.equals(address1), "address21 are not equal"), //$NON-NLS-1$
268       () -> assertTrue(address2.equals(address4), "address24 are not equal"), //$NON-NLS-1$
269       () -> assertTrue(address1.equals(address4), "address14 are not equal"), //$NON-NLS-1$
270       () -> assertFalse(address1.equals(address3), "address13 are equal"), //$NON-NLS-1$
271       () -> assertFalse(address3.equals(address1), "address31 are equal"), //$NON-NLS-1$
272       () -> assertFalse(address1.equals(null), "address10 is equal") //$NON-NLS-1$
273     );
274    }
275 
276 
277   /**
278    * Test toString.
279    */
280   @Test
281   /* default */ 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"); //$NON-NLS-1$ //$NON-NLS-2$
285    }
286 
287 
288   /**
289    * Test compareTo.
290    */
291   @Test
292   @SuppressWarnings("java:S5785")
293   /* default */ 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"); //$NON-NLS-1$
299     final IPV6Address address5 = IPV6Address.of(IPV6AddressTests.IPV6_FD00);
300     assertAll("testCompareTo", //$NON-NLS-1$
301       () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"), //$NON-NLS-1$
302       () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"), //$NON-NLS-1$
303       () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"), //$NON-NLS-1$
304       () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"), //$NON-NLS-1$
305       () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals") //$NON-NLS-1$
306     );
307    }
308 
309  }