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.IPV4Address;
19  import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
20  
21  
22  /**
23   * Tests for IP V4 address class.
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     * Private ip address 192.168.1.1.
30     */
31    private static final String PRIVATE_IP_192_168_1_1 = "192.168.1.1"; //$NON-NLS-1$
32  
33    /**
34     * Private ip address 192.168.1.2.
35     */
36    private static final String PRIVATE_IP_192_168_1_2 = "192.168.1.2"; //$NON-NLS-1$
37  
38    /**
39     * Error message: address is not private.
40     */
41    private static final String ADDRESS_IS_NOT_PRIVATE = "Address is not private"; //$NON-NLS-1$
42  
43    /**
44     * Error message: address is not special.
45     */
46    private static final String ADDRESS_IS_NOT_SPECIAL = "Address is not special"; //$NON-NLS-1$
47  
48    /**
49     * Address is not public.
50     */
51    private static final String ADDRESS_IS_NOT_PUBLIC = "Address is not public"; //$NON-NLS-1$
52  
53    /**
54     * Illegal argument exception expected.
55     */
56    private static final String ILLEGAL_ARGUMENT = "Illegal argument exception expected"; //$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 */ IPV4AddressTests()
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 IPV4Address address = */ IPV4Address.of("256.0.0.0"); //$NON-NLS-1$
82       }, IPV4AddressTests.ILLEGAL_ARGUMENT
83      );
84     }
85  
86  
87    /**
88     * Test constructor failure null pointer.
89     */
90    @Test
91    /* default */ void testConstructorFailure1()
92     {
93      assertThrows(NullPointerException.class, () ->
94       {
95        /* final IPV4Address address = */ IPV4Address.of(null);
96       }, "Null pointer exception expected" //$NON-NLS-1$
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 IPV4Address address = */ IPV4Address.of("255.255.255.255."); //$NON-NLS-1$
110      }, IPV4AddressTests.ILLEGAL_ARGUMENT
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 IPV4Address address = */ IPV4Address.of("0.0.0."); //$NON-NLS-1$
124      }, IPV4AddressTests.ILLEGAL_ARGUMENT
125     );
126    }
127 
128 
129   /**
130    * Test if ip v4 is private.
131    *
132    * @param ipv4 IP V4 address string
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   /* default */ 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    * Test if ip v4 is not private.
145    *
146    * @param ipv4 IP V4 address string
147    */
148   @ParameterizedTest
149   @ValueSource(strings = {"172.15.0.0", "172.32.0.0", "192.167.0.0", "169.253.0.0"})
150   /* default */ void testIsNotPrivate(final String ipv4)
151    {
152     final IPV4Address address = IPV4Address.of(ipv4);
153     assertFalse(address.isPrivate(), "Address is private"); //$NON-NLS-1$
154    }
155 
156 
157   /**
158    * Test if ip v4 is special.
159    *
160    * @param ipv4 IP V4 address
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   /* default */ 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    * Test if ip v4 is not special.
173    *
174    * @param ipv4 IP V4 address
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   /* default */ void testIsNotSpecial(final String ipv4)
179    {
180     final IPV4Address address = IPV4Address.of(ipv4);
181     assertFalse(address.isSpecial(), "Address is special"); //$NON-NLS-1$
182    }
183 
184 
185   /**
186    * Test if ip v4 is public.
187    */
188   @Test
189   /* default */ void testIsPublic0()
190    {
191     final IPV4Address address = IPV4Address.of("8.8.8.8"); //$NON-NLS-1$
192     assertTrue(address.isPublic(), IPV4AddressTests.ADDRESS_IS_NOT_PUBLIC);
193    }
194 
195 
196   /**
197    * Test if ip v4 is not public.
198    *
199    * @param adr IP V4 address
200    */
201   @ParameterizedTest
202   @ValueSource(strings = {"192.168.0.1", "127.0.0.0"})
203   /* default */ 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    * Test get address.
212    */
213   @Test
214   /* default */ 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    * Test hash code.
223    */
224   @Test
225   /* default */ 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", //$NON-NLS-1$
231       () -> assertEquals(address1.hashCode(), address2.hashCode(), "hashCodes are not equal"), //$NON-NLS-1$
232       () -> assertNotEquals(address1.hashCode(), address3.hashCode(), "hashCodes are equal") //$NON-NLS-1$
233     );
234    }
235 
236 
237   /**
238    * Test equals.
239    */
240   @Test
241   @SuppressWarnings("java:S5785")
242   /* default */ 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", //$NON-NLS-1$
249       () -> assertTrue(address1.equals(address1), "address11 is not equal"), //$NON-NLS-1$
250       () -> assertTrue(address1.equals(address2), "address12 are not equal"), //$NON-NLS-1$
251       () -> assertTrue(address2.equals(address1), "address21 are not equal"), //$NON-NLS-1$
252       () -> assertTrue(address2.equals(address4), "address24 are not equal"), //$NON-NLS-1$
253       () -> assertTrue(address1.equals(address4), "address14 are not equal"), //$NON-NLS-1$
254       () -> assertFalse(address1.equals(address3), "address13 are equal"), //$NON-NLS-1$
255       () -> assertFalse(address3.equals(address1), "address31 are equal"), //$NON-NLS-1$
256       () -> assertFalse(address1.equals(null), "address10 is equal") //$NON-NLS-1$
257     );
258    }
259 
260 
261   /**
262    * Test toString.
263    */
264   @Test
265   /* default */ 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"); //$NON-NLS-1$ //$NON-NLS-2$
269    }
270 
271 
272   /**
273    * Test compareTo.
274    */
275   @Test
276   @SuppressWarnings("java:S5785")
277   /* default */ 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"); //$NON-NLS-1$
283     final IPV4Address address5 = IPV4Address.of(IPV4AddressTests.PRIVATE_IP_192_168_1_1);
284     assertAll("testCompareTo", //$NON-NLS-1$
285       () -> assertTrue(address1.compareTo(address2) == -address2.compareTo(address1), "reflexive1"), //$NON-NLS-1$
286       () -> assertTrue(address1.compareTo(address3) == -address3.compareTo(address1), "reflexive2"), //$NON-NLS-1$
287       () -> assertTrue((address4.compareTo(address3) > 0) && (address3.compareTo(address1) > 0) && (address4.compareTo(address1) > 0), "transitive1"), //$NON-NLS-1$
288       () -> assertTrue((address1.compareTo(address2) == 0) && (Math.abs(address1.compareTo(address5)) == Math.abs(address2.compareTo(address5))), "sgn1"), //$NON-NLS-1$
289       () -> assertTrue((address1.compareTo(address2) == 0) && address1.equals(address2), "equals") //$NON-NLS-1$
290     );
291    }
292 
293  }