BUG-2825: more IPv6 tests
[mdsal.git] / model / ietf / ietf-type-util / src / test / java / org / opendaylight / mdsal / model / ietf / util / Ipv6UtilsTest.java
1 /*
2  * Copyright (c) 2014 Brocade Communications Systems Inc and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.model.ietf.util;
9
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;
14
15 public class Ipv6UtilsTest {
16     @Test
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("::");
23     }
24
25     /**
26      * @author Anton Ivanov aivanov@brocade.com
27      */
28     @Test
29     public void testFullQuads() {
30         assertEqualResult("0000:0000:0000:0000:0000:0000:0000:0001");
31     }
32
33     @Test
34     public void testZoneIndex() {
35         assertArrayEquals(forString("::1").getAddress(), bytesForString("::1%2"));
36     }
37
38     @Test
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("::");
49
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"));
53
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"));
58     }
59
60     @Test
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");
66     }
67
68     @Test
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");
78     }
79
80     @Test
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");
85     }
86
87     @Test
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"));
94     }
95
96     @Test
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");
104
105         assertEqualResult("64:ff9b::192.0.2.33");
106     }
107
108     // Utility for quick comparison with Guava
109     private static void assertEqualResult(final String str) {
110         assertArrayEquals(forString(str).getAddress(), bytesForString(str));
111     }
112 }