Merge "JUnit test - LispAddressUtil - asKeyValue methods."
[lispflowmapping.git] / mappingservice / lisp-proto / src / test / java / org / opendaylight / lispflowmapping / lisp / util / LispAddressUtilTest.java
index fc4db91ef85ac28e6e4a0b1d8415e18eb1d394ff..7d7ece240749c60e4e18aeabae7cffc1b14e44c3 100644 (file)
@@ -9,6 +9,7 @@ package org.opendaylight.lispflowmapping.lisp.util;
 
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
@@ -32,6 +33,8 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv4PrefixAfi;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6Afi;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.Ipv6PrefixAfi;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.KeyValueAddressLcaf;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.LispAddressFamily;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.MacAfi;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.ServicePathIdType;
@@ -40,10 +43,12 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.addres
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.DistinguishedName;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.KeyValueAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Mac;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.service.path.ServicePath;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.EidBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
 
 public class LispAddressUtilTest {
@@ -55,23 +60,24 @@ public class LispAddressUtilTest {
     private static final String MAC_ADDRESS_VALUE_TEST = "aa:bb:cc:dd:ee:ff";
     private static final MacAddress MAC_ADDRESS_TEST = new MacAddress("aa:bb:cc:dd:ee:ff");
 
-    private static final String IPV4_ADDRESS_PREFIX_VALUE_TEST = "192.168.1.2/30";
-    private static final Ipv4Prefix IPV4_ADDRESS_PREFIX_TEST = new Ipv4Prefix(IPV4_ADDRESS_PREFIX_VALUE_TEST);
+    private static final byte[] IPV4_ADDRESS_BYTES_TEST = new byte[]{(byte) 192, (byte) 168, 1, 1};
 
-    private static final IpPrefix IP_ADDRESS_PREFIX = new IpPrefix(IPV4_ADDRESS_PREFIX_TEST);
+    private static final short MASK_OK_TEST = 30;
+    private static final short MASK_OK_DEFAULT_IPV4_TEST = 32;
+    private static final short MASK_OK_DEFAULT_IPV6_TEST = 128;
 
-    private static final String IPV6_ADDRESS_PREFIX_VALUE_TEST = "102:304:506:708:90a:b0c:d0e:f11/30";
-    private static final Ipv6Prefix IPV6_ADDRESS_PREFIX_TEST = new Ipv6Prefix(IPV6_ADDRESS_PREFIX_VALUE_TEST);
-
-    private static final byte[] IPV4_ADDRESS_BYTES_TEST = new byte[]{(byte) 192, (byte) 168, 1, 1};
     private static final String IPV4_ADDRESS_VALUE_TEST = "192.168.1.1";
+    private static final String IPV4_ADDRESS_PREFIX_VALUE_TEST = IPV4_ADDRESS_VALUE_TEST + "/" + MASK_OK_TEST;
     private static final Ipv4Address IPV4_ADDRESS_TEST = new Ipv4Address(IPV4_ADDRESS_VALUE_TEST);
     private static final IpAddress IP_ADDRESS_OBJECT_GENERAL_TEST = new IpAddress(IPV4_ADDRESS_TEST);
-    private static final SimpleAddress SIMPLE_ADDRESS_TEST = new SimpleAddress(IP_ADDRESS_OBJECT_GENERAL_TEST);
+    private static final Ipv4Prefix IPV4_ADDRESS_PREFIX_TEST = new Ipv4Prefix(IPV4_ADDRESS_PREFIX_VALUE_TEST);
+    private static final IpPrefix IP_ADDRESS_PREFIX = new IpPrefix(IPV4_ADDRESS_PREFIX_TEST);
 
     private static final byte[] IPV6_ADDRESS_BYTES_TEST = new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
             15, 16};
     private static final String IPV6_ADDRESS_VALUE_TEST = "102:304:506:708:90a:b0c:d0e:f10";
+    private static final String IPV6_ADDRESS_PREFIX_VALUE_TEST = IPV6_ADDRESS_VALUE_TEST + "/" + MASK_OK_TEST;
+    private static final Ipv6Prefix IPV6_ADDRESS_PREFIX_TEST = new Ipv6Prefix(IPV6_ADDRESS_PREFIX_VALUE_TEST);
     private static final Ipv6Address IPV6_ADDRESS_TEST = new Ipv6Address(IPV6_ADDRESS_VALUE_TEST);
 
     private static final Short DUMMY_SERVICE_INDEX = 45;
@@ -80,11 +86,15 @@ public class LispAddressUtilTest {
     private static final String DISTINGUISHED_NAME_TYPE_VALUE_WITH_MAC_TEST = MAC_ADDRESS_VALUE_TEST;
     private static final DistinguishedNameType DISTINGUISHED_NAME_TYPE_TEST = new DistinguishedNameType
             (DISTINGUISHED_NAME_TYPE_VALUE_TEST);
-    private static final Long AS_NUMBER_TEST = 100L;
 
+    private static final Long AS_NUMBER_TEST = 100L;
     private static final Long INSTANCE_ID_TYPE_VALUE_TEST = 121L;
     private static final Short INSTANCE_ID_TYPE_VALUE_SHORT_TEST = 122;
     private static final InstanceIdType INSTANCE_ID_TYPE_TEST = new InstanceIdType(INSTANCE_ID_TYPE_VALUE_TEST);
+    private static final String INCORRECT_IP_ADDRESS_TEST = "incorrect ip address";
+
+    private static final SimpleAddress SIMPLE_ADDRESS_A_TEST = new SimpleAddress(IP_ADDRESS_OBJECT_GENERAL_TEST);
+    private static final SimpleAddress SIMPLE_ADDRESS_B_TEST = new SimpleAddress(MAC_ADDRESS_TEST);
 
     /**
      * Tests {@link LispAddressUtil#addressTypeFromSimpleAddress} and {@link
@@ -94,10 +104,10 @@ public class LispAddressUtilTest {
     @Test
     public void addressFromSimpleAddressTest_asAnyIpAddress() {
         final Class<? extends LispAddressFamily> addressClass = LispAddressUtil.addressTypeFromSimpleAddress
-                (SIMPLE_ADDRESS_TEST);
+                (SIMPLE_ADDRESS_A_TEST);
         assertEquals(Ipv4Afi.class, addressClass);
 
-        final Address address = LispAddressUtil.addressFromSimpleAddress(SIMPLE_ADDRESS_TEST);
+        final Address address = LispAddressUtil.addressFromSimpleAddress(SIMPLE_ADDRESS_A_TEST);
         assertTrue(address instanceof Ipv4);
     }
 
@@ -410,14 +420,14 @@ public class LispAddressUtilTest {
 
         final Rloc rlocFromIpv4Address = LispAddressUtil.toRloc(IPV4_ADDRESS_TEST);
         assertEquals(Ipv4Afi.class, rlocFromIpv4Address.getAddressType());
-        assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4)rlocFromIpv4Address.getAddress()).getIpv4().getValue());
+        assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) rlocFromIpv4Address.getAddress()).getIpv4().getValue());
 
 
         final Rloc rlocFromIpv6Address = LispAddressUtil.toRloc(IPV6_ADDRESS_TEST);
         assertEquals(Ipv6Afi.class, rlocFromIpv6Address.getAddressType());
-        assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6)rlocFromIpv6Address.getAddress()).getIpv6().getValue());
+        assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6) rlocFromIpv6Address.getAddress()).getIpv6().getValue());
 
-        final Rloc rlocFromSimpleAddress = LispAddressUtil.toRloc(SIMPLE_ADDRESS_TEST);
+        final Rloc rlocFromSimpleAddress = LispAddressUtil.toRloc(SIMPLE_ADDRESS_A_TEST);
         assertEquals(Ipv4Afi.class, rlocFromSimpleAddress.getAddressType());
         assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) rlocFromSimpleAddress.getAddress()).getIpv4().getValue());
     }
@@ -441,16 +451,20 @@ public class LispAddressUtilTest {
      * Test
      * - {@link LispAddressUtil#toEid(Ipv6Address, InstanceIdType)}
      * - {@link LispAddressUtil#asIpv6PrefixEid(String)}
+     * - {@link LispAddressUtil#asIpv6PrefixEid(Eid, Inet6Address, short)}
+     * - {@link LispAddressUtil#asIpv6PrefixEid(Ipv6Address, InstanceIdType)}
      * methods.
      */
     @Test
-    public void toEid_ipv6Prefix() {
+    public void toEid_ipv6Prefix() throws UnknownHostException {
         Eid eidFromIpv6Prefix = LispAddressUtil.toEid(IPV6_ADDRESS_PREFIX_TEST, INSTANCE_ID_TYPE_TEST);
-        verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, true);
+        verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, true, MASK_OK_TEST, Ipv6PrefixAfi.class);
 
         eidFromIpv6Prefix = LispAddressUtil.asIpv6PrefixEid(IPV6_ADDRESS_PREFIX_VALUE_TEST);
-        verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, false);
-        //TODO missing one method with as ....
+        verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, false, MASK_OK_TEST, Ipv6PrefixAfi.class);
+
+        eidFromIpv6Prefix = LispAddressUtil.asIpv6PrefixEid(IPV6_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
+        verifyToEidWithIpv6Prefix(eidFromIpv6Prefix, true, MASK_OK_DEFAULT_IPV6_TEST, Ipv6PrefixAfi.class);
     }
 
     /**
@@ -495,17 +509,27 @@ public class LispAddressUtilTest {
      * Test
      * - {@link LispAddressUtil#toEid(Ipv4Prefix, InstanceIdType)}
      * - {@link LispAddressUtil#asIpv4PrefixEid(String)}
+     * - {@link LispAddressUtil#asIpv4PrefixEid(Eid, Inet4Address, short)}
+     * - {@link LispAddressUtil#asIpv4PrefixEid(Ipv4Address, InstanceIdType)}  }
      * methods.
      */
     @Test
-    public void toEid_ipv4Prefix() {
+    public void toEid_ipv4Prefix() throws UnknownHostException {
         Eid eidFromIpv4Prefix = LispAddressUtil.toEid(IPV4_ADDRESS_PREFIX_TEST, INSTANCE_ID_TYPE_TEST);
-        verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, true);
+        verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, true, MASK_OK_TEST, Ipv4PrefixAfi.class);
 
         eidFromIpv4Prefix  = LispAddressUtil.asIpv4PrefixEid(IPV4_ADDRESS_PREFIX_VALUE_TEST);
-        verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, false);
-        //TODO missing one method with as...
+        verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, false, MASK_OK_TEST, Ipv4PrefixAfi.class);
+
+        eidFromIpv4Prefix  = LispAddressUtil.asIpv4PrefixEid(IPV4_ADDRESS_TEST, INSTANCE_ID_TYPE_TEST);
+        verifyToEidWithIpv4Prefix(eidFromIpv4Prefix, false, (short)32, Ipv4PrefixAfi.class);
+    }
 
+    public Eid provideDummyMacEid() {
+        final EidBuilder eidBuilder = new EidBuilder();
+        eidBuilder.setAddressType(MacAfi.class);
+        eidBuilder.setVirtualNetworkId(INSTANCE_ID_TYPE_TEST);
+        return eidBuilder.build();
     }
 
     /**
@@ -535,7 +559,7 @@ public class LispAddressUtilTest {
     @Test
     public void toEid_ipPrefix() {
         final Eid eidFromIpPrefix = LispAddressUtil.toEid(IP_ADDRESS_PREFIX, INSTANCE_ID_TYPE_TEST);
-        verifyToEidWithIpv4Prefix(eidFromIpPrefix, true);
+        verifyToEidWithIpv4Prefix(eidFromIpPrefix, true, MASK_OK_TEST, Ipv4PrefixAfi.class);
     }
 
     /**
@@ -558,14 +582,16 @@ public class LispAddressUtilTest {
         verifyToEidWithMacAddress(eidFromDistinguishedName, true);
     }
 
-    private void verifyToEidWithIpv6Prefix(final Eid eidFromIpv6Prefix, final boolean isVniChecked) {
-        assertEquals(Ipv6PrefixAfi.class, eidFromIpv6Prefix.getAddressType());
+    private void verifyToEidWithIpv6Prefix(final Eid eidFromIpv6Prefix, final boolean isVniChecked, short
+            expectedMask, final Class<? extends org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp
+            .address.types.rev151105.LispAddressFamily> addressType) {
+        assertEquals(addressType, eidFromIpv6Prefix.getAddressType());
         if (isVniChecked) {
             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv6Prefix.getVirtualNetworkId());
         }
-        assertEquals(IPV6_ADDRESS_PREFIX_VALUE_TEST, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
-                .lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) eidFromIpv6Prefix.getAddress())
-                .getIpv6Prefix().getValue());
+        assertEquals(IPV6_ADDRESS_VALUE_TEST + "/" + expectedMask, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml
+                .ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Prefix) eidFromIpv6Prefix
+                .getAddress()).getIpv6Prefix().getValue());
     }
 
     private void verifyToEidWithIpv4(final Eid eidFromIpv4, final boolean isVniChecked) {
@@ -573,7 +599,7 @@ public class LispAddressUtilTest {
         if (isVniChecked) {
             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv4.getVirtualNetworkId());
         }
-        assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4)eidFromIpv4.getAddress()).getIpv4().getValue());
+        assertEquals(IPV4_ADDRESS_VALUE_TEST, ((Ipv4) eidFromIpv4.getAddress()).getIpv4().getValue());
     }
 
     private void verifyToEidWithIpv6(final Eid eidFromIpv6, final boolean isVniChecked) {
@@ -584,12 +610,15 @@ public class LispAddressUtilTest {
         assertEquals(IPV6_ADDRESS_VALUE_TEST, ((Ipv6)eidFromIpv6.getAddress()).getIpv6().getValue());
     }
 
-    private void verifyToEidWithIpv4Prefix(final Eid eidFromIpv4Prefix, final boolean isVniChecked) {
-        assertEquals(Ipv4PrefixAfi.class, eidFromIpv4Prefix.getAddressType());
+    private void verifyToEidWithIpv4Prefix(final Eid eidFromIpv4Prefix, final boolean isVniChecked, short
+            expectedMask, Class<? extends org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address
+            .types.rev151105.LispAddressFamily>  addressType) {
+        assertEquals(addressType, eidFromIpv4Prefix.getAddressType());
         if (isVniChecked) {
             assertEquals(INSTANCE_ID_TYPE_TEST, eidFromIpv4Prefix.getVirtualNetworkId());
         }
-        assertEquals(IPV4_ADDRESS_PREFIX_VALUE_TEST, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf
+        assertEquals(IPV4_ADDRESS_VALUE_TEST +"/"+expectedMask, ((org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns
+                .yang.ietf
                 .lisp.address.types.rev151105.lisp.address.address.Ipv4Prefix)eidFromIpv4Prefix.getAddress())
                 .getIpv4Prefix().getValue());
     }
@@ -610,5 +639,95 @@ public class LispAddressUtilTest {
         }
         assertEquals(MAC_ADDRESS_VALUE_TEST, ((Mac)eidFromMac.getAddress()).getMac().getValue());
     }
+
+    /**
+     * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with ipv4 address and correct mask
+     */
+    @Test
+    public void asIpPrefix_ipv4() {
+        final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(IPV4_ADDRESS_VALUE_TEST, MASK_OK_TEST);
+        assertNotNull(ipPrefix);
+        final Ipv4Prefix ipv4Prefix = ipPrefix.getIpv4Prefix();
+        assertNotNull(ipv4Prefix);
+        assertEquals(IPV4_ADDRESS_PREFIX_TEST, ipv4Prefix);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with ipv6 address and correct mask
+     */
+    @Test
+    public void asIpPrefix_ipv6() {
+        final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(IPV6_ADDRESS_VALUE_TEST, MASK_OK_TEST);
+        assertNotNull(ipPrefix);
+        final Ipv6Prefix ipv6Prefix = ipPrefix.getIpv6Prefix();
+        assertNotNull(ipv6Prefix);
+        assertEquals(IPV6_ADDRESS_PREFIX_TEST, ipv6Prefix);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#asIpPrefix(String, int)} with incorrect ip address and correct mask
+     */
+    @Test
+    public void asIpPrefix_other() {
+        final IpPrefix ipPrefix = LispAddressUtil.asIpPrefix(INCORRECT_IP_ADDRESS_TEST, MASK_OK_TEST);
+        assertNull(ipPrefix);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#ipVersionFromString(String)} with ipv4
+     */
+    @Test
+    public void ipVersionFromString_ipv4() {
+        final int addressType = LispAddressUtil.ipVersionFromString(IPV4_ADDRESS_VALUE_TEST);
+        assertEquals(4, addressType);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#ipVersionFromString(String)} with ipv6
+     */
+    @Test
+    public void ipVersionFromString_ipv6() {
+        final int addressType = LispAddressUtil.ipVersionFromString(IPV6_ADDRESS_VALUE_TEST);
+        assertEquals(6, addressType);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#ipVersionFromString(String)} with incorrect ip address format
+     */
+    @Test
+    public void ipVersionFromString_other() {
+        final int addressType = LispAddressUtil.ipVersionFromString(INCORRECT_IP_ADDRESS_TEST);
+        assertEquals(0, addressType);
+
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#asKeyValueAddressEid(SimpleAddress, SimpleAddress)} method.
+     */
+    @Test
+    public void asKeyValueAddressEid() {
+        final Eid eid = LispAddressUtil.asKeyValueAddressEid(SIMPLE_ADDRESS_A_TEST, SIMPLE_ADDRESS_B_TEST);
+        verifyKeyValueAddress(eid);
+    }
+
+    /**
+     * Tests {@link LispAddressUtil#asKeyValueAddressRloc(SimpleAddress, SimpleAddress)} method.
+     */
+    @Test
+    public void asKeyValueAddressRloc() {
+        final Rloc rloc = LispAddressUtil.asKeyValueAddressRloc(SIMPLE_ADDRESS_A_TEST, SIMPLE_ADDRESS_B_TEST);
+        verifyKeyValueAddress(rloc);
+    }
+
+    private void verifyKeyValueAddress(final LispAddress lispAddress) {
+        assertEquals(KeyValueAddressLcaf.class, lispAddress.getAddressType());
+        assertNull(lispAddress.getVirtualNetworkId());
+        final org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address
+                .address.key.value.address.KeyValueAddress keyValueAddress = ((KeyValueAddress) lispAddress.getAddress()).
+                getKeyValueAddress();
+        assertNotNull(keyValueAddress);
+        assertEquals(SIMPLE_ADDRESS_A_TEST, keyValueAddress.getKey());
+        assertEquals(SIMPLE_ADDRESS_B_TEST, keyValueAddress.getValue());
+    }
 }