blob: c81d89c5e3bd0566a3dfc6471926c6647fe7a7e8 [file] [log] [blame]
Thomas Vachuska24c849c2014-10-27 09:53:05 -07001/*
Brian O'Connor5ab426f2016-04-09 01:19:45 -07002 * Copyright 2014-present Open Networking Laboratory
Thomas Vachuska24c849c2014-10-27 09:53:05 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska24c849c2014-10-27 09:53:05 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska24c849c2014-10-27 09:53:05 -070015 */
Ayaka Koshibe16698a32014-09-13 22:19:02 -070016package org.onlab.packet;
17
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080018import org.junit.Test;
19
Ray Milkey37f6a382014-11-25 14:54:42 -080020import com.google.common.testing.EqualsTester;
21
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080022import static org.hamcrest.Matchers.equalTo;
23import static org.hamcrest.Matchers.is;
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070024import static org.junit.Assert.assertFalse;
Pavlin Radoslavov34c81642014-11-04 16:21:38 -080025import static org.junit.Assert.assertNull;
26import static org.junit.Assert.assertThat;
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070027import static org.junit.Assert.assertTrue;
Ray Milkey37f6a382014-11-25 14:54:42 -080028import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
Ayaka Koshibe16698a32014-09-13 22:19:02 -070029
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080030/**
31 * Tests for class {@link IpPrefix}.
32 */
Ayaka Koshibe1d56fe42014-09-19 16:51:58 -070033public class IpPrefixTest {
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080034 /**
35 * Tests the immutability of {@link IpPrefix}.
36 */
Ayaka Koshibe16698a32014-09-13 22:19:02 -070037 @Test
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080038 public void testImmutable() {
Ray Milkey37f6a382014-11-25 14:54:42 -080039 assertThatClassIsImmutableBaseClass(IpPrefix.class);
Ayaka Koshibe16698a32014-09-13 22:19:02 -070040 }
41
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080042 /**
43 * Tests the maximum mask length.
44 */
Ayaka Koshibe16698a32014-09-13 22:19:02 -070045 @Test
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080046 public void testMaxMaskLength() {
47 assertThat(IpPrefix.MAX_INET_MASK_LENGTH, is(32));
48 assertThat(IpPrefix.MAX_INET6_MASK_LENGTH, is(128));
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070049 }
50
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080051 /**
52 * Tests returning the IP version of the prefix.
53 */
Ayaka Koshibe40e7fec2014-09-16 22:32:19 -070054 @Test
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080055 public void testVersion() {
56 IpPrefix ipPrefix;
57
58 // IPv4
59 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
60 assertThat(ipPrefix.version(), is(IpAddress.Version.INET));
61
62 // IPv6
63 ipPrefix = IpPrefix.valueOf("::/0");
64 assertThat(ipPrefix.version(), is(IpAddress.Version.INET6));
Ayaka Koshibe16698a32014-09-13 22:19:02 -070065 }
Jonathan Hartb7a2ac32014-09-19 10:42:27 -070066
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -080067 /**
Pavlin Radoslavov34ffe722015-03-10 12:48:55 -070068 * Tests whether the IP version of a prefix is IPv4.
69 */
70 @Test
71 public void testIsIp4() {
72 IpPrefix ipPrefix;
73
74 // IPv4
75 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
76 assertTrue(ipPrefix.isIp4());
77
78 // IPv6
79 ipPrefix = IpPrefix.valueOf("::/0");
80 assertFalse(ipPrefix.isIp4());
81 }
82
83 /**
84 * Tests whether the IP version of a prefix is IPv6.
85 */
86 @Test
87 public void testIsIp6() {
88 IpPrefix ipPrefix;
89
90 // IPv4
91 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
92 assertFalse(ipPrefix.isIp6());
93
94 // IPv6
95 ipPrefix = IpPrefix.valueOf("::/0");
96 assertTrue(ipPrefix.isIp6());
97 }
98
99 /**
Charles Chanaedabfd2016-02-26 09:31:48 -0800100 * Tests if the prefix is a multicast prefix.
101 */
102 @Test
103 public void testIsMulticast() {
104 IpPrefix v4Unicast = IpPrefix.valueOf("10.0.0.1/16");
105 IpPrefix v4Multicast = IpPrefix.valueOf("224.0.0.1/4");
106 IpPrefix v4Overlap = IpPrefix.valueOf("192.0.0.0/2");
107 IpPrefix v6Unicast = IpPrefix.valueOf("1000::1/8");
108 IpPrefix v6Multicast = IpPrefix.valueOf("ff02::1/8");
109 IpPrefix v6Overlap = IpPrefix.valueOf("ff00::1/4");
110 assertFalse(v4Unicast.isMulticast());
111 assertTrue(v4Multicast.isMulticast());
112 assertFalse(v4Overlap.isMulticast());
113 assertFalse(v6Unicast.isMulticast());
114 assertTrue(v6Multicast.isMulticast());
115 assertFalse(v6Overlap.isMulticast());
116 }
117
118 /**
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800119 * Tests returning the IP address value and IP address prefix length of
120 * an IPv4 prefix.
121 */
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700122 @Test
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800123 public void testAddressAndPrefixLengthIPv4() {
124 IpPrefix ipPrefix;
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700125
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800126 ipPrefix = IpPrefix.valueOf("1.2.3.0/24");
127 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1.2.3.0")));
128 assertThat(ipPrefix.prefixLength(), is(24));
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700129
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800130 ipPrefix = IpPrefix.valueOf("1.2.3.4/24");
131 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1.2.3.0")));
132 assertThat(ipPrefix.prefixLength(), is(24));
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700133
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800134 ipPrefix = IpPrefix.valueOf("1.2.3.4/32");
135 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1.2.3.4")));
136 assertThat(ipPrefix.prefixLength(), is(32));
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700137
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800138 ipPrefix = IpPrefix.valueOf("1.2.3.5/32");
139 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1.2.3.5")));
140 assertThat(ipPrefix.prefixLength(), is(32));
141
142 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
143 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("0.0.0.0")));
144 assertThat(ipPrefix.prefixLength(), is(0));
145
146 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
147 assertThat(ipPrefix.address(),
148 equalTo(IpAddress.valueOf("255.255.255.255")));
149 assertThat(ipPrefix.prefixLength(), is(32));
Jonathan Hartb7a2ac32014-09-19 10:42:27 -0700150 }
Jonathan Hart70da5122014-10-01 16:37:42 -0700151
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800152 /**
153 * Tests returning the IP address value and IP address prefix length of
154 * an IPv6 prefix.
155 */
Jonathan Hart70da5122014-10-01 16:37:42 -0700156 @Test
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800157 public void testAddressAndPrefixLengthIPv6() {
158 IpPrefix ipPrefix;
Jonathan Hart70da5122014-10-01 16:37:42 -0700159
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800160 ipPrefix = IpPrefix.valueOf("1100::/8");
161 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1100::")));
162 assertThat(ipPrefix.prefixLength(), is(8));
Jonathan Hart70da5122014-10-01 16:37:42 -0700163
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800164 ipPrefix =
165 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8885/8");
166 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("1100::")));
167 assertThat(ipPrefix.prefixLength(), is(8));
Jonathan Hart70da5122014-10-01 16:37:42 -0700168
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800169 ipPrefix =
170 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8800/120");
171 assertThat(ipPrefix.address(),
172 equalTo(IpAddress.valueOf("1111:2222:3333:4444:5555:6666:7777:8800")));
173 assertThat(ipPrefix.prefixLength(), is(120));
Jonathan Hartdbdbdbb2014-10-06 18:35:30 -0700174
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800175 ipPrefix =
176 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8885/128");
177 assertThat(ipPrefix.address(),
178 equalTo(IpAddress.valueOf("1111:2222:3333:4444:5555:6666:7777:8885")));
179 assertThat(ipPrefix.prefixLength(), is(128));
Jonathan Hartdbdbdbb2014-10-06 18:35:30 -0700180
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800181 ipPrefix = IpPrefix.valueOf("::/0");
182 assertThat(ipPrefix.address(), equalTo(IpAddress.valueOf("::")));
183 assertThat(ipPrefix.prefixLength(), is(0));
184
185 ipPrefix =
186 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
187 assertThat(ipPrefix.address(),
188 equalTo(IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
189 assertThat(ipPrefix.prefixLength(), is(128));
190
191 ipPrefix =
192 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8885/64");
193 assertThat(ipPrefix.address(),
194 equalTo(IpAddress.valueOf("1111:2222:3333:4444::")));
195 assertThat(ipPrefix.prefixLength(), is(64));
196 }
197
198 /**
Pavlin Radoslavov34c81642014-11-04 16:21:38 -0800199 * Tests getting the Ip4Prefix and Ip6Prefix view of the IP prefix.
200 */
201 @Test
202 public void testGetIp4AndIp6PrefixView() {
203 IpPrefix ipPrefix;
204 Ip4Prefix ip4Prefix;
205 Ip6Prefix ip6Prefix;
206
207 // Pure IPv4 IpPrefix
208 ipPrefix = IpPrefix.valueOf("1.2.3.0/24");
209 ip4Prefix = ipPrefix.getIp4Prefix();
210 ip6Prefix = ipPrefix.getIp6Prefix();
211 assertThat(ip4Prefix.toString(), is("1.2.3.0/24"));
212 assertNull(ip6Prefix);
213
214 // IPv4 IpPrefix that is Ip4Prefix
215 ipPrefix = Ip4Prefix.valueOf("1.2.3.0/24");
216 ip4Prefix = ipPrefix.getIp4Prefix();
217 ip6Prefix = ipPrefix.getIp6Prefix();
218 assertThat(ip4Prefix.toString(), is("1.2.3.0/24"));
219 assertNull(ip6Prefix);
220
221 // Pure IPv6 IpPrefix
222 ipPrefix = IpPrefix.valueOf("1111:2222::/64");
223 ip4Prefix = ipPrefix.getIp4Prefix();
224 ip6Prefix = ipPrefix.getIp6Prefix();
225 assertNull(ip4Prefix);
226 assertThat(ip6Prefix.toString(), is("1111:2222::/64"));
227
228 // IPv6 IpPrefix that is Ip6Prefix
229 ipPrefix = Ip6Prefix.valueOf("1111:2222::/64");
230 ip4Prefix = ipPrefix.getIp4Prefix();
231 ip6Prefix = ipPrefix.getIp6Prefix();
232 assertNull(ip4Prefix);
233 assertThat(ip6Prefix.toString(), is("1111:2222::/64"));
234 }
235
236 /**
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800237 * Tests valueOf() converter for IPv4 integer value.
238 */
239 @Test
240 public void testValueOfForIntegerIPv4() {
241 IpPrefix ipPrefix;
242
243 ipPrefix = IpPrefix.valueOf(0x01020304, 24);
244 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
245
246 ipPrefix = IpPrefix.valueOf(0x01020304, 32);
247 assertThat(ipPrefix.toString(), is("1.2.3.4/32"));
248
249 ipPrefix = IpPrefix.valueOf(0x01020305, 32);
250 assertThat(ipPrefix.toString(), is("1.2.3.5/32"));
251
252 ipPrefix = IpPrefix.valueOf(0, 0);
253 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
254
255 ipPrefix = IpPrefix.valueOf(0, 32);
256 assertThat(ipPrefix.toString(), is("0.0.0.0/32"));
257
258 ipPrefix = IpPrefix.valueOf(0xffffffff, 0);
259 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
260
261 ipPrefix = IpPrefix.valueOf(0xffffffff, 16);
262 assertThat(ipPrefix.toString(), is("255.255.0.0/16"));
263
264 ipPrefix = IpPrefix.valueOf(0xffffffff, 32);
265 assertThat(ipPrefix.toString(), is("255.255.255.255/32"));
266 }
267
268 /**
269 * Tests invalid valueOf() converter for IPv4 integer value and
270 * negative prefix length.
271 */
272 @Test(expected = IllegalArgumentException.class)
273 public void testInvalidValueOfIntegerNegativePrefixLengthIPv4() {
274 IpPrefix ipPrefix;
275
276 ipPrefix = IpPrefix.valueOf(0x01020304, -1);
277 }
278
279 /**
280 * Tests invalid valueOf() converter for IPv4 integer value and
281 * too long prefix length.
282 */
283 @Test(expected = IllegalArgumentException.class)
284 public void testInvalidValueOfIntegerTooLongPrefixLengthIPv4() {
285 IpPrefix ipPrefix;
286
287 ipPrefix = IpPrefix.valueOf(0x01020304, 33);
288 }
289
290 /**
291 * Tests valueOf() converter for IPv4 byte array.
292 */
293 @Test
294 public void testValueOfByteArrayIPv4() {
295 IpPrefix ipPrefix;
296 byte[] value;
297
298 value = new byte[] {1, 2, 3, 4};
299 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 24);
300 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
301
302 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 32);
303 assertThat(ipPrefix.toString(), is("1.2.3.4/32"));
304
305 value = new byte[] {1, 2, 3, 5};
306 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 32);
307 assertThat(ipPrefix.toString(), is("1.2.3.5/32"));
308
309 value = new byte[] {0, 0, 0, 0};
310 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 0);
311 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
312
313 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 32);
314 assertThat(ipPrefix.toString(), is("0.0.0.0/32"));
315
316 value = new byte[] {(byte) 0xff, (byte) 0xff,
317 (byte) 0xff, (byte) 0xff};
318 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 0);
319 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
320
321 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 16);
322 assertThat(ipPrefix.toString(), is("255.255.0.0/16"));
323
324 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 32);
325 assertThat(ipPrefix.toString(), is("255.255.255.255/32"));
326 }
327
328 /**
329 * Tests valueOf() converter for IPv6 byte array.
330 */
331 @Test
332 public void testValueOfByteArrayIPv6() {
333 IpPrefix ipPrefix;
334 byte[] value;
335
336 value = new byte[] {0x11, 0x11, 0x22, 0x22,
337 0x33, 0x33, 0x44, 0x44,
338 0x55, 0x55, 0x66, 0x66,
339 0x77, 0x77, (byte) 0x88, (byte) 0x88};
340 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 120);
341 assertThat(ipPrefix.toString(),
342 is("1111:2222:3333:4444:5555:6666:7777:8800/120"));
343
344 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 128);
345 assertThat(ipPrefix.toString(),
346 is("1111:2222:3333:4444:5555:6666:7777:8888/128"));
347
348 value = new byte[] {0x00, 0x00, 0x00, 0x00,
349 0x00, 0x00, 0x00, 0x00,
350 0x00, 0x00, 0x00, 0x00,
351 0x00, 0x00, 0x00, 0x00};
352 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 0);
353 assertThat(ipPrefix.toString(), is("::/0"));
354
355 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 128);
356 assertThat(ipPrefix.toString(), is("::/128"));
357
358 value = new byte[] {(byte) 0xff, (byte) 0xff,
359 (byte) 0xff, (byte) 0xff,
360 (byte) 0xff, (byte) 0xff,
361 (byte) 0xff, (byte) 0xff,
362 (byte) 0xff, (byte) 0xff,
363 (byte) 0xff, (byte) 0xff,
364 (byte) 0xff, (byte) 0xff,
365 (byte) 0xff, (byte) 0xff};
366 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 0);
367 assertThat(ipPrefix.toString(), is("::/0"));
368
369 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 64);
370 assertThat(ipPrefix.toString(), is("ffff:ffff:ffff:ffff::/64"));
371
372 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 128);
373 assertThat(ipPrefix.toString(),
374 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
375 }
376
377 /**
378 * Tests invalid valueOf() converter for a null array for IPv4.
379 */
380 @Test(expected = NullPointerException.class)
381 public void testInvalidValueOfNullArrayIPv4() {
382 IpPrefix ipPrefix;
383 byte[] value;
384
385 value = null;
386 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 24);
387 }
388
389 /**
390 * Tests invalid valueOf() converter for a null array for IPv6.
391 */
392 @Test(expected = NullPointerException.class)
393 public void testInvalidValueOfNullArrayIPv6() {
394 IpPrefix ipPrefix;
395 byte[] value;
396
397 value = null;
398 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 120);
399 }
400
401 /**
402 * Tests invalid valueOf() converter for a short array for IPv4.
403 */
404 @Test(expected = IllegalArgumentException.class)
405 public void testInvalidValueOfShortArrayIPv4() {
406 IpPrefix ipPrefix;
407 byte[] value;
408
409 value = new byte[] {1, 2, 3};
410 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 24);
411 }
412
413 /**
414 * Tests invalid valueOf() converter for a short array for IPv6.
415 */
416 @Test(expected = IllegalArgumentException.class)
417 public void testInvalidValueOfShortArrayIPv6() {
418 IpPrefix ipPrefix;
419 byte[] value;
420
421 value = new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
422 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 120);
423 }
424
425 /**
426 * Tests invalid valueOf() converter for IPv4 byte array and
427 * negative prefix length.
428 */
429 @Test(expected = IllegalArgumentException.class)
430 public void testInvalidValueOfByteArrayNegativePrefixLengthIPv4() {
431 IpPrefix ipPrefix;
432 byte[] value;
433
434 value = new byte[] {1, 2, 3, 4};
435 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, -1);
436 }
437
438 /**
439 * Tests invalid valueOf() converter for IPv6 byte array and
440 * negative prefix length.
441 */
442 @Test(expected = IllegalArgumentException.class)
443 public void testInvalidValueOfByteArrayNegativePrefixLengthIPv6() {
444 IpPrefix ipPrefix;
445 byte[] value;
446
447 value = new byte[] {0x11, 0x11, 0x22, 0x22,
448 0x33, 0x33, 0x44, 0x44,
449 0x55, 0x55, 0x66, 0x66,
450 0x77, 0x77, (byte) 0x88, (byte) 0x88};
451 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, -1);
452 }
453
454 /**
455 * Tests invalid valueOf() converter for IPv4 byte array and
456 * too long prefix length.
457 */
458 @Test(expected = IllegalArgumentException.class)
459 public void testInvalidValueOfByteArrayTooLongPrefixLengthIPv4() {
460 IpPrefix ipPrefix;
461 byte[] value;
462
463 value = new byte[] {1, 2, 3, 4};
464 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET, value, 33);
465 }
466
467 /**
468 * Tests invalid valueOf() converter for IPv6 byte array and
469 * too long prefix length.
470 */
471 @Test(expected = IllegalArgumentException.class)
472 public void testInvalidValueOfByteArrayTooLongPrefixLengthIPv6() {
473 IpPrefix ipPrefix;
474 byte[] value;
475
476 value = new byte[] {0x11, 0x11, 0x22, 0x22,
477 0x33, 0x33, 0x44, 0x44,
478 0x55, 0x55, 0x66, 0x66,
479 0x77, 0x77, (byte) 0x88, (byte) 0x88};
480 ipPrefix = IpPrefix.valueOf(IpAddress.Version.INET6, value, 129);
481 }
482
483 /**
484 * Tests valueOf() converter for IPv4 address.
485 */
486 @Test
487 public void testValueOfAddressIPv4() {
488 IpAddress ipAddress;
489 IpPrefix ipPrefix;
490
491 ipAddress = IpAddress.valueOf("1.2.3.4");
492 ipPrefix = IpPrefix.valueOf(ipAddress, 24);
493 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
494
495 ipPrefix = IpPrefix.valueOf(ipAddress, 32);
496 assertThat(ipPrefix.toString(), is("1.2.3.4/32"));
497
498 ipAddress = IpAddress.valueOf("1.2.3.5");
499 ipPrefix = IpPrefix.valueOf(ipAddress, 32);
500 assertThat(ipPrefix.toString(), is("1.2.3.5/32"));
501
502 ipAddress = IpAddress.valueOf("0.0.0.0");
503 ipPrefix = IpPrefix.valueOf(ipAddress, 0);
504 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
505
506 ipPrefix = IpPrefix.valueOf(ipAddress, 32);
507 assertThat(ipPrefix.toString(), is("0.0.0.0/32"));
508
509 ipAddress = IpAddress.valueOf("255.255.255.255");
510 ipPrefix = IpPrefix.valueOf(ipAddress, 0);
511 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
512
513 ipPrefix = IpPrefix.valueOf(ipAddress, 16);
514 assertThat(ipPrefix.toString(), is("255.255.0.0/16"));
515
516 ipPrefix = IpPrefix.valueOf(ipAddress, 32);
517 assertThat(ipPrefix.toString(), is("255.255.255.255/32"));
518 }
519
520 /**
521 * Tests valueOf() converter for IPv6 address.
522 */
523 @Test
524 public void testValueOfAddressIPv6() {
525 IpAddress ipAddress;
526 IpPrefix ipPrefix;
527
528 ipAddress =
529 IpAddress.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
530 ipPrefix = IpPrefix.valueOf(ipAddress, 120);
531 assertThat(ipPrefix.toString(),
532 is("1111:2222:3333:4444:5555:6666:7777:8800/120"));
533
534 ipPrefix = IpPrefix.valueOf(ipAddress, 128);
535 assertThat(ipPrefix.toString(),
536 is("1111:2222:3333:4444:5555:6666:7777:8888/128"));
537
538 ipAddress = IpAddress.valueOf("::");
539 ipPrefix = IpPrefix.valueOf(ipAddress, 0);
540 assertThat(ipPrefix.toString(), is("::/0"));
541
542 ipPrefix = IpPrefix.valueOf(ipAddress, 128);
543 assertThat(ipPrefix.toString(), is("::/128"));
544
545 ipAddress =
546 IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
547 ipPrefix = IpPrefix.valueOf(ipAddress, 0);
548 assertThat(ipPrefix.toString(), is("::/0"));
549
550 ipPrefix = IpPrefix.valueOf(ipAddress, 64);
551 assertThat(ipPrefix.toString(), is("ffff:ffff:ffff:ffff::/64"));
552
553 ipPrefix = IpPrefix.valueOf(ipAddress, 128);
554 assertThat(ipPrefix.toString(),
555 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
556 }
557
558 /**
559 * Tests invalid valueOf() converter for a null IP address.
560 */
561 @Test(expected = NullPointerException.class)
562 public void testInvalidValueOfNullAddress() {
563 IpAddress ipAddress;
564 IpPrefix ipPrefix;
565
566 ipAddress = null;
567 ipPrefix = IpPrefix.valueOf(ipAddress, 24);
568 }
569
570 /**
571 * Tests invalid valueOf() converter for IPv4 address and
572 * negative prefix length.
573 */
574 @Test(expected = IllegalArgumentException.class)
575 public void testInvalidValueOfAddressNegativePrefixLengthIPv4() {
576 IpAddress ipAddress;
577 IpPrefix ipPrefix;
578
579 ipAddress = IpAddress.valueOf("1.2.3.4");
580 ipPrefix = IpPrefix.valueOf(ipAddress, -1);
581 }
582
583 /**
584 * Tests invalid valueOf() converter for IPv6 address and
585 * negative prefix length.
586 */
587 @Test(expected = IllegalArgumentException.class)
588 public void testInvalidValueOfAddressNegativePrefixLengthIPv6() {
589 IpAddress ipAddress;
590 IpPrefix ipPrefix;
591
592 ipAddress =
593 IpAddress.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
594 ipPrefix = IpPrefix.valueOf(ipAddress, -1);
595 }
596
597 /**
598 * Tests invalid valueOf() converter for IPv4 address and
599 * too long prefix length.
600 */
601 @Test(expected = IllegalArgumentException.class)
602 public void testInvalidValueOfAddressTooLongPrefixLengthIPv4() {
603 IpAddress ipAddress;
604 IpPrefix ipPrefix;
605
606 ipAddress = IpAddress.valueOf("1.2.3.4");
607 ipPrefix = IpPrefix.valueOf(ipAddress, 33);
608 }
609
610 /**
611 * Tests invalid valueOf() converter for IPv6 address and
612 * too long prefix length.
613 */
614 @Test(expected = IllegalArgumentException.class)
615 public void testInvalidValueOfAddressTooLongPrefixLengthIPv6() {
616 IpAddress ipAddress;
617 IpPrefix ipPrefix;
618
619 ipAddress =
620 IpAddress.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
621 ipPrefix = IpPrefix.valueOf(ipAddress, 129);
622 }
623
624 /**
625 * Tests valueOf() converter for IPv4 string.
626 */
627 @Test
628 public void testValueOfStringIPv4() {
629 IpPrefix ipPrefix;
630
631 ipPrefix = IpPrefix.valueOf("1.2.3.4/24");
632 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
633
634 ipPrefix = IpPrefix.valueOf("1.2.3.4/32");
635 assertThat(ipPrefix.toString(), is("1.2.3.4/32"));
636
637 ipPrefix = IpPrefix.valueOf("1.2.3.5/32");
638 assertThat(ipPrefix.toString(), is("1.2.3.5/32"));
639
640 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
641 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
642
643 ipPrefix = IpPrefix.valueOf("0.0.0.0/32");
644 assertThat(ipPrefix.toString(), is("0.0.0.0/32"));
645
646 ipPrefix = IpPrefix.valueOf("255.255.255.255/0");
647 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
648
649 ipPrefix = IpPrefix.valueOf("255.255.255.255/16");
650 assertThat(ipPrefix.toString(), is("255.255.0.0/16"));
651
652 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
653 assertThat(ipPrefix.toString(), is("255.255.255.255/32"));
654 }
655
656 /**
657 * Tests valueOf() converter for IPv6 string.
658 */
659 @Test
660 public void testValueOfStringIPv6() {
661 IpPrefix ipPrefix;
662
663 ipPrefix =
664 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8888/120");
665 assertThat(ipPrefix.toString(),
666 is("1111:2222:3333:4444:5555:6666:7777:8800/120"));
667
668 ipPrefix =
669 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8888/128");
670 assertThat(ipPrefix.toString(),
671 is("1111:2222:3333:4444:5555:6666:7777:8888/128"));
672
673 ipPrefix = IpPrefix.valueOf("::/0");
674 assertThat(ipPrefix.toString(), is("::/0"));
675
676 ipPrefix = IpPrefix.valueOf("::/128");
677 assertThat(ipPrefix.toString(), is("::/128"));
678
679 ipPrefix =
680 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/0");
681 assertThat(ipPrefix.toString(), is("::/0"));
682
683 ipPrefix =
684 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/64");
685 assertThat(ipPrefix.toString(), is("ffff:ffff:ffff:ffff::/64"));
686
687 ipPrefix =
688 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
689 assertThat(ipPrefix.toString(),
690 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
691 }
692
693 /**
694 * Tests invalid valueOf() converter for a null string.
695 */
696 @Test(expected = NullPointerException.class)
697 public void testInvalidValueOfNullString() {
698 IpPrefix ipPrefix;
699 String fromString;
700
701 fromString = null;
702 ipPrefix = IpPrefix.valueOf(fromString);
703 }
704
705 /**
706 * Tests invalid valueOf() converter for an empty string.
707 */
708 @Test(expected = IllegalArgumentException.class)
709 public void testInvalidValueOfEmptyString() {
710 IpPrefix ipPrefix;
711 String fromString;
712
713 fromString = "";
714 ipPrefix = IpPrefix.valueOf(fromString);
715 }
716
717 /**
718 * Tests invalid valueOf() converter for an incorrect string.
719 */
720 @Test(expected = IllegalArgumentException.class)
721 public void testInvalidValueOfIncorrectString() {
722 IpPrefix ipPrefix;
723 String fromString;
724
725 fromString = "NoSuchIpPrefix";
726 ipPrefix = IpPrefix.valueOf(fromString);
727 }
728
729 /**
730 * Tests invalid valueOf() converter for IPv4 string and
731 * negative prefix length.
732 */
733 @Test(expected = IllegalArgumentException.class)
734 public void testInvalidValueOfStringNegativePrefixLengthIPv4() {
735 IpPrefix ipPrefix;
736
737 ipPrefix = IpPrefix.valueOf("1.2.3.4/-1");
738 }
739
740 /**
741 * Tests invalid valueOf() converter for IPv6 string and
742 * negative prefix length.
743 */
744 @Test(expected = IllegalArgumentException.class)
745 public void testInvalidValueOfStringNegativePrefixLengthIPv6() {
746 IpPrefix ipPrefix;
747
748 ipPrefix =
749 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8888/-1");
750 }
751
752 /**
753 * Tests invalid valueOf() converter for IPv4 string and
754 * too long prefix length.
755 */
756 @Test(expected = IllegalArgumentException.class)
757 public void testInvalidValueOfStringTooLongPrefixLengthIPv4() {
758 IpPrefix ipPrefix;
759
760 ipPrefix = IpPrefix.valueOf("1.2.3.4/33");
761 }
762
763 /**
764 * Tests invalid valueOf() converter for IPv6 string and
765 * too long prefix length.
766 */
767 @Test(expected = IllegalArgumentException.class)
768 public void testInvalidValueOfStringTooLongPrefixLengthIPv6() {
769 IpPrefix ipPrefix;
770
771 ipPrefix =
772 IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8888/129");
773 }
774
775 /**
776 * Tests IP prefix contains another IP prefix for IPv4.
777 */
778 @Test
779 public void testContainsIpPrefixIPv4() {
780 IpPrefix ipPrefix;
781
782 ipPrefix = IpPrefix.valueOf("1.2.0.0/24");
783 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/24")));
784 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/32")));
785 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.4/32")));
786 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/16")));
787 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.3.0.0/24")));
788 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/16")));
789 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/0")));
790 assertFalse(ipPrefix.contains(IpPrefix.valueOf("255.255.255.255/32")));
791
792 ipPrefix = IpPrefix.valueOf("1.2.0.0/32");
793 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/24")));
794 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/32")));
795 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.4/32")));
796 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/16")));
797 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.3.0.0/24")));
798 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/16")));
799 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/0")));
800 assertFalse(ipPrefix.contains(IpPrefix.valueOf("255.255.255.255/32")));
801
802 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
803 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/24")));
804 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/32")));
805 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.4/32")));
806 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/16")));
807 assertTrue(ipPrefix.contains(IpPrefix.valueOf("1.3.0.0/24")));
808 assertTrue(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/16")));
809 assertTrue(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/0")));
810 assertTrue(ipPrefix.contains(IpPrefix.valueOf("255.255.255.255/32")));
811
812 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
813 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/24")));
814 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/32")));
815 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.4/32")));
816 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/16")));
817 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.3.0.0/24")));
818 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/16")));
819 assertFalse(ipPrefix.contains(IpPrefix.valueOf("0.0.0.0/0")));
820 assertTrue(ipPrefix.contains(IpPrefix.valueOf("255.255.255.255/32")));
Pavlin Radoslavovdbeab4c2015-02-23 09:37:49 -0800821
822 // Test when there is a mistmatch in the compared IP address families
823 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
824 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1111:2222:3333:4444::/120")));
825 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
826 assertFalse(ipPrefix.contains(IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128")));
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800827 }
828
829 /**
830 * Tests IP prefix contains another IP prefix for IPv6.
831 */
832 @Test
833 public void testContainsIpPrefixIPv6() {
834 IpPrefix ipPrefix;
835
836 ipPrefix = IpPrefix.valueOf("1111:2222:3333:4444::/120");
837 assertTrue(ipPrefix.contains(
838 IpPrefix.valueOf("1111:2222:3333:4444::/120")));
839 assertTrue(ipPrefix.contains(
840 IpPrefix.valueOf("1111:2222:3333:4444::/128")));
841 assertTrue(ipPrefix.contains(
842 IpPrefix.valueOf("1111:2222:3333:4444::1/128")));
843 assertFalse(ipPrefix.contains(
844 IpPrefix.valueOf("1111:2222:3333:4444::/64")));
845 assertFalse(ipPrefix.contains(
846 IpPrefix.valueOf("1111:2222:3333:4445::/120")));
847 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/64")));
848 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/0")));
849 assertFalse(ipPrefix.contains(
850 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128")));
851
852 ipPrefix = IpPrefix.valueOf("1111:2222:3333:4444::/128");
853 assertFalse(ipPrefix.contains(
854 IpPrefix.valueOf("1111:2222:3333:4444::/120")));
855 assertTrue(ipPrefix.contains(
856 IpPrefix.valueOf("1111:2222:3333:4444::/128")));
857 assertFalse(ipPrefix.contains(
858 IpPrefix.valueOf("1111:2222:3333:4444::1/128")));
859 assertFalse(ipPrefix.contains(
860 IpPrefix.valueOf("1111:2222:3333:4444::/64")));
861 assertFalse(ipPrefix.contains(
862 IpPrefix.valueOf("1111:2222:3333:4445::/120")));
863 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/64")));
864 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/0")));
865 assertFalse(ipPrefix.contains(
866 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128")));
867
868 ipPrefix = IpPrefix.valueOf("::/0");
869 assertTrue(ipPrefix.contains(
870 IpPrefix.valueOf("1111:2222:3333:4444::/120")));
871 assertTrue(ipPrefix.contains(
872 IpPrefix.valueOf("1111:2222:3333:4444::/128")));
873 assertTrue(ipPrefix.contains(
874 IpPrefix.valueOf("1111:2222:3333:4444::1/128")));
875 assertTrue(ipPrefix.contains(
876 IpPrefix.valueOf("1111:2222:3333:4444::/64")));
877 assertTrue(ipPrefix.contains(
878 IpPrefix.valueOf("1111:2222:3333:4445::/120")));
879 assertTrue(ipPrefix.contains(IpPrefix.valueOf("::/64")));
880 assertTrue(ipPrefix.contains(IpPrefix.valueOf("::/0")));
881 assertTrue(ipPrefix.contains(
882 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128")));
883
884 ipPrefix =
885 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
886 assertFalse(ipPrefix.contains(
887 IpPrefix.valueOf("1111:2222:3333:4444::/120")));
888 assertFalse(ipPrefix.contains(
889 IpPrefix.valueOf("1111:2222:3333:4444::/128")));
890 assertFalse(ipPrefix.contains(
891 IpPrefix.valueOf("1111:2222:3333:4444::1/128")));
892 assertFalse(ipPrefix.contains(
893 IpPrefix.valueOf("1111:2222:3333:4444::/64")));
894 assertFalse(ipPrefix.contains(
895 IpPrefix.valueOf("1111:2222:3333:4445::/120")));
896 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/64")));
897 assertFalse(ipPrefix.contains(IpPrefix.valueOf("::/0")));
898 assertTrue(ipPrefix.contains(
899 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128")));
Pavlin Radoslavovdbeab4c2015-02-23 09:37:49 -0800900
901 // Test when there is a mistmatch in the compared IP address families
902 ipPrefix = IpPrefix.valueOf("::/0");
903 assertFalse(ipPrefix.contains(IpPrefix.valueOf("1.2.0.0/24")));
904 ipPrefix = IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
905 assertFalse(ipPrefix.contains(IpPrefix.valueOf("255.255.255.255/32")));
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800906 }
907
908 /**
909 * Tests IP prefix contains IP address for IPv4.
910 */
911 @Test
912 public void testContainsIpAddressIPv4() {
913 IpPrefix ipPrefix;
914
915 ipPrefix = IpPrefix.valueOf("1.2.0.0/24");
916 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.2.0.0")));
917 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.2.0.4")));
918 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.3.0.0")));
919 assertFalse(ipPrefix.contains(IpAddress.valueOf("0.0.0.0")));
920 assertFalse(ipPrefix.contains(IpAddress.valueOf("255.255.255.255")));
921
922 ipPrefix = IpPrefix.valueOf("1.2.0.0/32");
923 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.2.0.0")));
924 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.2.0.4")));
925 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.3.0.0")));
926 assertFalse(ipPrefix.contains(IpAddress.valueOf("0.0.0.0")));
927 assertFalse(ipPrefix.contains(IpAddress.valueOf("255.255.255.255")));
928
929 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
930 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.2.0.0")));
931 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.2.0.4")));
932 assertTrue(ipPrefix.contains(IpAddress.valueOf("1.3.0.0")));
933 assertTrue(ipPrefix.contains(IpAddress.valueOf("0.0.0.0")));
934 assertTrue(ipPrefix.contains(IpAddress.valueOf("255.255.255.255")));
935
936 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
937 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.2.0.0")));
938 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.2.0.4")));
939 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.3.0.0")));
940 assertFalse(ipPrefix.contains(IpAddress.valueOf("0.0.0.0")));
941 assertTrue(ipPrefix.contains(IpAddress.valueOf("255.255.255.255")));
Pavlin Radoslavovdbeab4c2015-02-23 09:37:49 -0800942
943 // Test when there is a mistmatch in the compared IP address families
944 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
945 assertFalse(ipPrefix.contains(IpAddress.valueOf("1111:2222:3333:4444::")));
946 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
947 assertFalse(ipPrefix.contains(IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -0800948 }
949
950 /**
951 * Tests IP prefix contains IP address for IPv6.
952 */
953 @Test
954 public void testContainsIpAddressIPv6() {
955 IpPrefix ipPrefix;
956
957 ipPrefix = IpPrefix.valueOf("1111:2222:3333:4444::/120");
958 assertTrue(ipPrefix.contains(
959 IpAddress.valueOf("1111:2222:3333:4444::")));
960 assertTrue(ipPrefix.contains(
961 IpAddress.valueOf("1111:2222:3333:4444::1")));
962 assertFalse(ipPrefix.contains(
963 IpAddress.valueOf("1111:2222:3333:4445::")));
964 assertFalse(ipPrefix.contains(IpAddress.valueOf("::")));
965 assertFalse(ipPrefix.contains(
966 IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
967
968 ipPrefix = IpPrefix.valueOf("1111:2222:3333:4444::/128");
969 assertTrue(ipPrefix.contains(
970 IpAddress.valueOf("1111:2222:3333:4444::")));
971 assertFalse(ipPrefix.contains(
972 IpAddress.valueOf("1111:2222:3333:4444::1")));
973 assertFalse(ipPrefix.contains(
974 IpAddress.valueOf("1111:2222:3333:4445::")));
975 assertFalse(ipPrefix.contains(IpAddress.valueOf("::")));
976 assertFalse(ipPrefix.contains(
977 IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
978
979 ipPrefix = IpPrefix.valueOf("::/0");
980 assertTrue(ipPrefix.contains(
981 IpAddress.valueOf("1111:2222:3333:4444::")));
982 assertTrue(ipPrefix.contains(
983 IpAddress.valueOf("1111:2222:3333:4444::1")));
984 assertTrue(ipPrefix.contains(
985 IpAddress.valueOf("1111:2222:3333:4445::")));
986 assertTrue(ipPrefix.contains(IpAddress.valueOf("::")));
987 assertTrue(ipPrefix.contains(
988 IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
989
990 ipPrefix =
991 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
992 assertFalse(ipPrefix.contains(
993 IpAddress.valueOf("1111:2222:3333:4444::")));
994 assertFalse(ipPrefix.contains(
995 IpAddress.valueOf("1111:2222:3333:4444::1")));
996 assertFalse(ipPrefix.contains(
997 IpAddress.valueOf("1111:2222:3333:4445::")));
998 assertFalse(ipPrefix.contains(IpAddress.valueOf("::")));
999 assertTrue(ipPrefix.contains(
1000 IpAddress.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff")));
Pavlin Radoslavovdbeab4c2015-02-23 09:37:49 -08001001
1002 // Test when there is a mistmatch in the compared IP address families
1003 ipPrefix = IpPrefix.valueOf("::/0");
1004 assertFalse(ipPrefix.contains(IpAddress.valueOf("1.2.0.0")));
1005 ipPrefix = IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
1006 assertFalse(ipPrefix.contains(IpAddress.valueOf("255.255.255.255")));
Pavlin Radoslavov34c921a2014-11-03 15:41:22 -08001007 }
1008
1009 /**
1010 * Tests equality of {@link IpPrefix} for IPv4.
1011 */
1012 @Test
1013 public void testEqualityIPv4() {
1014 new EqualsTester()
1015 .addEqualityGroup(IpPrefix.valueOf("1.2.0.0/24"),
1016 IpPrefix.valueOf("1.2.0.0/24"),
1017 IpPrefix.valueOf("1.2.0.4/24"))
1018 .addEqualityGroup(IpPrefix.valueOf("1.2.0.0/16"),
1019 IpPrefix.valueOf("1.2.0.0/16"))
1020 .addEqualityGroup(IpPrefix.valueOf("1.2.0.0/32"),
1021 IpPrefix.valueOf("1.2.0.0/32"))
1022 .addEqualityGroup(IpPrefix.valueOf("1.3.0.0/24"),
1023 IpPrefix.valueOf("1.3.0.0/24"))
1024 .addEqualityGroup(IpPrefix.valueOf("0.0.0.0/0"),
1025 IpPrefix.valueOf("0.0.0.0/0"))
1026 .addEqualityGroup(IpPrefix.valueOf("255.255.255.255/32"),
1027 IpPrefix.valueOf("255.255.255.255/32"))
1028 .testEquals();
1029 }
1030
1031 /**
1032 * Tests equality of {@link IpPrefix} for IPv6.
1033 */
1034 @Test
1035 public void testEqualityIPv6() {
1036 new EqualsTester()
1037 .addEqualityGroup(
1038 IpPrefix.valueOf("1111:2222:3333:4444::/120"),
1039 IpPrefix.valueOf("1111:2222:3333:4444::1/120"),
1040 IpPrefix.valueOf("1111:2222:3333:4444::/120"))
1041 .addEqualityGroup(
1042 IpPrefix.valueOf("1111:2222:3333:4444::/64"),
1043 IpPrefix.valueOf("1111:2222:3333:4444::/64"))
1044 .addEqualityGroup(
1045 IpPrefix.valueOf("1111:2222:3333:4444::/128"),
1046 IpPrefix.valueOf("1111:2222:3333:4444::/128"))
1047 .addEqualityGroup(
1048 IpPrefix.valueOf("1111:2222:3333:4445::/64"),
1049 IpPrefix.valueOf("1111:2222:3333:4445::/64"))
1050 .addEqualityGroup(
1051 IpPrefix.valueOf("::/0"),
1052 IpPrefix.valueOf("::/0"))
1053 .addEqualityGroup(
1054 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"),
1055 IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"))
1056 .testEquals();
1057 }
1058
1059 /**
1060 * Tests object string representation for IPv4.
1061 */
1062 @Test
1063 public void testToStringIPv4() {
1064 IpPrefix ipPrefix;
1065
1066 ipPrefix = IpPrefix.valueOf("1.2.3.0/24");
1067 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
1068
1069 ipPrefix = IpPrefix.valueOf("1.2.3.4/24");
1070 assertThat(ipPrefix.toString(), is("1.2.3.0/24"));
1071
1072 ipPrefix = IpPrefix.valueOf("0.0.0.0/0");
1073 assertThat(ipPrefix.toString(), is("0.0.0.0/0"));
1074
1075 ipPrefix = IpPrefix.valueOf("255.255.255.255/32");
1076 assertThat(ipPrefix.toString(), is("255.255.255.255/32"));
1077 }
1078
1079 /**
1080 * Tests object string representation for IPv6.
1081 */
1082 @Test
1083 public void testToStringIPv6() {
1084 IpPrefix ipPrefix;
1085
1086 ipPrefix = IpPrefix.valueOf("1100::/8");
1087 assertThat(ipPrefix.toString(), is("1100::/8"));
1088
1089 ipPrefix = IpPrefix.valueOf("1111:2222:3333:4444:5555:6666:7777:8885/8");
1090 assertThat(ipPrefix.toString(), is("1100::/8"));
1091
1092 ipPrefix = IpPrefix.valueOf("::/0");
1093 assertThat(ipPrefix.toString(), is("::/0"));
1094
1095 ipPrefix = IpPrefix.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128");
1096 assertThat(ipPrefix.toString(),
1097 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"));
Jonathan Hart70da5122014-10-01 16:37:42 -07001098 }
Ayaka Koshibe16698a32014-09-13 22:19:02 -07001099}