From 3cecf2cd177bbcb87ad0d5eb19e8e0c80a016a5d Mon Sep 17 00:00:00 2001 From: Jan Srnicek Date: Tue, 7 Feb 2017 13:50:59 +0100 Subject: HC2VPP-11/HC2VPP-12 - refactored ipv4/6 logic/tests - all dumping logic moved under common abstract classes - added tests Change-Id: Ifdee84795bd8cf6f0d29349dd2cfcf9b2bbec1c9 Signed-off-by: Jan Srnicek --- .../common/translate/util/Ipv6Translator.java | 22 +++----- .../common/translate/util/JvppReplyConsumer.java | 16 ++++-- .../common/translate/util/Ipv6TranslatorTest.java | 65 +++++++++++++++++++++- 3 files changed, 80 insertions(+), 23 deletions(-) (limited to 'vpp-common') diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java index c4a4ba38e..664bdc37d 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/Ipv6Translator.java @@ -16,20 +16,15 @@ package io.fd.hc2vpp.common.translate.util; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; - import com.google.common.net.InetAddresses; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.*; + +import javax.annotation.Nonnull; 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.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; -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; + +import static com.google.common.base.Preconditions.*; /** * Trait providing logic for translation of ipv6-related data @@ -104,9 +99,7 @@ public interface Ipv6Translator extends ByteDataTranslator { /** * Detects whether {@code IpAddress} is ipv6 */ - default boolean isIpv6(IpAddress address) { - checkNotNull(address, "Address cannot be null"); - + default boolean isIpv6(@Nonnull final IpAddress address) { checkState(!(address.getIpv4Address() == null && address.getIpv6Address() == null), "Invalid address"); return address.getIpv6Address() != null; } @@ -114,8 +107,7 @@ public interface Ipv6Translator extends ByteDataTranslator { /** * Detects whether {@code IpPrefix} is ipv6 */ - default boolean isIpv6(IpPrefix address) { - checkNotNull(address, "Address cannot be null"); + default boolean isIpv6(@Nonnull final IpPrefix address) { checkState(!(address.getIpv4Prefix() == null && address.getIpv6Prefix() == null), "Invalid address"); return address.getIpv6Prefix() != null; } diff --git a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/JvppReplyConsumer.java b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/JvppReplyConsumer.java index db656e721..d55446c82 100644 --- a/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/JvppReplyConsumer.java +++ b/vpp-common/vpp-translate-utils/src/main/java/io/fd/hc2vpp/common/translate/util/JvppReplyConsumer.java @@ -16,20 +16,21 @@ package io.fd.hc2vpp.common.translate.util; -import static com.google.common.base.Preconditions.checkArgument; - import io.fd.honeycomb.translate.read.ReadFailedException; import io.fd.honeycomb.translate.write.WriteFailedException; import io.fd.vpp.jvpp.VppBaseCallException; import io.fd.vpp.jvpp.dto.JVppReply; +import org.opendaylight.yangtools.yang.binding.DataObject; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import javax.annotation.Nonnegative; +import javax.annotation.Nonnull; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import javax.annotation.Nonnegative; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.DataObject; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; + +import static com.google.common.base.Preconditions.checkArgument; /** * Trait providing logic for consuming reply's to jvpp api calls @@ -38,6 +39,9 @@ public interface JvppReplyConsumer { int DEFAULT_TIMEOUT_IN_SECONDS = 5; + JvppReplyConsumer INSTANCE = new JvppReplyConsumer() { + }; + /** * Consumes reply for jvpp call representing any write operation * Should be used in case of calls where it's not clear which write crud operation respective diff --git a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java index a620cbdd2..3d289c7e7 100644 --- a/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java +++ b/vpp-common/vpp-translate-utils/src/test/java/io/fd/hc2vpp/common/translate/util/Ipv6TranslatorTest.java @@ -16,14 +16,75 @@ package io.fd.hc2vpp.common.translate.util; -import static org.junit.Assert.assertEquals; - 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.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; +import static org.junit.Assert.*; + public class Ipv6TranslatorTest implements Ipv6Translator { + private static final byte[] IPV6_BYTES = {32, 1, 13, -72, 10, 11, 18, -16, 0, 0, 0, 0, 0, 0, 0, 1}; + private static final String IPV6_FULL = "2001:0db8:0a0b:12f0:0000:0000:0000:0001"; + private static final String IPV6_COMPRESSED = "2001:db8:a0b:12f0::1"; + + @Test + public void testIpv6AddressNoZoneToArrayFull() throws Exception { + assertArrayEquals(IPV6_BYTES, ipv6AddressNoZoneToArray(new Ipv6Address(IPV6_FULL))); + } + + @Test + public void testIpv6AddressNoZoneToArrayCompressed() throws Exception { + assertArrayEquals(IPV6_BYTES, ipv6AddressNoZoneToArray(new Ipv6Address(IPV6_COMPRESSED))); + } + + @Test + public void testIpv6AddressPrefixToArrayFull() throws Exception { + assertArrayEquals(IPV6_BYTES, ipv6AddressPrefixToArray(new Ipv6Prefix(IPV6_FULL + "/64"))); + } + + @Test + public void testIpv6AddressPrefixToArrayCompressed() throws Exception { + assertArrayEquals(IPV6_BYTES, ipv6AddressPrefixToArray(new Ipv6Prefix(IPV6_COMPRESSED + "/64"))); + } + + @Test + public void testExtractPrefixFull() throws Exception { + assertEquals(64, extractPrefix(new Ipv6Prefix(IPV6_FULL + "/64"))); + } + + @Test + public void testExtractPrefixCompressed() throws Exception { + assertEquals(64, extractPrefix(new Ipv6Prefix(IPV6_COMPRESSED + "/64"))); + } + + @Test + public void testArrayToIpv6Prefix() throws Exception { + assertEquals(IPV6_COMPRESSED + "/64", arrayToIpv6Prefix(IPV6_BYTES, (byte) 64).getValue()); + } + + @Test + public void testArrayToIpv6AddressNoZone() throws Exception { + assertEquals(IPV6_COMPRESSED, arrayToIpv6AddressNoZone(IPV6_BYTES).getValue()); + } + + @Test + public void testIsIpv6Compressed() throws Exception { + assertTrue(isIpv6(new IpAddress(new Ipv6Address(IPV6_COMPRESSED)))); + } + + @Test + public void testIsIpv6Full() throws Exception { + assertTrue(isIpv6(new IpAddress(new Ipv6Address(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})); + } + @Test public void testIpv6NoZone() { final Ipv6AddressNoZone ipv6Addr = new Ipv6AddressNoZone("3ffe:1900:4545:3:200:f8ff:fe21:67cf"); -- cgit 1.2.3-korg