Refactor IP translators to use IetfInetUtil 97/9497/1
authorMarek Gradzki <[email protected]>
Mon, 20 Nov 2017 14:27:44 +0000 (15:27 +0100)
committerMarek Gradzki <[email protected]>
Mon, 20 Nov 2017 16:12:59 +0000 (17:12 +0100)
Use efficient factory methods for ietf-inet-types DTOs
where possible.

Also cleans up some duplicated and unused code.

Change-Id: I58f4163edba0dcd30e5e044cf701788446d86a0f
Signed-off-by: Marek Gradzki <[email protected]>
acl/acl-impl/src/test/java/io/fd/hc2vpp/acl/util/ace/extractor/AceDataExtractorTestCase.java
nat/nat2vpp/src/main/java/io/fd/hc2vpp/nat/read/Nat64PrefixesCustomizer.java
routing/routing-impl/src/test/java/io/fd/hc2vpp/routing/read/Ipv6RouteCustomizerTest.java
vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv4Translator.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/Ipv6TranslatorTest.java

index fc925c9..14afdcd 100644 (file)
@@ -40,8 +40,8 @@ abstract class AceDataExtractorTestCase {
     protected static final int DEFAULT_IPV4_PREFIX_VALUE = 0;
 
     protected static final byte[] DEFAULT_IPV6_ADDRESS_BYTES = new byte[16];
-    protected static final Ipv6Prefix IPV6_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0:0:0:0:1/64");
-    protected static final Ipv6Prefix IPV6_2_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0:0:0:0:2/48");
+    protected static final Ipv6Prefix IPV6_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0::1/64");
+    protected static final Ipv6Prefix IPV6_2_PREFIX = new Ipv6Prefix("2001:db8:a0b:12f0::2/48");
     protected static final byte[] IPV6_PREFIX_BYTES = {32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1};
     protected static final byte[] IPV6_2_PREFIX_BYTES = {32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 2};
     protected static final byte IPV6_PREFIX_VALUE = (byte) 64;
index f3997dc..5026a01 100644 (file)
@@ -113,7 +113,7 @@ final class Nat64PrefixesCustomizer
         if (prefixDetails != null) {
             builder.setNat64PrefixId(prefixId);
             builder.setNat64Prefix(
-                    arrayToIpv6Prefix(prefixDetails.prefix, UnsignedBytes.toInt(prefixDetails.prefixLen)));
+                    toIpv6Prefix(prefixDetails.prefix, UnsignedBytes.toInt(prefixDetails.prefixLen)));
         }
     }
 
index 79d9067..3626056 100644 (file)
@@ -211,7 +211,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
 
         assertEquals(1, builder.getId().intValue());
         assertEquals(1, builder.getKey().getId().intValue());
-        assertEquals("2001:db8:a0b:12f0:0:0:0:1/24", builder.getDestinationPrefix().getValue());
+        assertEquals("2001:db8:a0b:12f0::1/24", builder.getDestinationPrefix().getValue());
 
         NextHopOptions hopOptions = builder.getNextHopOptions();
         assertTrue(hopOptions instanceof SpecialNextHop);
@@ -227,7 +227,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
 
         assertEquals(2, builder.getId().intValue());
         assertEquals(2, builder.getKey().getId().intValue());
-        assertEquals("2001:db8:a0b:12f0:0:0:0:2/22", builder.getDestinationPrefix().getValue());
+        assertEquals("2001:db8:a0b:12f0::2/22", builder.getDestinationPrefix().getValue());
 
         NextHopOptions hopOptions = builder.getNextHopOptions();
         assertTrue(hopOptions instanceof SimpleNextHop);
@@ -246,7 +246,7 @@ public class Ipv6RouteCustomizerTest extends ListReaderCustomizerTest<Route, Rou
 
         assertEquals(3, builder.getId().intValue());
         assertEquals(3, builder.getKey().getId().intValue());
-        assertEquals("2001:db8:a0b:12f0:0:0:0:2/16", builder.getDestinationPrefix().getValue());
+        assertEquals("2001:db8:a0b:12f0::2/16", builder.getDestinationPrefix().getValue());
 
         NextHopOptions hopOptions = builder.getNextHopOptions();
         assertTrue(hopOptions instanceof NextHopList);
index 69ef7f3..24f4ae9 100644 (file)
@@ -18,11 +18,9 @@ package io.fd.hc2vpp.common.translate.util;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
-import com.google.common.net.InetAddresses;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.Arrays;
 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.Ipv4AddressNoZone;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
 
@@ -57,19 +55,9 @@ public interface Ipv4Translator extends ByteDataTranslator {
      */
     default byte extractPrefix(Ipv4Prefix data) {
         checkNotNull(data, "Cannot extract from null");
-
         return Byte.valueOf(data.getValue().substring(data.getValue().indexOf('/') + 1));
     }
 
-    /**
-     * Converts byte array to {@link Ipv4Prefix} with specified prefixLength
-     */
-    default Ipv4Prefix arrayToIpv4Prefix(final byte[] address, byte prefixLength) {
-        Ipv4AddressNoZone addressPart = arrayToIpv4AddressNoZone(address);
-
-        return new Ipv4Prefix(addressPart.getValue().concat("/").concat(String.valueOf(prefixLength)));
-    }
-
     /**
      * Parse byte array returned by VPP representing an Ipv4 address. Expects array in big endian
      *
@@ -82,11 +70,7 @@ public interface Ipv4Translator extends ByteDataTranslator {
         if (ip.length == 16) {
             ip = Arrays.copyOfRange(ip, 0, 4);
         }
-        try {
-            return new Ipv4AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip)));
-        } catch (UnknownHostException e) {
-            throw new IllegalArgumentException("Unable to parse ipv4", e);
-        }
+        return new Ipv4AddressNoZone(IetfInetUtil.INSTANCE.ipv4AddressFor(ip));
     }
 
     /**
@@ -110,13 +94,6 @@ public interface Ipv4Translator extends ByteDataTranslator {
     }
 
     default Ipv4Prefix toIpv4Prefix(final byte[] address, final int prefix) {
-        try {
-            return new Ipv4Prefix(
-                    String.format("%s/%s", InetAddress.getByAddress(address).getHostAddress(),
-                            String.valueOf(prefix)));
-        } catch (UnknownHostException e) {
-            throw new IllegalArgumentException(
-                    "Cannot create prefix for address[" + Arrays.toString(address) + "],prefix[" + prefix + "]", e);
-        }
+        return IetfInetUtil.INSTANCE.ipv4PrefixFor(address, prefix);
     }
 }
index 6a71d6a..6d939af 100644 (file)
@@ -21,10 +21,8 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 
 import com.google.common.net.InetAddresses;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.Arrays;
 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.IpPrefix;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Address;
@@ -68,9 +66,8 @@ public interface Ipv6Translator extends ByteDataTranslator {
     /**
      * Converts byte array to {@link Ipv6Prefix} with specified prefixLength
      */
-    default Ipv6Prefix arrayToIpv6Prefix(final byte[] address, int prefixLength) {
-        Ipv6AddressNoZone addressPart = arrayToIpv6AddressNoZone(address);
-        return new Ipv6Prefix(addressPart.getValue().concat("/").concat(String.valueOf(prefixLength)));
+    default Ipv6Prefix toIpv6Prefix(final byte[] address, int prefix) {
+        return IetfInetUtil.INSTANCE.ipv6PrefixFor(address, prefix);
     }
 
     /**
@@ -82,12 +79,7 @@ public interface Ipv6Translator extends ByteDataTranslator {
     @Nonnull
     default Ipv6AddressNoZone arrayToIpv6AddressNoZone(@Nonnull byte[] ip) {
         checkArgument(ip.length == 16, "Illegal array length");
-
-        try {
-            return new Ipv6AddressNoZone(InetAddresses.toAddrString(InetAddress.getByAddress(ip)));
-        } catch (UnknownHostException e) {
-            throw new IllegalArgumentException("Unable to parse ipv6", e);
-        }
+        return new Ipv6AddressNoZone(IetfInetUtil.INSTANCE.ipv6AddressFor(ip));
     }
 
     /**
@@ -117,15 +109,4 @@ public interface Ipv6Translator extends ByteDataTranslator {
         System.arraycopy(ip, 0, result, 0, 4);
         return result;
     }
-
-    default Ipv6Prefix toIpv6Prefix(final byte[] address, final int prefix) {
-        try {
-            return new Ipv6Prefix(
-                    String.format("%s/%s", InetAddress.getByAddress(address).getHostAddress(),
-                            String.valueOf(prefix)));
-        } catch (UnknownHostException e) {
-            throw new IllegalArgumentException(
-                    "Cannot create prefix for address[" + Arrays.toString(address) + "],prefix[" + prefix + "]", e);
-        }
-    }
 }
index fb4c61b..3ed7433 100644 (file)
@@ -62,14 +62,21 @@ public class Ipv6TranslatorTest implements Ipv6Translator {
         assertEquals(64, extractPrefix(new Ipv6Prefix(IPV6_COMPRESSED + "/64")));
     }
 
+    @Test
+    public void testArrayToIpv6Prefix48() {
+        assertEquals("2001:db8:a0b:12f0::1/48",
+            toIpv6Prefix(new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1},
+                (byte) 48).getValue());
+    }
+
     @Test
     public void testArrayToIpv6Prefix64() throws Exception {
-        assertEquals(IPV6_COMPRESSED + "/64", arrayToIpv6Prefix(IPV6_BYTES, 64).getValue());
+        assertEquals(IPV6_COMPRESSED + "/64", toIpv6Prefix(IPV6_BYTES, 64).getValue());
     }
 
     @Test
     public void testArrayToIpv6Prefix128() throws Exception {
-        assertEquals(IPV6_COMPRESSED + "/128", arrayToIpv6Prefix(IPV6_BYTES, 128).getValue());
+        assertEquals(IPV6_COMPRESSED + "/128", toIpv6Prefix(IPV6_BYTES, 128).getValue());
     }
 
     @Test
@@ -129,11 +136,4 @@ public class Ipv6TranslatorTest implements Ipv6Translator {
     public void testExtractPrefix() {
         assertEquals(48, extractPrefix(new Ipv6Prefix("3ffe:1900:4545:3:200:f8ff:fe21:67cf/48")));
     }
-
-    @Test
-    public void toPrefix() {
-        assertEquals("2001:db8:a0b:12f0:0:0:0:1/48",
-                toIpv6Prefix(new byte[]{32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1},
-                        (byte) 48).getValue());
-    }
 }
\ No newline at end of file