blob: 90c104ecb03b85e0031282b95d9e7b39e353850c [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 */
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070016package org.onlab.packet;
17
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080018import com.google.common.net.InetAddresses;
19import com.google.common.testing.EqualsTester;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070020import org.junit.Test;
21
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080022import java.net.InetAddress;
23
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070024import static org.hamcrest.Matchers.is;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070025import static org.junit.Assert.assertThat;
26import static org.junit.Assert.assertTrue;
27import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
28
29/**
30 * Tests for class {@link Ip6Address}.
31 */
32public class Ip6AddressTest {
33 /**
34 * Tests the immutability of {@link Ip6Address}.
35 */
36 @Test
37 public void testImmutable() {
38 assertThatClassIsImmutable(Ip6Address.class);
39 }
40
41 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080042 * Tests the IPv4 address version constant.
43 */
44 @Test
45 public void testAddressVersion() {
46 assertThat(Ip6Address.VERSION, is(IpAddress.Version.INET6));
47 }
48
49 /**
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070050 * Tests the length of the address in bytes (octets).
51 */
52 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080053 public void testAddrByteLength() {
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070054 assertThat(Ip6Address.BYTE_LENGTH, is(16));
55 }
56
57 /**
58 * Tests the length of the address in bits.
59 */
60 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080061 public void testAddrBitLength() {
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070062 assertThat(Ip6Address.BIT_LENGTH, is(128));
63 }
64
65 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080066 * Tests returning the IP address version.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070067 */
68 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080069 public void testVersion() {
70 IpAddress ipAddress;
71
72 // IPv6
73 ipAddress = IpAddress.valueOf("::");
74 assertThat(ipAddress.version(), is(IpAddress.Version.INET6));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070075 }
76
77 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080078 * Tests returning an IPv6 address as a byte array.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -070079 */
80 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -080081 public void testAddressToOctetsIPv6() {
82 Ip6Address ipAddress;
83 byte[] value;
84
85 value = new byte[] {0x11, 0x11, 0x22, 0x22,
86 0x33, 0x33, 0x44, 0x44,
87 0x55, 0x55, 0x66, 0x66,
88 0x77, 0x77,
89 (byte) 0x88, (byte) 0x88};
90 ipAddress =
91 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
92 assertThat(ipAddress.toOctets(), is(value));
93
94 value = new byte[] {0x00, 0x00, 0x00, 0x00,
95 0x00, 0x00, 0x00, 0x00,
96 0x00, 0x00, 0x00, 0x00,
97 0x00, 0x00, 0x00, 0x00};
98 ipAddress = Ip6Address.valueOf("::");
99 assertThat(ipAddress.toOctets(), is(value));
100
101 value = new byte[] {(byte) 0xff, (byte) 0xff,
102 (byte) 0xff, (byte) 0xff,
103 (byte) 0xff, (byte) 0xff,
104 (byte) 0xff, (byte) 0xff,
105 (byte) 0xff, (byte) 0xff,
106 (byte) 0xff, (byte) 0xff,
107 (byte) 0xff, (byte) 0xff,
108 (byte) 0xff, (byte) 0xff};
109 ipAddress =
110 Ip6Address.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
111 assertThat(ipAddress.toOctets(), is(value));
112 }
113
114 /**
115 * Tests valueOf() converter for IPv6 byte array.
116 */
117 @Test
118 public void testValueOfByteArrayIPv6() {
119 Ip6Address ipAddress;
120 byte[] value;
121
122 value = new byte[] {0x11, 0x11, 0x22, 0x22,
123 0x33, 0x33, 0x44, 0x44,
124 0x55, 0x55, 0x66, 0x66,
125 0x77, 0x77,
126 (byte) 0x88, (byte) 0x88};
127 ipAddress = Ip6Address.valueOf(value);
128 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700129 is("1111:2222:3333:4444:5555:6666:7777:8888"));
130
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800131 value = new byte[] {0x00, 0x00, 0x00, 0x00,
132 0x00, 0x00, 0x00, 0x00,
133 0x00, 0x00, 0x00, 0x00,
134 0x00, 0x00, 0x00, 0x00};
135 ipAddress = Ip6Address.valueOf(value);
136 assertThat(ipAddress.toString(), is("::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700137
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800138 value = new byte[] {(byte) 0xff, (byte) 0xff,
139 (byte) 0xff, (byte) 0xff,
140 (byte) 0xff, (byte) 0xff,
141 (byte) 0xff, (byte) 0xff,
142 (byte) 0xff, (byte) 0xff,
143 (byte) 0xff, (byte) 0xff,
144 (byte) 0xff, (byte) 0xff,
145 (byte) 0xff, (byte) 0xff};
146 ipAddress = Ip6Address.valueOf(value);
147 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700148 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
149 }
150
151 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800152 * Tests invalid valueOf() converter for a null array for IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700153 */
154 @Test(expected = NullPointerException.class)
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800155 public void testInvalidValueOfNullArrayIPv6() {
156 Ip6Address ipAddress;
Pavlin Radoslavov315d6c82014-11-04 15:36:04 -0800157 byte[] value;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700158
Pavlin Radoslavov315d6c82014-11-04 15:36:04 -0800159 value = null;
160 ipAddress = Ip6Address.valueOf(value);
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700161 }
162
163 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800164 * Tests invalid valueOf() converger for an array that is too short for
165 * IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700166 */
167 @Test(expected = IllegalArgumentException.class)
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800168 public void testInvalidValueOfShortArrayIPv6() {
169 Ip6Address ipAddress;
Pavlin Radoslavov315d6c82014-11-04 15:36:04 -0800170 byte[] value;
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800171
Pavlin Radoslavov315d6c82014-11-04 15:36:04 -0800172 value = new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
173 ipAddress = Ip6Address.valueOf(value);
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700174 }
175
176 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800177 * Tests valueOf() converter for IPv6 byte array and an offset.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700178 */
179 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800180 public void testValueOfByteArrayOffsetIPv6() {
181 Ip6Address ipAddress;
182 byte[] value;
183
184 value = new byte[] {11, 22, 33, // Preamble
185 0x11, 0x11, 0x22, 0x22,
186 0x33, 0x33, 0x44, 0x44,
187 0x55, 0x55, 0x66, 0x66,
188 0x77, 0x77,
189 (byte) 0x88, (byte) 0x88,
190 44, 55}; // Extra bytes
191 ipAddress = Ip6Address.valueOf(value, 3);
192 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700193 is("1111:2222:3333:4444:5555:6666:7777:8888"));
194
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800195 value = new byte[] {11, 22, // Preamble
196 0x00, 0x00, 0x00, 0x00,
197 0x00, 0x00, 0x00, 0x00,
198 0x00, 0x00, 0x00, 0x00,
199 0x00, 0x00, 0x00, 0x00,
200 33}; // Extra bytes
201 ipAddress = Ip6Address.valueOf(value, 2);
202 assertThat(ipAddress.toString(), is("::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700203
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800204 value = new byte[] {11, 22, // Preamble
205 (byte) 0xff, (byte) 0xff,
206 (byte) 0xff, (byte) 0xff,
207 (byte) 0xff, (byte) 0xff,
208 (byte) 0xff, (byte) 0xff,
209 (byte) 0xff, (byte) 0xff,
210 (byte) 0xff, (byte) 0xff,
211 (byte) 0xff, (byte) 0xff,
212 (byte) 0xff, (byte) 0xff,
213 33}; // Extra bytes
214 ipAddress = Ip6Address.valueOf(value, 2);
215 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700216 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
217 }
218
219 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800220 * Tests invalid valueOf() converger for an array and an invalid offset
221 * for IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700222 */
223 @Test(expected = IllegalArgumentException.class)
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800224 public void testInvalidValueOfArrayInvalidOffsetIPv6() {
225 Ip6Address ipAddress;
226 byte[] value;
227
228 value = new byte[] {11, 22, 33, // Preamble
229 0x11, 0x11, 0x22, 0x22,
230 0x33, 0x33, 0x44, 0x44,
231 0x55, 0x55, 0x66, 0x66,
232 0x77, 0x77,
233 (byte) 0x88, (byte) 0x88,
234 44, 55}; // Extra bytes
235 ipAddress = Ip6Address.valueOf(value, 6);
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700236 }
237
238 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800239 * Tests valueOf() converter for IPv6 InetAddress.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700240 */
241 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800242 public void testValueOfInetAddressIPv6() {
243 Ip6Address ipAddress;
244 InetAddress inetAddress;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700245
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800246 inetAddress =
247 InetAddresses.forString("1111:2222:3333:4444:5555:6666:7777:8888");
248 ipAddress = Ip6Address.valueOf(inetAddress);
249 assertThat(ipAddress.toString(),
250 is("1111:2222:3333:4444:5555:6666:7777:8888"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700251
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800252 inetAddress = InetAddresses.forString("::");
253 ipAddress = Ip6Address.valueOf(inetAddress);
254 assertThat(ipAddress.toString(), is("::"));
255
256 inetAddress =
257 InetAddresses.forString("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
258 ipAddress = Ip6Address.valueOf(inetAddress);
259 assertThat(ipAddress.toString(),
260 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700261 }
262
263 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800264 * Tests valueOf() converter for IPv6 string.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700265 */
266 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800267 public void testValueOfStringIPv6() {
268 Ip6Address ipAddress;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700269
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800270 ipAddress =
271 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
272 assertThat(ipAddress.toString(),
273 is("1111:2222:3333:4444:5555:6666:7777:8888"));
274
275 ipAddress = Ip6Address.valueOf("::");
276 assertThat(ipAddress.toString(), is("::"));
277
278 ipAddress =
279 Ip6Address.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
280 assertThat(ipAddress.toString(),
281 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
282 }
283
284 /**
285 * Tests invalid valueOf() converter for a null string.
286 */
287 @Test(expected = NullPointerException.class)
288 public void testInvalidValueOfNullString() {
289 Ip6Address ipAddress;
290
291 String fromString = null;
292 ipAddress = Ip6Address.valueOf(fromString);
293 }
294
295 /**
296 * Tests invalid valueOf() converter for an empty string.
297 */
298 @Test(expected = IllegalArgumentException.class)
299 public void testInvalidValueOfEmptyString() {
300 Ip6Address ipAddress;
301
302 String fromString = "";
303 ipAddress = Ip6Address.valueOf(fromString);
304 }
305
306 /**
307 * Tests invalid valueOf() converter for an incorrect string.
308 */
309 @Test(expected = IllegalArgumentException.class)
310 public void testInvalidValueOfIncorrectString() {
311 Ip6Address ipAddress;
312
313 String fromString = "NoSuchIpAddress";
314 ipAddress = Ip6Address.valueOf(fromString);
315 }
316
317 /**
318 * Tests making a mask prefix for a given prefix length for IPv6.
319 */
320 @Test
321 public void testMakeMaskPrefixIPv6() {
322 Ip6Address ipAddress;
323
324 ipAddress = Ip6Address.makeMaskPrefix(8);
325 assertThat(ipAddress.toString(), is("ff00::"));
326
327 ipAddress = Ip6Address.makeMaskPrefix(120);
328 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700329 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00"));
330
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800331 ipAddress = Ip6Address.makeMaskPrefix(0);
332 assertThat(ipAddress.toString(), is("::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700333
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800334 ipAddress = Ip6Address.makeMaskPrefix(128);
335 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700336 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
337
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800338 ipAddress = Ip6Address.makeMaskPrefix(64);
339 assertThat(ipAddress.toString(), is("ffff:ffff:ffff:ffff::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700340 }
341
342 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800343 * Tests making a mask prefix for an invalid prefix length for IPv6:
344 * negative prefix length.
345 */
346 @Test(expected = IllegalArgumentException.class)
347 public void testInvalidMakeNegativeMaskPrefixIPv6() {
348 Ip6Address ipAddress;
349
350 ipAddress = Ip6Address.makeMaskPrefix(-1);
351 }
352
353 /**
354 * Tests making a mask prefix for an invalid prefix length for IPv6:
355 * too long prefix length.
356 */
357 @Test(expected = IllegalArgumentException.class)
358 public void testInvalidMakeTooLongMaskPrefixIPv6() {
359 Ip6Address ipAddress;
360
361 ipAddress = Ip6Address.makeMaskPrefix(129);
362 }
363
364 /**
365 * Tests making of a masked address for IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700366 */
367 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800368 public void testMakeMaskedAddressIPv6() {
369 Ip6Address ipAddress =
370 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8885");
371 Ip6Address ipAddressMasked;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700372
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800373 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 8);
374 assertThat(ipAddressMasked.toString(), is("1100::"));
375
376 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 120);
377 assertThat(ipAddressMasked.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700378 is("1111:2222:3333:4444:5555:6666:7777:8800"));
379
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800380 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 0);
381 assertThat(ipAddressMasked.toString(), is("::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700382
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800383 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 128);
384 assertThat(ipAddressMasked.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700385 is("1111:2222:3333:4444:5555:6666:7777:8885"));
386
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800387 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 64);
388 assertThat(ipAddressMasked.toString(), is("1111:2222:3333:4444::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700389 }
390
391 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800392 * Tests making of a masked address for invalid prefix length for IPv6:
393 * negative prefix length.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700394 */
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800395 @Test(expected = IllegalArgumentException.class)
396 public void testInvalidMakeNegativeMaskedAddressIPv6() {
397 Ip6Address ipAddress =
398 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8885");
399 Ip6Address ipAddressMasked;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700400
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800401 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, -1);
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700402 }
403
404 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800405 * Tests making of a masked address for an invalid prefix length for IPv6:
406 * too long prefix length.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700407 */
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800408 @Test(expected = IllegalArgumentException.class)
409 public void testInvalidMakeTooLongMaskedAddressIPv6() {
410 Ip6Address ipAddress =
411 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8885");
412 Ip6Address ipAddressMasked;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700413
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800414 ipAddressMasked = Ip6Address.makeMaskedAddress(ipAddress, 129);
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700415 }
416
417 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800418 * Tests comparison of {@link Ip6Address} for IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700419 */
420 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800421 public void testComparisonIPv6() {
422 Ip6Address addr1, addr2, addr3, addr4;
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700423
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800424 addr1 = Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
425 addr2 = Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
426 addr3 = Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8887");
427 addr4 = Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8889");
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700428 assertTrue(addr1.compareTo(addr2) == 0);
429 assertTrue(addr1.compareTo(addr3) > 0);
430 assertTrue(addr1.compareTo(addr4) < 0);
431
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800432 addr1 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8888");
433 addr2 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8888");
434 addr3 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8887");
435 addr4 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8889");
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700436 assertTrue(addr1.compareTo(addr2) == 0);
437 assertTrue(addr1.compareTo(addr3) > 0);
438 assertTrue(addr1.compareTo(addr4) < 0);
439
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800440 addr1 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8888");
441 addr2 = Ip6Address.valueOf("ffff:2222:3333:4444:5555:6666:7777:8888");
442 addr3 = Ip6Address.valueOf("ffff:2222:3333:4443:5555:6666:7777:8888");
443 addr4 = Ip6Address.valueOf("ffff:2222:3333:4445:5555:6666:7777:8888");
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700444 assertTrue(addr1.compareTo(addr2) == 0);
445 assertTrue(addr1.compareTo(addr3) > 0);
446 assertTrue(addr1.compareTo(addr4) < 0);
447 }
448
449 /**
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800450 * Tests equality of {@link Ip6Address} for IPv6.
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700451 */
452 @Test
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800453 public void testEqualityIPv6() {
454 new EqualsTester()
455 .addEqualityGroup(
456 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888"),
457 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888"))
458 .addEqualityGroup(
459 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:888a"),
460 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:888a"))
461 .addEqualityGroup(
462 Ip6Address.valueOf("::"),
463 Ip6Address.valueOf("::"))
464 .addEqualityGroup(
465 Ip6Address.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"),
466 Ip6Address.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"))
467 .testEquals();
468 }
469
470 /**
471 * Tests object string representation for IPv6.
472 */
473 @Test
474 public void testToStringIPv6() {
475 Ip6Address ipAddress;
476
477 ipAddress =
478 Ip6Address.valueOf("1111:2222:3333:4444:5555:6666:7777:8888");
479 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700480 is("1111:2222:3333:4444:5555:6666:7777:8888"));
481
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800482 ipAddress = Ip6Address.valueOf("1111::8888");
483 assertThat(ipAddress.toString(), is("1111::8888"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700484
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800485 ipAddress = Ip6Address.valueOf("1111::");
486 assertThat(ipAddress.toString(), is("1111::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700487
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800488 ipAddress = Ip6Address.valueOf("::8888");
489 assertThat(ipAddress.toString(), is("::8888"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700490
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800491 ipAddress = Ip6Address.valueOf("::");
492 assertThat(ipAddress.toString(), is("::"));
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700493
Pavlin Radoslavovf182f012014-11-04 15:03:18 -0800494 ipAddress =
495 Ip6Address.valueOf("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff");
496 assertThat(ipAddress.toString(),
Pavlin Radoslavov9de27722014-10-23 20:31:15 -0700497 is("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"));
498 }
499}