BUG-2825: expand IPv6 test suite 84/35384/2
authorRobert Varga <robert.varga@pantheon.sk>
Thu, 25 Feb 2016 11:48:00 +0000 (12:48 +0100)
committerRobert Varga <robert.varga@pantheon.sk>
Thu, 25 Feb 2016 12:39:06 +0000 (13:39 +0100)
This adds some framework for ease of writing test cases and adds some
more.

Change-Id: I85ddc21e90b35629332a51fba8e9751d6f6457c9
Signed-off-by: Robert Varga <robert.varga@pantheon.sk>
model/ietf/ietf-type-util/src/test/java/org/opendaylight/mdsal/model/ietf/util/Ipv6UtilsTest.java

index 74b03fc275cadc43691c061b15f9e699ce9fcdd1..12843a17a5ee43e9a5da22dbe787c9e4e00f01f6 100644 (file)
@@ -7,17 +7,84 @@
  */
 package org.opendaylight.mdsal.model.ietf.util;
 
-import com.google.common.net.InetAddresses;
-import org.junit.Assert;
+import static com.google.common.net.InetAddresses.forString;
+import static org.junit.Assert.assertArrayEquals;
+import static org.opendaylight.mdsal.model.ietf.util.Ipv6Utils.bytesForString;
 import org.junit.Test;
 
-/**
- * @author Anton Ivanov aivanov@brocade.com
- */
 public class Ipv6UtilsTest {
     @Test
+    public void testDiscards() {
+        assertEqualResult("2001:0000:3238:DFE1:63:0000:0000:FEFB");
+        assertEqualResult("2001:0000:3238:DFE1:63::FEFB");
+        assertEqualResult("2001:0:3238:DFE1:63::FEFB");
+        assertEqualResult("::1");
+        assertEqualResult("::");
+    }
+
+    /**
+     * @author Anton Ivanov aivanov@brocade.com
+     */
+    @Test
     public void testFullQuads() {
-        byte [] ipv6binary = Ipv6Utils.bytesForString("0000:0000:0000:0000:0000:0000:0000:0001");
-        Assert.assertArrayEquals(InetAddresses.forString("::1").getAddress(), ipv6binary);
+        assertEqualResult("0000:0000:0000:0000:0000:0000:0000:0001");
+    }
+
+    @Test
+    public void testZoneIndex() {
+        assertArrayEquals(forString("::1").getAddress(), bytesForString("::1%2"));
+    }
+
+    @Test
+    public void testRfc6052() {
+        assertEqualResult("2001:db8:c000:221::");
+        assertEqualResult("2001:db8:1c0:2:21::");
+        assertEqualResult("2001:db8:122:c000:2:2100::");
+        assertEqualResult("2001:db8:122:3c0:0:221::");
+        assertEqualResult("2001:db8:122:344:c0:2:2100::");
+        assertEqualResult("2001:db8:122:344::192.0.2.33");
+
+        assertEqualResult("64:ff9b::192.0.2.33");
+    }
+
+    @Test
+    public void testRfc5952leadingZeroes() {
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:0001");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:001");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:01");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:1");
+    }
+
+    @Test
+    public void testRfc5952zeroCompression() {
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd::1");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:0:1");
+        assertEqualResult("2001:db8:0:0:0::1");
+        assertEqualResult("2001:db8:0:0::1");
+        assertEqualResult("2001:db8:0::1");
+        assertEqualResult("2001:db8::1");
+        assertEqualResult("2001:db8::aaaa:0:0:1");
+        assertEqualResult("2001:db8:0:0:aaaa::1");
+    }
+
+    @Test
+    public void testRfc5952upperLowerCase() {
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:aaaa");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AAAA");
+        assertEqualResult("2001:db8:aaaa:bbbb:cccc:dddd:eeee:AaAa");
+    }
+
+    @Test
+    public void testRfc5952specials() {
+        // Can't use Guava for these, as it will return an IPv4 address
+        assertArrayEquals(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xff, (byte) 0xff, (byte)192, 0, 2, 1 },
+            bytesForString("::ffff:192.0.2.1"));
+        assertArrayEquals(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xff, (byte) 0xff, (byte)192, 0, 2, 1 },
+            bytesForString("0:0:0:0:0:ffff:192.0.2.1"));
+    }
+
+    // Utility for quick comparison with Guava
+    private static void assertEqualResult(final String str) {
+        assertArrayEquals(forString(str).getAddress(), bytesForString(str));
     }
 }