HC2VPP-79: provide AddressTranslator.ipAddressToArray for IpAddressNoZone 32/13332/1
authorMarek Gradzki <[email protected]>
Tue, 3 Jul 2018 11:34:17 +0000 (13:34 +0200)
committerMarek Gradzki <[email protected]>
Tue, 3 Jul 2018 11:34:17 +0000 (13:34 +0200)
Change-Id: I637842ea6a582676ab305c29b5d8464987537be0
Signed-off-by: Marek Gradzki <[email protected]>
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/AddressTranslator.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/AddressTranslatorTest.java
vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java

index c2f9dee..fbf8900 100644 (file)
@@ -21,6 +21,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import java.util.Arrays;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
@@ -59,6 +60,16 @@ public interface AddressTranslator extends Ipv4Translator, Ipv6Translator, MacTr
         }
     }
 
+    default byte[] ipAddressToArray(IpAddressNoZone address) {
+        checkNotNull(address, "Cannot resolve null address");
+
+        if (isIpv6(address)) {
+            return ipv6AddressNoZoneToArray(address.getIpv6AddressNoZone());
+        } else {
+            return ipv4AddressNoZoneToArray(address.getIpv4AddressNoZone());
+        }
+    }
+
     /**
      * Converts array bytes to {@link IpAddress}.
      */
index dbfe81d..b1199d7 100644 (file)
@@ -24,6 +24,7 @@ import com.google.common.net.InetAddresses;
 import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IetfInetUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
@@ -90,6 +91,15 @@ public interface Ipv6Translator extends ByteDataTranslator {
         return address.getIpv6Address() != null;
     }
 
+    /**
+     * Detects whether {@code IpAddressZone} is ipv6
+     */
+    default boolean isIpv6(@Nonnull final IpAddressNoZone address) {
+        checkState(!(address.getIpv4AddressNoZone() == null && address.getIpv6AddressNoZone() == null),
+            "Invalid address");
+        return address.getIpv6AddressNoZone() != null;
+    }
+
     /**
      * Detects whether {@code IpPrefix} is ipv6
      */
index ba850af..89f89f8 100644 (file)
@@ -20,18 +20,23 @@ import java.util.Arrays;
 import org.junit.Assert;
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
 
 public class AddressTranslatorTest {
 
     private final static IpAddress IPV6_ADDR = new IpAddress(new Ipv6Address("a::"));
+    private final static IpAddressNoZone IPV6_ADDR_NO_ZONE = new IpAddressNoZone(new Ipv6AddressNoZone("a::"));
     private final static IpPrefix IPV6_PREFIX = new IpPrefix(new Ipv6Prefix("a::/48"));
     private final static byte IPV6_BYTE_PREFIX = 48;
     private final static IpAddress IPV4_ADDR = new IpAddress(new Ipv4Address("10.0.0.1"));
+    private final static IpAddressNoZone IPV4_ADDR_NO_ZONE = new IpAddressNoZone(new Ipv4AddressNoZone("10.0.0.1"));
     private final static IpPrefix IPV4_PREFIX = new IpPrefix(new Ipv4Prefix("10.0.0.1/24"));
     private final static byte IPV4_BYTE_PREFIX = 24;
     private static final byte[] IPV6_BYTE_ARRAY =
@@ -48,6 +53,12 @@ public class AddressTranslatorTest {
         Assert.assertTrue(Arrays.equals(IPV4_BYTE_ARRAY, ADDR_TRANSLATOR.ipAddressToArray(false, IPV4_ADDR)));
     }
 
+    @Test
+    public void ipAddressNoZoneToArrayTest() {
+        Assert.assertTrue(Arrays.equals(IPV6_BYTE_ARRAY, ADDR_TRANSLATOR.ipAddressToArray(IPV6_ADDR_NO_ZONE)));
+        Assert.assertTrue(Arrays.equals(IPV4_BYTE_ARRAY, ADDR_TRANSLATOR.ipAddressToArray(IPV4_ADDR_NO_ZONE)));
+    }
+
     @Test
     public void arrayToIpAddressTest() {
         Assert.assertTrue(
index 3ed7433..57d7a65 100644 (file)
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
 
 import org.junit.Test;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
@@ -94,6 +95,16 @@ public class Ipv6TranslatorTest implements Ipv6Translator {
         assertTrue(isIpv6(new IpAddress(new Ipv6Address(IPV6_FULL))));
     }
 
+    @Test
+    public void testIsIpv6NoZoneCompressed() throws Exception {
+        assertTrue(isIpv6(new IpAddressNoZone(new Ipv6AddressNoZone(IPV6_COMPRESSED))));
+    }
+
+    @Test
+    public void testIsIpv6NoZoneFull() throws Exception {
+        assertTrue(isIpv6(new IpAddressNoZone(new Ipv6AddressNoZone(IPV6_FULL))));
+    }
+
     @Test
     public void testTruncateIp4Array() throws Exception {
         assertArrayEquals(new byte[]{-64, -84, 2, 1}, truncateIp4Array(new byte[]{-64, -84, 2, 1, 0, 0, 0, 0}));