X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2Flisp%2FMapResolverTest.java;h=a0d42a1f5edee6adbb4e32b8b828f4cdd2699bb8;hb=e5feef731159bca508ef8a907bc0d863b17c9191;hp=fb5e7899ced815bdfa0073117a90661d59812aa3;hpb=d3fa81e9474ff4659e36c1bdb837556947ee4b6d;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java index fb5e7899c..a0d42a1f5 100644 --- a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java +++ b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapResolverTest.java @@ -7,30 +7,52 @@ */ package org.opendaylight.lispflowmapping.implementation.lisp; +import static org.junit.Assert.assertEquals; + +import com.google.common.collect.Lists; import java.util.ArrayList; import java.util.List; import java.util.Set; + import org.junit.Before; import org.junit.Test; +import org.mockito.ArgumentCaptor; import org.mockito.Mockito; +import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.implementation.LispMappingService; import org.opendaylight.lispflowmapping.implementation.MappingService; -import org.opendaylight.lispflowmapping.implementation.config.ConfigIni; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil; import org.opendaylight.lispflowmapping.lisp.util.SourceDestKeyHelper; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list - .MappingRecordItemBuilder; +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.Ipv4Address; +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.lisp.address.types.rev151105.Ipv4Afi; +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.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.NoAddressAfi; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv4Builder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.Ipv6Builder; +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.MacBuilder; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.lisp.address.address.NoAddress; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv6AddressBinary; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.binary.address.types.rev160504.Ipv4BinaryAfi; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRequest; 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.list.EidItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkeyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container - .MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRloc; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.ItrRlocBuilder; @@ -38,9 +60,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ma import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequestBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc; +import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.RlocBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin; -import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container - .MappingAuthkeyBuilder; public class MapResolverTest { @@ -59,21 +80,35 @@ public class MapResolverTest { private static final String IPV6_STRING = "0:0:0:0:0:0:0:1"; private static final String IPV6_PREFIX_STRING = "/128"; + private static final byte[] IPV4_BINARY_BYTES_1 = new byte[]{1, 2, 3, 0}; + private static final byte[] IPV4_BINARY_BYTES_2 = new byte[]{1, 2, 5, 0}; + private static final byte[] IPV6_BINARY_BYTES_1 = new byte[]{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + private static final LocatorRecordKey LOCATOR_RECORD_KEY = new LocatorRecordKey("key"); private static final int TTL_RLOC_TIMED_OUT = 1; private static final IpAddress IPV4_ADDRESS_1 = new IpAddress(new Ipv4Address(IPV4_STRING_1)); private static final IpAddress IPV4_ADDRESS_2 = new IpAddress(new Ipv4Address(IPV4_STRING_2)); + private static final IpAddressBinary IPV4_ADDRESS_BINARY_1 = + new IpAddressBinary(new Ipv4AddressBinary(IPV4_BINARY_BYTES_1)); + private static final IpAddressBinary IPV4_ADDRESS_BINARY_2 = + new IpAddressBinary(new Ipv4AddressBinary(IPV4_BINARY_BYTES_2)); + private static final IpAddressBinary IPV6_ADDRESS_BINARY = + new IpAddressBinary(new Ipv6AddressBinary(IPV6_BINARY_BYTES_1)); + private static final Eid IPV4_PREFIX_EID_1 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_1 + IPV4_PREFIX_STRING); private static final Eid IPV4_PREFIX_EID_2 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_2 + IPV4_PREFIX_STRING); private static final Eid IPV6_PREFIX_EID = LispAddressUtil.asIpv6PrefixEid(IPV6_STRING + IPV6_PREFIX_STRING); private static final Eid SOURCE_DEST_KEY_EID = LispAddressUtil.asSrcDstEid(IPV4_SOURCE, IPV4_STRING_2, 24, 24, 0); + private static final Address IPV4_ADDRESS = new Ipv4Builder().setIpv4(new Ipv4Address(IPV4_STRING_1)).build(); + private static final Address IPV6_ADDRESS = new Ipv6Builder().setIpv6(new Ipv6Address(IPV6_STRING)).build(); + private static final Rloc RLOC_1 = LispAddressUtil.asIpv4Rloc(IPV4_RLOC_STRING_1); private static MapRequestBuilder mapRequestBuilder = getDefaultMapRequestBuilder(); private static final SubscriberRLOC SUBSCRIBER_RLOC_1 = new SubscriberRLOC(RLOC_1, - LispAddressUtil.asIpv4Eid(IPV4_SOURCE)); + LispAddressUtil.asIpv4Eid(IPV4_SOURCE), SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); @Before @SuppressWarnings("unchecked") @@ -120,7 +155,6 @@ public class MapResolverTest { .setAction(MappingRecord.Action.NativelyForward) .setRecordTtl(TTL_RLOC_TIMED_OUT); - Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) .thenReturn(null); Mockito.when(mapServiceMock.getAuthenticationKey(IPV4_PREFIX_EID_1)) @@ -162,6 +196,98 @@ public class MapResolverTest { Mockito.verify(subscriberSetMock, Mockito.never()).remove(Mockito.any(SubscriberRLOC.class)); } + /** + * Tests {@link MapResolver#isEqualIpVersion} method. + */ + @Test + public void isEqualIpVersionTest() { + // input mapping + final LocatorRecordBuilder locatorRecordBuilder = getDefaultLocatorBuilder(); + final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); + mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder.build()); + + Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) + .thenReturn(mappingRecordBuilder.build()); + Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) + .thenReturn(subscriberSetMock); + Mockito.when(subscriberSetMock.contains(Mockito.any(SubscriberRLOC.class))).thenReturn(false); + + // ---------------------- + // with sourceRloc = null + List itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, null), + newItrRloc(Ipv4BinaryAfi.class, IPV4_ADDRESS)); + + ArgumentCaptor captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + mapResolver.handleMapRequest(mapRequestBuilder.setSourceRloc(null).setItrRloc(itrRlocList).build()); + Mockito.verify(subscriberSetMock).add(captor.capture()); + // Since mapRequest's sourceRloc is null, first ItrRloc from the itrRlocList must be used. + assertEquals(MacAfi.class, captor.getValue().getSrcRloc().getAddressType()); + + // ---------------------- + // with sourceRloc address = itrRloc address + itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, null), + newItrRloc(Ipv4BinaryAfi.class, IPV4_ADDRESS)); + + MapRequest mapRequest = mapRequestBuilder + .setSourceRloc(IPV4_ADDRESS_BINARY_1) + .setItrRloc(itrRlocList).build(); + + captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + mapResolver.handleMapRequest(mapRequest); + Mockito.verify(subscriberSetMock, Mockito.times(2)).add(captor.capture()); + assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress()); + + // ---------------------- + // with sourceRloc address Afi = itrRloc address Afi (for Ipv4) + itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, null), + newItrRloc(Ipv6Afi.class, IPV6_ADDRESS), + newItrRloc(Ipv4Afi.class, IPV4_ADDRESS)); + + mapRequest = mapRequestBuilder + .setSourceRloc(IPV6_ADDRESS_BINARY) + .setItrRloc(itrRlocList).build(); + + captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + mapResolver.handleMapRequest(mapRequest); + Mockito.verify(subscriberSetMock, Mockito.times(3)).add(captor.capture()); + assertEquals(IPV6_ADDRESS, captor.getValue().getSrcRloc().getAddress()); + + // ---------------------- + // with sourceRloc address Afi = itrRloc address Afi (for Ipv6) + itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, null), + newItrRloc(Ipv6Afi.class, IPV6_ADDRESS), + newItrRloc(Ipv4Afi.class, IPV4_ADDRESS)); + + mapRequest = mapRequestBuilder + .setSourceRloc(IPV4_ADDRESS_BINARY_2) + .setItrRloc(itrRlocList).build(); + + captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + mapResolver.handleMapRequest(mapRequest); + Mockito.verify(subscriberSetMock, Mockito.times(4)).add(captor.capture()); + assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress()); + + // ---------------------- + // with no common ip address nor Afi + final Mac mac = new MacBuilder().setMac(new MacAddress("aa:bb:cc:dd:ee:ff")).build(); + itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, mac), + newItrRloc(NoAddressAfi.class, Mockito.mock(NoAddress.class))); + + mapRequest = mapRequestBuilder + .setSourceRloc(IPV4_ADDRESS_BINARY_1) + .setItrRloc(itrRlocList).build(); + + captor = ArgumentCaptor.forClass(SubscriberRLOC.class); + mapResolver.handleMapRequest(mapRequest); + Mockito.verify(subscriberSetMock, Mockito.times(5)).add(captor.capture()); + assertEquals(mac, captor.getValue().getSrcRloc().getAddress()); + } + /** * Tests {@link MapResolver#handleMapRequest} method. */ @@ -176,9 +302,12 @@ public class MapResolverTest { .thenReturn(mappingRecordBuilder.build()); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - Mockito.when(subscriberSetMock.contains(new SubscriberRLOC( + SubscriberRLOC subscriberRLOCMock = new SubscriberRLOC( mapRequestBuilder.getItrRloc().get(0).getRloc(), - mapRequestBuilder.getSourceEid().getEid()))) + mapRequestBuilder.getSourceEid().getEid(), SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); + subscriberRLOCMock.setSubscriberTimeoutByRecordTtl( + mappingRecordBuilder.getRecordTtl()); + Mockito.when(subscriberSetMock.contains(subscriberRLOCMock)) .thenReturn(true); // result @@ -332,6 +461,12 @@ public class MapResolverTest { Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); } + private static ItrRloc newItrRloc(Class clazz, Address address) { + return new ItrRlocBuilder().setRloc(new RlocBuilder() + .setAddress(address) + .setAddressType(clazz).build()).build(); + } + private static List getDefaultItrRlocList() { final List itrRlocList = new ArrayList<>(); final ItrRloc itrRloc = new ItrRlocBuilder()