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=d1b64a73b93740006f305fc2a1d3f761f6adb33e;hb=06bf26a3f90cc2787a3b373cd8731f19a39a7c2f;hp=12d7633bca408a658cf0281b0bfbeafc3daa28d3;hpb=39a4f190b1006c898ab7be0848c892bb2ca1ca75;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 12d7633bc..d1b64a73b 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 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved. + * Copyright (c) 2016, 2017 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, @@ -7,30 +7,53 @@ */ 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.Ignore; 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.interfaces.dao.Subscriber; +import org.opendaylight.lispflowmapping.lisp.type.LispMessage; +import org.opendaylight.lispflowmapping.lisp.type.MappingData; 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.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,15 +61,14 @@ 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 { private static MapResolver mapResolver; private static MappingService mapServiceMock; - private static Set subscriberSetMock; + private static Set subscriberSetMock; private static LispMappingService lispMappingServiceMock; private static final String ITR_RLOC_KEY_STRING = "itr_rloc_key"; @@ -59,21 +81,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)); + private static final Subscriber SUBSCRIBER_RLOC_1 = new Subscriber(RLOC_1, + LispAddressUtil.asIpv4Eid(IPV4_SOURCE), Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); @Before @SuppressWarnings("unchecked") @@ -95,9 +131,10 @@ public class MapResolverTest { final LocatorRecordBuilder locatorRecordBuilder = getDefaultLocatorBuilder(); final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder.build()); + final MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) - .thenReturn(mappingRecordBuilder.build()); + .thenReturn(mappingData); // result final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); @@ -117,14 +154,13 @@ public class MapResolverTest { .setAuthoritative(false) .setMapVersion((short) 0) .setEid(IPV4_PREFIX_EID_1) - .setAction(MappingRecord.Action.NativelyForward) + .setAction(LispMessage.NEGATIVE_MAPPING_ACTION) .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)) - .thenReturn(new MappingAuthkeyBuilder().build()); + Mockito.when(mapServiceMock.addNegativeMapping(IPV4_PREFIX_EID_1)) + .thenReturn(getDefaultMappingData(mappingRecordBuilder.build())); // result final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); @@ -144,12 +180,13 @@ public class MapResolverTest { final LocatorRecordBuilder locatorRecordBuilder = getDefaultLocatorBuilder(); final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder.build()); + final MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) - .thenReturn(mappingRecordBuilder.build()); + .thenReturn(mappingData); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - Mockito.when(subscriberSetMock.contains(Mockito.any(SubscriberRLOC.class))).thenReturn(false); + Mockito.when(subscriberSetMock.contains(Mockito.any(Subscriber.class))).thenReturn(false); // result final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); @@ -158,26 +195,125 @@ public class MapResolverTest { mapResolver.handleMapRequest(mapRequestBuilder.build()); Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); - Mockito.verify(subscriberSetMock, Mockito.never()).remove(Mockito.any(SubscriberRLOC.class)); + Mockito.verify(subscriberSetMock, Mockito.never()).remove(Mockito.any(Subscriber.class)); + } + + /** + * Tests {@link MapResolver#isEqualIpVersion} method. + */ + @Test + @Ignore + public void isEqualIpVersionTest() { + // input mapping + final LocatorRecordBuilder locatorRecordBuilder = getDefaultLocatorBuilder(); + final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); + mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder.build()); + final MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); + + Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) + .thenReturn(mappingData); + Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) + .thenReturn(subscriberSetMock); + Mockito.when(subscriberSetMock.contains(Mockito.any(Subscriber.class))).thenReturn(false); + + // ---------------------- + // with sourceRloc = null + List itrRlocList = Lists.newArrayList( + newItrRloc(MacAfi.class, null), + newItrRloc(Ipv4BinaryAfi.class, IPV4_ADDRESS)); + + ArgumentCaptor captor = ArgumentCaptor.forClass(Subscriber.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(Subscriber.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(Subscriber.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(Subscriber.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(Subscriber.class); + mapResolver.handleMapRequest(mapRequest); + Mockito.verify(subscriberSetMock, Mockito.times(5)).add(captor.capture()); + assertEquals(mac, captor.getValue().getSrcRloc().getAddress()); } /** * Tests {@link MapResolver#handleMapRequest} method. */ @Test + @Ignore public void handleMapRequest__withSubscribersToRemove() { // input mapping final LocatorRecordBuilder locatorRecordBuilder = getDefaultLocatorBuilder(); final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder.build()); + MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) - .thenReturn(mappingRecordBuilder.build()); + .thenReturn(mappingData); Mockito.when(mapServiceMock.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock); - Mockito.when(subscriberSetMock.contains(new SubscriberRLOC( + Subscriber subscriberMock = new Subscriber( mapRequestBuilder.getItrRloc().get(0).getRloc(), - mapRequestBuilder.getSourceEid().getEid()))) + mapRequestBuilder.getSourceEid().getEid(), Subscriber.DEFAULT_SUBSCRIBER_TIMEOUT); + subscriberMock.setSubscriberTtlByRecordTtl( + mappingRecordBuilder.getRecordTtl()); + Mockito.when(subscriberSetMock.contains(subscriberMock)) .thenReturn(true); // result @@ -187,8 +323,8 @@ public class MapResolverTest { // check if a subscriber is re-instantiating when there already is one in the subscriber set mapResolver.handleMapRequest(mapRequestBuilder.build()); - Mockito.verify(subscriberSetMock).remove(SUBSCRIBER_RLOC_1); - Mockito.verify(subscriberSetMock).add(SUBSCRIBER_RLOC_1); + Mockito.verify(subscriberSetMock).remove(subscriberMock); + Mockito.verify(subscriberSetMock).add(subscriberMock); Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); Mockito.verify(mapServiceMock).addData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS, subscriberSetMock); @@ -196,8 +332,9 @@ public class MapResolverTest { // verify that itrRloc is subscribed to dst address mappingRecordBuilder.setEid(SOURCE_DEST_KEY_EID); mapRequestBuilder.getEidItem().add(new EidItemBuilder().setEid(IPV4_PREFIX_EID_2).build()); + mappingData = getDefaultMappingData(mappingRecordBuilder.build()); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_2)) - .thenReturn(mappingRecordBuilder.build()); + .thenReturn(mappingData); mapResolver.handleMapRequest(mapRequestBuilder.build()); Mockito.verify(mapServiceMock).getData(MappingOrigin.Southbound, @@ -212,8 +349,10 @@ public class MapResolverTest { mapResolver = new MapResolver(mapServiceMock, true, "both", lispMappingServiceMock); final List ipAddressList = new ArrayList<>(); - ipAddressList.add(IPV4_ADDRESS_1); // hop 1 - ipAddressList.add(IPV4_ADDRESS_2); // hop 2 + // hop 1 + ipAddressList.add(IPV4_ADDRESS_1); + // hop 2 + ipAddressList.add(IPV4_ADDRESS_2); final Rloc rloc = LispAddressUtil.asTeLcafRloc(ipAddressList); final LocatorRecordBuilder locatorRecordBuilder_1 = getDefaultLocatorBuilder(); @@ -223,31 +362,33 @@ public class MapResolverTest { final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_2.build()); + final MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); - final MapRequestBuilder mapRequestBuilder = getDefaultMapRequestBuilder(); - mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_1)) - .build()); - mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)) - .build()); + final MapRequestBuilder mrb = getDefaultMapRequestBuilder(); + mrb.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_1)).build()); + mrb.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)).build()); - Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) - .thenReturn(mappingRecordBuilder.build()); + Mockito.when(mapServiceMock.getMapping(mrb.getSourceEid().getEid(), IPV4_PREFIX_EID_1)).thenReturn(mappingData); // result final LocatorRecordBuilder locatorRecordBuilder_3 = getDefaultLocatorBuilder() - .setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)).setPriority((short) 1); // priority increased by 1 + // priority increased by 1 + .setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)).setPriority((short) 1); final MappingRecordBuilder resultMappingRecordBuilder = getDefaultMappingRecordBuilder(); - resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); // as Ipv4 - resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_2.build()); // as ELP - resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_3.build()); // added to the result + // as Ipv4 + resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); + // as ELP + resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_2.build()); + // added to the result + resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_3.build()); final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); mapReplyBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder() .setMappingRecord(resultMappingRecordBuilder.build()).build()); // invocation - mapResolver.handleMapRequest(mapRequestBuilder.build()); + mapResolver.handleMapRequest(mrb.build()); Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); } @@ -259,8 +400,10 @@ public class MapResolverTest { mapResolver = new MapResolver(mapServiceMock, true, "replace", lispMappingServiceMock); final List ipAddressList = new ArrayList<>(); - ipAddressList.add(IPV4_ADDRESS_1); // hop 1 - ipAddressList.add(IPV4_ADDRESS_2); // hop 2 + // hop 1 + ipAddressList.add(IPV4_ADDRESS_1); + // hop 2 + ipAddressList.add(IPV4_ADDRESS_2); final Rloc rloc = LispAddressUtil.asTeLcafRloc(ipAddressList); final LocatorRecordBuilder locatorRecordBuilder_1 = getDefaultLocatorBuilder(); @@ -270,30 +413,30 @@ public class MapResolverTest { final MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder(); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); mappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_2.build()); + final MappingData mappingData = getDefaultMappingData(mappingRecordBuilder.build()); - final MapRequestBuilder mapRequestBuilder = getDefaultMapRequestBuilder(); - mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_1)) - .build()); - mapRequestBuilder.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)) - .build()); + final MapRequestBuilder mrb = getDefaultMapRequestBuilder(); + mrb.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_1)).build()); + mrb.getItrRloc().add(new ItrRlocBuilder().setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)).build()); - Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1)) - .thenReturn(mappingRecordBuilder.build()); + Mockito.when(mapServiceMock.getMapping(mrb.getSourceEid().getEid(), IPV4_PREFIX_EID_1)).thenReturn(mappingData); // result final LocatorRecordBuilder locatorRecordBuilder_3 = getDefaultLocatorBuilder() .setRloc(LispAddressUtil.asIpv4Rloc(IPV4_STRING_2)); final MappingRecordBuilder resultMappingRecordBuilder = getDefaultMappingRecordBuilder(); - resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); // as Ipv4 - resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_3.build()); // added to the result + // as Ipv4 + resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_1.build()); + // added to the result + resultMappingRecordBuilder.getLocatorRecord().add(locatorRecordBuilder_3.build()); final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); mapReplyBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder() .setMappingRecord(resultMappingRecordBuilder.build()).build()); // invocation - mapResolver.handleMapRequest(mapRequestBuilder.build()); + mapResolver.handleMapRequest(mrb.build()); Mockito.verify(lispMappingServiceMock).handleMapReply(mapReplyBuilder.build()); } @@ -311,14 +454,16 @@ public class MapResolverTest { //input mapping final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder(); mappingRecordBuilder_1.getLocatorRecord().add(locatorRecordBuilder_1.build()); + final MappingData mappingData_1 = getDefaultMappingData(mappingRecordBuilder_1.build()); final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder(); mappingRecordBuilder_2.getLocatorRecord().add(locatorRecordBuilder_2.build()); mappingRecordBuilder_2.setEid(IPV6_PREFIX_EID); + final MappingData mappingData_2 = getDefaultMappingData(mappingRecordBuilder_2.build()); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), - mapRequestBuilder.getEidItem().get(0).getEid())).thenReturn(mappingRecordBuilder_1.build()); + mapRequestBuilder.getEidItem().get(0).getEid())).thenReturn(mappingData_1); Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), - mapRequestBuilder.getEidItem().get(1).getEid())).thenReturn(mappingRecordBuilder_2.build()); + mapRequestBuilder.getEidItem().get(1).getEid())).thenReturn(mappingData_2); //result final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder(); @@ -331,6 +476,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() @@ -352,7 +503,7 @@ public class MapResolverTest { .setPitr(false) .setProbe(false) .setSmr(false) - .setSmrInvoked(true) + .setSmrInvoked(false) .setSourceEid(new SourceEidBuilder().setEid(LispAddressUtil.asIpv4Eid(IPV4_SOURCE)).build()) .setItrRloc(getDefaultItrRlocList()); @@ -361,6 +512,13 @@ public class MapResolverTest { return mrBuilder; } + private static MappingData getDefaultMappingData(MappingRecord mappingRecord) { + if (mappingRecord == null) { + mappingRecord = getDefaultMappingRecordBuilder().build(); + } + return new MappingData(mappingRecord, System.currentTimeMillis()); + } + private static MappingRecordBuilder getDefaultMappingRecordBuilder() { return new MappingRecordBuilder() .setAction(MappingRecord.Action.NoAction)