2 * Copyright (c) 2014 Brocade Communications Systems Inc and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.model.ietf.util;
10 import static com.google.common.net.InetAddresses.forString;
11 import static org.junit.Assert.assertArrayEquals;
12 import static org.opendaylight.mdsal.model.ietf.util.Ipv6Utils.bytesForString;
13 import org.junit.Test;
15 public class Ipv6UtilsTest {
17 public void testDiscards() {
18 assertEqualResult("2001:0000:3238:DFE1:63:0000:0000:FEFB");
19 assertEqualResult("2001:0000:3238:DFE1:63::FEFB");
20 assertEqualResult("2001:0:3238:DFE1:63::FEFB");
21 assertEqualResult("::1");
22 assertEqualResult("::");
26 * @author Anton Ivanov aivanov@brocade.com
29 public void testFullQuads() {
30 assertEqualResult("0000:0000:0000:0000:0000:0000:0000:0001");
34 public void testZoneIndex() {
35 assertArrayEquals(forString("::1").getAddress(), bytesForString("::1%2"));
39 public void testRfc4291() {
40 assertEqualResult("ABCD:EF01:2345:6789:ABCD:EF01:2345:6789");
41 assertEqualResult("2001:DB8:0:0:8:800:200C:417A");
42 assertEqualResult("2001:DB8::8:800:200C:417A");
43 assertEqualResult("FF01:0:0:0:0:0:0:101");
44 assertEqualResult("FF01::101");
45 assertEqualResult("0:0:0:0:0:0:0:1");
46 assertEqualResult("::1");
47 assertEqualResult("0:0:0:0:0:0:0:0");
48 assertEqualResult("::");
50 final byte[] test1 = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 1, 68, 3 };
51 assertArrayEquals(test1, bytesForString("0:0:0:0:0:0:13.1.68.3"));
52 assertArrayEquals(test1, bytesForString("::13.1.68.3"));
54 final byte[] test2 = new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte)255, (byte)255,
55 (byte)129, (byte)144, 52, 38 };
56 assertArrayEquals(test2, bytesForString("0:0:0:0:0:FFFF:129.144.52.38"));
57 assertArrayEquals(test2, bytesForString("::FFFF:129.144.52.38"));
61 public void testRfc5952leadingZeroes() {
62 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001");
63 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:001");
64 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:01");
65 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1");
69 public void testRfc5952zeroCompression() {
70 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd::1");
71 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:0:1");
72 assertEqualResult("2001:db8:0:0:0::1");
73 assertEqualResult("2001:db8:0:0::1");
74 assertEqualResult("2001:db8:0::1");
75 assertEqualResult("2001:db8::1");
76 assertEqualResult("2001:db8::aaaa:0:0:1");
77 assertEqualResult("2001:db8:0:0:aaaa::1");
81 public void testRfc5952upperLowerCase() {
82 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa");
83 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AAAA");
84 assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AaAa");
88 public void testRfc5952specials() {
89 // Can't use Guava for these, as it will return an IPv4 address
90 assertArrayEquals(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xff, (byte) 0xff, (byte)192, 0, 2, 1 },
91 bytesForString("::ffff:192.0.2.1"));
92 assertArrayEquals(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xff, (byte) 0xff, (byte)192, 0, 2, 1 },
93 bytesForString("0:0:0:0:0:ffff:192.0.2.1"));
97 public void testRfc6052() {
98 assertEqualResult("2001:db8:c000:221::");
99 assertEqualResult("2001:db8:1c0:2:21::");
100 assertEqualResult("2001:db8:122:c000:2:2100::");
101 assertEqualResult("2001:db8:122:3c0:0:221::");
102 assertEqualResult("2001:db8:122:344:c0:2:2100::");
103 assertEqualResult("2001:db8:122:344::192.0.2.33");
105 assertEqualResult("64:ff9b::192.0.2.33");
108 // Utility for quick comparison with Guava
109 private static void assertEqualResult(final String str) {
110 assertArrayEquals(forString(str).getAddress(), bytesForString(str));