X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=mappingservice%2Fimplementation%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Flispflowmapping%2Fimplementation%2Flisp%2FMapServerTest.java;h=b144329d6476083ea12e272d31a82a3846795379;hb=59f0592239d324ab045cf432fc37ef1ce3115079;hp=953924f29a360d73937fddc0e6692ab004469d0f;hpb=105e3c2a4c62a7ab0bb1e94cdd86923ab499f5b1;p=lispflowmapping.git diff --git a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java index 953924f29..b144329d6 100644 --- a/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java +++ b/mappingservice/implementation/src/test/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServerTest.java @@ -26,12 +26,13 @@ import org.mockito.Mockito; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; import org.opendaylight.controller.md.sal.binding.api.NotificationService; -import org.opendaylight.lispflowmapping.implementation.config.ConfigIni; +import org.opendaylight.lispflowmapping.config.ConfigIni; import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys; import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC; import org.opendaylight.lispflowmapping.interfaces.lisp.IMapNotifyHandler; import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService; 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.rev130715.PortNumber; @@ -65,11 +66,13 @@ public class MapServerTest { @Mock private static IMappingService mapService; @Mock private static IMapNotifyHandler notifyHandler; @Mock private static NotificationService notificationService; + @Spy private static Set subscriberSetMock_1 = new HashSet<>(); @Spy private static Set subscriberSetMock_2 = new HashSet<>(); @Spy private static Set subscriberSetMock_3 = new HashSet<>(); private static MapServer mapServer; private static MapRegister mapRegister; + private static MappingData mappingData; private static final String IPV4_STRING_1 = "1.2.3.0"; private static final String IPV4_STRING_2 = "1.2.4.0"; @@ -83,12 +86,15 @@ public class MapServerTest { private static final String IPV4_SOURCE_STRING_4 = "127.0.0.4"; private static final String IPV4_SOURCE_STRING_5 = "127.0.0.5"; private static final String IPV4_SOURCE_STRING_6 = "127.0.0.6"; - private static final String IPV4_PREFIX = "/24"; + private static final String IPV4_PREFIX_1 = "/24"; + private static final String IPV4_PREFIX_2 = "/16"; private static final int MASK = 24; private static final int VNI = 10; - private static final Eid IPV4_EID_1 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_1 + IPV4_PREFIX); - private static final Eid IPV4_EID_2 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_2 + IPV4_PREFIX); + private static final Eid IPV4_EID_1 = LispAddressUtil.asIpv4Eid(IPV4_STRING_1); + private static final Eid IPV4_EID_2 = LispAddressUtil.asIpv4Eid(IPV4_STRING_2); + private static final Eid IPV4_PREFIX_EID_1 = LispAddressUtil.asIpv4PrefixBinaryEid(IPV4_STRING_1 + IPV4_PREFIX_1); + private static final Eid IPV4_PREFIX_EID_2 = LispAddressUtil.asIpv4PrefixBinaryEid(IPV4_STRING_1 + IPV4_PREFIX_2); private static final Eid IPV4_SOURCE_EID_1 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_1); private static final Eid IPV4_SOURCE_EID_2 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_2); private static final Eid IPV4_SOURCE_EID_3 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_3); @@ -110,17 +116,20 @@ public class MapServerTest { private static final long TWO_DAYS = 86400000L * 2; private static final SubscriberRLOC SUBSCRIBER_RLOC_1 = new SubscriberRLOC(RLOC_1, // timedOut() == true - IPV4_SOURCE_EID_1, new Date(System.currentTimeMillis() - TWO_DAYS)); + IPV4_SOURCE_EID_1, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + new Date(System.currentTimeMillis() - TWO_DAYS)); private static final SubscriberRLOC SUBSCRIBER_RLOC_2 = new SubscriberRLOC(RLOC_2, // timedOut() == false - IPV4_SOURCE_EID_2); + IPV4_SOURCE_EID_2, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); private static final SubscriberRLOC SUBSCRIBER_RLOC_3 = new SubscriberRLOC(RLOC_3, // timedOut() == true - IPV4_SOURCE_EID_3, new Date(System.currentTimeMillis() - TWO_DAYS)); + IPV4_SOURCE_EID_3, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + new Date(System.currentTimeMillis() - TWO_DAYS)); private static final SubscriberRLOC SUBSCRIBER_RLOC_4 = new SubscriberRLOC(RLOC_4, // timedOut() == false - IPV4_SOURCE_EID_4); + IPV4_SOURCE_EID_4, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); private static final SubscriberRLOC SUBSCRIBER_RLOC_5 = new SubscriberRLOC(RLOC_5, // timedOut() == true - IPV4_SOURCE_EID_5, new Date(System.currentTimeMillis() - TWO_DAYS)); + IPV4_SOURCE_EID_5, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT, + new Date(System.currentTimeMillis() - TWO_DAYS)); private static final SubscriberRLOC SUBSCRIBER_RLOC_6 = new SubscriberRLOC(RLOC_6, // timedOut() == false - IPV4_SOURCE_EID_6); + IPV4_SOURCE_EID_6, SubscriberRLOC.DEFAULT_SUBSCRIBER_TIMEOUT); private static final Eid SOURCE_DEST_KEY_EID = LispAddressUtil .asSrcDstEid(IPV4_STRING_1, IPV4_STRING_2, MASK, MASK, VNI); @@ -134,6 +143,8 @@ public class MapServerTest { .setLocatorRecord(Lists.newArrayList(LOCATOR_RECORD_1)).build(); private static final MappingRecord OLD_MAPPING_RECORD_2 = getDefaultMappingRecordBuilder() .setLocatorRecord(Lists.newArrayList(LOCATOR_RECORD_2)).build(); + private static final MappingData OLD_MAPPING_DATA_1 = new MappingData(OLD_MAPPING_RECORD_1); + private static final MappingData OLD_MAPPING_DATA_2 = new MappingData(OLD_MAPPING_RECORD_2); private static final Set DEFAULT_IP_ADDRESS_SET = getDefaultIpAddressSet(); @@ -147,18 +158,24 @@ public class MapServerTest { subscriberSetMock_3.add(SUBSCRIBER_RLOC_5); subscriberSetMock_3.add(SUBSCRIBER_RLOC_6); mapRegister = getDefaultMapRegisterBuilder().build(); + mappingData = new MappingData(mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), + System.currentTimeMillis()); setConfigIniMappingMergeField(false); } @Test public void handleMapRegisterTest_MappingMergeFalse() throws NoSuchFieldException, IllegalAccessException { - Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)).thenReturn(OLD_MAPPING_RECORD_1); + Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)).thenReturn(OLD_MAPPING_DATA_1); Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock_1); + mappingData.setMergeEnabled(false); mapServer.handleMapRegister(mapRegister); - Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(), - mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), false); + + final ArgumentCaptor captor = ArgumentCaptor.forClass(MappingData.class); + Mockito.verify(mapService).addMapping(Mockito.eq(MappingOrigin.Southbound), Mockito.eq(IPV4_EID_1), + Mockito.eq(mapRegister.getSiteId()), captor.capture()); + assertEquals(captor.getValue().getRecord(), mappingData.getRecord()); Mockito.verify(mapService).addData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS, subscriberSetMock_1); Mockito.verify(notifyHandler).handleMapNotify(getDefaultMapNotifyBuilder(mapRegister) @@ -180,14 +197,55 @@ public class MapServerTest { // no mapping changes Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(OLD_MAPPING_RECORD_1); + .thenReturn(OLD_MAPPING_DATA_1); + mappingData.setMergeEnabled(true); mapServer.handleMapRegister(mapRegister); - Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(), - mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), true); + + final ArgumentCaptor captor = ArgumentCaptor.forClass(MappingData.class); + Mockito.verify(mapService).addMapping(Mockito.eq(MappingOrigin.Southbound), Mockito.eq(IPV4_EID_1), + Mockito.eq(mapRegister.getSiteId()), captor.capture()); + assertEquals(captor.getValue().getRecord(), mappingData.getRecord()); Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.setAuthenticationData(null).build(), null); } + @Test + public void handleMapRegisterTest_findNegativeSubscribers() throws NoSuchFieldException, IllegalAccessException { + setConfigIniMappingMergeField(true); + + mapRegister.getMappingRecordItem().clear(); + mapRegister.getMappingRecordItem().add(getDefaultMappingRecordItemBuilder(IPV4_PREFIX_EID_1).build()); + + final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder() + // apply the change + .setEid(IPV4_PREFIX_EID_2); + final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder(); + final Eid maskedEid1 = LispAddressUtil.asIpv4Eid("1.2.0.0"); + + final SubscriberRLOC subscriber1 = Mockito.mock(SubscriberRLOC.class); + Mockito.when(subscriber1.timedOut()).thenReturn(true); + Mockito.when(subscriber1.toString()).thenReturn("sub1"); + + final Set set1 = Sets.newHashSet(subscriber1); + + Mockito.when(mapService.getAuthenticationKey(IPV4_PREFIX_EID_1)).thenReturn(MAPPING_AUTHKEY); + Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SRC_RLOCS)) + .thenReturn(DEFAULT_IP_ADDRESS_SET); + + Mockito.when(mapService.getParentPrefix(IPV4_PREFIX_EID_1)).thenReturn(maskedEid1); + Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_PREFIX_EID_1, SubKeys.SUBSCRIBERS)) + .thenReturn(null); + Mockito.when(mapService.getData(MappingOrigin.Southbound, maskedEid1, SubKeys.SUBSCRIBERS)).thenReturn(set1); + + Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_PREFIX_EID_1)) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) + .thenReturn(null); + + mapServer.handleMapRegister(mapRegister); + Mockito.verify(subscriber1).timedOut(); + } + @Test public void handleMapRegisterTest_verifyTransportAddresses() throws NoSuchFieldException, IllegalAccessException { setConfigIniMappingMergeField(true); @@ -195,9 +253,9 @@ public class MapServerTest { // input Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(OLD_MAPPING_RECORD_1) - .thenReturn(OLD_MAPPING_RECORD_2) - .thenReturn(getDefaultMappingRecordBuilder().build()); + .thenReturn(OLD_MAPPING_DATA_1) + .thenReturn(OLD_MAPPING_DATA_2) + .thenReturn(getDefaultMappingData(getDefaultMappingRecordBuilder().build())); Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock_1); Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS)) @@ -232,9 +290,9 @@ public class MapServerTest { Mockito.when(mapService.getAuthenticationKey(SOURCE_DEST_KEY_EID)).thenReturn(MAPPING_AUTHKEY); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, SOURCE_DEST_KEY_EID)) // ensure mappings are different - .thenReturn(OLD_MAPPING_RECORD_1) - .thenReturn(OLD_MAPPING_RECORD_2) - .thenReturn(OLD_MAPPING_RECORD_2); + .thenReturn(OLD_MAPPING_DATA_1) + .thenReturn(OLD_MAPPING_DATA_2) + .thenReturn(OLD_MAPPING_DATA_2); // return a subscriberSet for SrcDestKeyEid MappingRecord Mockito.when(mapService.getData(MappingOrigin.Southbound, SOURCE_DEST_KEY_EID, SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock_1); @@ -248,8 +306,8 @@ public class MapServerTest { Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) // ensure mappings are different - .thenReturn(OLD_MAPPING_RECORD_1) - .thenReturn(OLD_MAPPING_RECORD_2); + .thenReturn(OLD_MAPPING_DATA_1) + .thenReturn(OLD_MAPPING_DATA_2); // return a subscriberSet for Ipv4Eid MappingRecord Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1,SubKeys.SUBSCRIBERS)) .thenReturn(subscriberSetMock_3); @@ -301,8 +359,8 @@ public class MapServerTest { .thenReturn(DEFAULT_IP_ADDRESS_SET); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(mappingRecordBuilder_1.build()) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -327,8 +385,8 @@ public class MapServerTest { .thenReturn(DEFAULT_IP_ADDRESS_SET); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(mappingRecordBuilder_1.build()) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -353,8 +411,8 @@ public class MapServerTest { .thenReturn(DEFAULT_IP_ADDRESS_SET); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(mappingRecordBuilder_1.build()) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -379,8 +437,8 @@ public class MapServerTest { .thenReturn(DEFAULT_IP_ADDRESS_SET); Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(mappingRecordBuilder_1.build()) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -406,8 +464,8 @@ public class MapServerTest { Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) - .thenReturn(mappingRecordBuilder_1.build()) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_1.build())) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -430,7 +488,7 @@ public class MapServerTest { Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)) .thenReturn(null) - .thenReturn(mappingRecordBuilder_2.build()) + .thenReturn(getDefaultMappingData(mappingRecordBuilder_2.build())) .thenReturn(null); mapServer.handleMapRegister(mapRegister); @@ -455,21 +513,36 @@ public class MapServerTest { return mapRegisterBuilder; } + private static MappingData getDefaultMappingData(MappingRecord mappingRecord) { + if (mappingRecord == null) { + mappingRecord = getDefaultMappingRecordBuilder().build(); + } + return new MappingData(mappingRecord, System.currentTimeMillis()); + } + private static MappingRecordItemBuilder getDefaultMappingRecordItemBuilder() { + return getDefaultMappingRecordItemBuilder(IPV4_EID_1); + } + + private static MappingRecordItemBuilder getDefaultMappingRecordItemBuilder(Eid eid) { return new MappingRecordItemBuilder() .setMappingRecordItemId("mapping-record-item-id") .setKey(new MappingRecordItemKey("mapping-record-item-key")) - .setMappingRecord(getDefaultMappingRecordBuilder().build()); + .setMappingRecord(getDefaultMappingRecordBuilder(eid).build()); } private static MappingRecordBuilder getDefaultMappingRecordBuilder() { + return getDefaultMappingRecordBuilder(IPV4_EID_1); + } + + private static MappingRecordBuilder getDefaultMappingRecordBuilder(Eid eid) { return new MappingRecordBuilder() .setAction(MappingRecord.Action.NoAction) .setAuthoritative(false) .setLocatorRecord(new ArrayList<>()) .setMapVersion((short) 0) .setRecordTtl(60) - .setEid(IPV4_EID_1); + .setEid(eid); } private static MapNotifyBuilder getDefaultMapNotifyBuilder(MapRegister mapRegister) {