/*
- * Copyright (c) 2014 Contextream, Inc. and others. All rights reserved.
+ * Copyright (c) 2016 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,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
-
package org.opendaylight.lispflowmapping.implementation.lisp;
import static org.junit.Assert.assertEquals;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import java.lang.reflect.Field;
import java.util.ArrayList;
-import java.util.Arrays;
-
-import junitx.framework.ArrayAssert;
-
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
import org.junit.Before;
import org.junit.Test;
-import org.opendaylight.lispflowmapping.implementation.LispMappingService;
-import org.opendaylight.lispflowmapping.implementation.dao.MappingServiceKeyUtil;
-import org.opendaylight.lispflowmapping.implementation.serializer.MapRegisterSerializer;
-import org.opendaylight.lispflowmapping.implementation.util.LispAFIConvertor;
-import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
-import org.opendaylight.lispflowmapping.interfaces.dao.IMappingServiceKey;
-import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
-import org.opendaylight.lispflowmapping.interfaces.dao.MappingServiceRLOCGroup;
-import org.opendaylight.lispflowmapping.tools.junit.BaseTestCase;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.EidToLocatorRecord.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.LispAFIAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapNotify;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.MapRegister;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecord;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidtolocatorrecords.EidToLocatorRecordBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.lispaddress.lispaddresscontainer.address.no.NoAddressBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecord;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.locatorrecords.LocatorRecordBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.mapregisternotification.MapRegisterBuilder;
-
-public class MapServerTest extends BaseTestCase {
-
- private LispMappingService testedMapServer;
- private ILispDAO lispDAO;
- private MapRegisterBuilder mapRegisterBuilder;
- private LispAFIAddress eid;
- private LispAFIAddress rloc;
- private ValueSaverAction<MappingEntry<?>[]> mappingEntriesSaver;
- private MapRegister mapRegisterWithAuthentication;
-
- @Override
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+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.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.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;
+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.lisp.proto.rev151105.MapRegister;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.SiteId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
+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.locatorrecords.LocatorRecord;
+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.mapnotifymessage.MapNotify;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
+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.list.MappingRecordItem;
+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.mapping.record.list.MappingRecordItemKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregistermessage.MapRegisterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequest;
+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.transport.address.TransportAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkeyBuilder;
+
+@RunWith(MockitoJUnitRunner.class)
+public class MapServerTest {
+
+ @Mock private static IMappingService mapService;
+ @Mock private static IMapNotifyHandler notifyHandler;
+ @Mock private static NotificationService notificationService;
+ @Spy private static Set<SubscriberRLOC> subscriberSetMock_1 = new HashSet<>();
+ @Spy private static Set<SubscriberRLOC> subscriberSetMock_2 = new HashSet<>();
+ @Spy private static Set<SubscriberRLOC> subscriberSetMock_3 = new HashSet<>();
+ private static MapServer mapServer;
+ private static MapRegister mapRegister;
+
+ private static final String IPV4_STRING_1 = "1.2.3.0";
+ private static final String IPV4_STRING_2 = "1.2.4.0";
+ private static final String IPV4_STRING_3 = "192.168.0.1";
+ private static final String IPV4_STRING_4 = "192.168.0.2";
+ private static final String IPV4_STRING_5 = "192.168.0.3";
+ private static final String IPV4_STRING_6 = "192.168.0.4";
+ private static final String IPV4_SOURCE_STRING_1 = "127.0.0.1";
+ private static final String IPV4_SOURCE_STRING_2 = "127.0.0.2";
+ private static final String IPV4_SOURCE_STRING_3 = "127.0.0.3";
+ 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 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_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);
+ private static final Eid IPV4_SOURCE_EID_4 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_4);
+ private static final Eid IPV4_SOURCE_EID_5 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_5);
+ private static final Eid IPV4_SOURCE_EID_6 = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING_6);
+ private static final Rloc RLOC_1 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_1);
+ private static final Rloc RLOC_2 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_2);
+ private static final Rloc RLOC_3 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_3);
+ private static final Rloc RLOC_4 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_4);
+ private static final Rloc RLOC_5 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_5);
+ private static final Rloc RLOC_6 = LispAddressUtil.asIpv4Rloc(IPV4_STRING_6);
+
+ private static final IpAddressBinary IPV4_BINARY_1 =
+ new IpAddressBinary(new Ipv4AddressBinary(new byte[] {1, 2, 3, 0}));
+ private static final IpAddressBinary IPV4_BINARY_2 =
+ new IpAddressBinary(new Ipv4AddressBinary(new byte[] {1, 2, 4, 0}));
+
+ 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));
+ private static final SubscriberRLOC SUBSCRIBER_RLOC_2 = new SubscriberRLOC(RLOC_2, // timedOut() == false
+ IPV4_SOURCE_EID_2);
+ private static final SubscriberRLOC SUBSCRIBER_RLOC_3 = new SubscriberRLOC(RLOC_3, // timedOut() == true
+ IPV4_SOURCE_EID_3, new Date(System.currentTimeMillis() - TWO_DAYS));
+ private static final SubscriberRLOC SUBSCRIBER_RLOC_4 = new SubscriberRLOC(RLOC_4, // timedOut() == false
+ IPV4_SOURCE_EID_4);
+ private static final SubscriberRLOC SUBSCRIBER_RLOC_5 = new SubscriberRLOC(RLOC_5, // timedOut() == true
+ IPV4_SOURCE_EID_5, new Date(System.currentTimeMillis() - TWO_DAYS));
+ private static final SubscriberRLOC SUBSCRIBER_RLOC_6 = new SubscriberRLOC(RLOC_6, // timedOut() == false
+ IPV4_SOURCE_EID_6);
+
+ private static final Eid SOURCE_DEST_KEY_EID = LispAddressUtil
+ .asSrcDstEid(IPV4_STRING_1, IPV4_STRING_2, MASK, MASK, VNI);
+ private static final MappingAuthkey MAPPING_AUTHKEY = new MappingAuthkeyBuilder().setKeyType(0).build();
+ private static final ConfigIni CONFIG_INI = ConfigIni.getInstance();
+
+ private static final LocatorRecord LOCATOR_RECORD_1 = new LocatorRecordBuilder().setRloc(RLOC_1).build();
+ private static final LocatorRecord LOCATOR_RECORD_2 = new LocatorRecordBuilder().setRloc(RLOC_2).build();
+
+ private static final MappingRecord OLD_MAPPING_RECORD_1 = getDefaultMappingRecordBuilder()
+ .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 Set<IpAddressBinary> DEFAULT_IP_ADDRESS_SET = getDefaultIpAddressSet();
+
@Before
- public void before() throws Exception {
- super.before();
- lispDAO = context.mock(ILispDAO.class);
- testedMapServer = new LispMappingService();
- testedMapServer.basicInit(lispDAO);
- mapRegisterBuilder = new MapRegisterBuilder();
- mapRegisterBuilder.setKeyId((short) 0);
- mapRegisterBuilder.setAuthenticationData(new byte[0]);
- eid = LispAFIConvertor.asIPAfiAddress("10.31.0.5");
- rloc = LispAFIConvertor.asIPAfiAddress("192.168.136.10");
- EidToLocatorRecordBuilder recordBuilder = new EidToLocatorRecordBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid)).setMaskLength((short) 32);
- recordBuilder.setLocatorRecord(new ArrayList<LocatorRecord>());
- recordBuilder.getLocatorRecord().add(new LocatorRecordBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(rloc)).build());
- recordBuilder.setAction(Action.NoAction).setMapVersion((short) 0).setAuthoritative(false).setRecordTtl(60).setMaskLength((short) 32);
- mapRegisterBuilder.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterWithAuthentication = MapRegisterSerializer.getInstance().deserialize(hexToByteBuffer("38 00 01 01 FF BB "
- //
- + "00 00 00 00 00 00 00 01 00 14 2c 61 b9 c9 9a 20 " //
- + "ba d8 f5 40 d3 55 6f 5f 6e 5a b2 0a bf b5 00 00 " //
- + "00 0a 01 20 10 00 00 00 00 01 99 10 fe 01 01 64 " //
- + "ff 00 00 05 00 01 c0 a8 88 0a"));
-
- mappingEntriesSaver = new ValueSaverAction<MappingEntry<?>[]>();
+ public void init() throws NoSuchFieldException, IllegalAccessException {
+ mapServer = new MapServer(mapService, true, notifyHandler, notificationService);
+ subscriberSetMock_1.add(SUBSCRIBER_RLOC_1);
+ subscriberSetMock_1.add(SUBSCRIBER_RLOC_2);
+ subscriberSetMock_2.add(SUBSCRIBER_RLOC_3);
+ subscriberSetMock_2.add(SUBSCRIBER_RLOC_4);
+ subscriberSetMock_3.add(SUBSCRIBER_RLOC_5);
+ subscriberSetMock_3.add(SUBSCRIBER_RLOC_6);
+ mapRegister = getDefaultMapRegisterBuilder().build();
+ setConfigIniMappingMergeField(false);
}
@Test
- public void handleMapRegister__NonSetMBit() throws Exception {
- mapRegisterBuilder.setWantMapNotify(false);
-
- addDefaultPutAndGetExpectations(eid, 32);
- assertNull(testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false));
-
- MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
- assertEquals(1, entries.length);
+ public void handleMapRegisterTest_MappingMergeFalse() throws NoSuchFieldException, IllegalAccessException {
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1)).thenReturn(OLD_MAPPING_RECORD_1);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS))
+ .thenReturn(subscriberSetMock_1);
- assertEquals(AbstractLispComponent.ADDRESS_SUBKEY, entries[0].getKey());
- assertEquals(1, ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().size());
- assertEquals(rloc, LispAFIConvertor.toAFI(((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(0).getLispAddressContainer()));
- }
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(),
+ mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), false);
+ Mockito.verify(mapService).addData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS,
+ subscriberSetMock_1);
+ Mockito.verify(notifyHandler).handleMapNotify(getDefaultMapNotifyBuilder(mapRegister)
+ .setAuthenticationData(null).build(), null);
- @Test
- public void handleMapRegisterIpv4__ValidNotifyEchoesRegister() throws Exception {
- mapRegisterBuilder.getEidToLocatorRecord().add(
- getDefaultEidToLocatorBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(new NoAddressBuilder().build())).build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(eid, 32);
- addDefaultPutAndGetExpectations(new NoAddressBuilder().build(), 32);
- MapRegister mr = mapRegisterBuilder.build();
- MapNotify mapNotify = testedMapServer.handleMapRegister(mr, false);
- assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mr.getKeyId(), mapNotify.getKeyId());
- assertEquals(mr.getNonce(), mapNotify.getNonce());
+ // only 1 subscriber has timed out.
+ assertEquals(1, subscriberSetMock_1.size());
}
@Test
- public void handleMapRegisterIpv4__CloneNotOwnYouClown() throws Exception {
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- mapRegisterBuilder.setWantMapNotify(true);
- EidToLocatorRecordBuilder eidToLocatorBuilder = getDefaultEidToLocatorBuilder();
- eidToLocatorBuilder.setMaskLength((short) 32);
- eid = LispAFIConvertor.asIPAfiAddress("0.0.0.1");
- eidToLocatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid));
-
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("0.0.0.2")));
- locatorBuilder.setPriority((short) 55);
- eidToLocatorBuilder.getLocatorRecord().add(locatorBuilder.build());
+ public void handleMapRegisterTest_MappingMergeTrue() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- mapRegisterBuilder.getEidToLocatorRecord().add(eidToLocatorBuilder.build());
+ final MappingRecordItemBuilder mappingRecordItemBuilder = new MappingRecordItemBuilder()
+ .setMappingRecord(OLD_MAPPING_RECORD_1);
+ final MapNotifyBuilder mapNotifyBuilder = getDefaultMapNotifyBuilder(mapRegister)
+ .setMappingRecordItem(new ArrayList<>());
+ mapNotifyBuilder.getMappingRecordItem().add(mappingRecordItemBuilder.build());
- addDefaultPutAndGetExpectations(eid, 32);
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false);
-
- EidToLocatorRecord actualEidToLocator = mapNotify.getEidToLocatorRecord().get(0);
- assertEquals(LispAFIConvertor.toContainer(eid), actualEidToLocator.getLispAddressContainer());
- assertEquals((byte) 55, actualEidToLocator.getLocatorRecord().get(0).getPriority().byteValue());
+ // no mapping changes
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(OLD_MAPPING_RECORD_1);
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(mapService).addMapping(MappingOrigin.Southbound, IPV4_EID_1, mapRegister.getSiteId(),
+ mapRegister.getMappingRecordItem().iterator().next().getMappingRecord(), true);
+ Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.setAuthenticationData(null).build(), null);
}
@Test
- public void handleMapRegisterIpv4__ValidMask() throws Exception {
- int mask = 16;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid)).setMaskLength((short) mask);
- LocatorRecordBuilder locator = getDefaultLocatorBuilder();
- locator.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.getLocatorRecord().add(locator.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
- MapRegister mr = mapRegisterBuilder.build();
-
- addDefaultPutAndGetExpectations(eid, mask);
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mr, false);
- assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("10.31.0.5")), mapNotify.getEidToLocatorRecord().get(0)
- .getLispAddressContainer());
- ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mr.getKeyId(), mapNotify.getKeyId());
- assertEquals(mr.getNonce(), mapNotify.getNonce());
+ public void handleMapRegisterTest_verifyTransportAddresses() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
+
+ // 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());
+ 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))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
+
+ // result
+ final List<TransportAddress> transportAddressList = getTransportAddressList();
+ final MapNotifyBuilder mapNotifyBuilder = getDefaultMapNotifyBuilder(mapRegister);
+ mapNotifyBuilder.setMappingRecordItem(new ArrayList<>());
+ mapNotifyBuilder.getMappingRecordItem().add(new MappingRecordItemBuilder()
+ .setMappingRecord(getDefaultMappingRecordBuilder().build()).build());
+
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(mapNotifyBuilder.build(), transportAddressList);
}
@Test
- public void handleMapRegister__NonMaskable() throws Exception {
- int mask = 16;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asMacAfiAddress("01:01:01:01:01:01");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
+ public void handleMapRegisterTest_withTwoMappingRecords() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
+
+ // Input
+ // Add a MappingRecord with SrcDestKey Eid Type
+ final MappingRecordItemBuilder mappingRecordItemBuilder = new MappingRecordItemBuilder()
+ .setMappingRecord(getDefaultMappingRecordBuilder().setEid(SOURCE_DEST_KEY_EID).build());
+ final MapRegisterBuilder mapRegisterSrcDstBuilder = getDefaultMapRegisterBuilder();
+
+ final List<MappingRecordItem> list = mapRegisterSrcDstBuilder.getMappingRecordItem();
+ list.add(mappingRecordItemBuilder.build());
+
+ // ------------- Stubbing for SourceDestKey type Eid mapping -------------------
+
+ 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);
+ // return a subscriberSet for SrcDestKeyEid MappingRecord
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, SOURCE_DEST_KEY_EID, SubKeys.SUBSCRIBERS))
+ .thenReturn(subscriberSetMock_1);
+
+ // return a subscriberSet for SrcDestKeyEid destination MappingRecord
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, SourceDestKeyHelper.getDstBinary(SOURCE_DEST_KEY_EID),
+ SubKeys.SUBSCRIBERS)).thenReturn(subscriberSetMock_2);
+
+ // ----------------- Stubbing for Ipv4 type Eid mapping ------------------------
+
+ 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);
+ // return a subscriberSet for Ipv4Eid MappingRecord
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1,SubKeys.SUBSCRIBERS))
+ .thenReturn(subscriberSetMock_3);
+
+ // -----------------------------------------------------------------------------
+
+ // result
+ mapServer.handleMapRegister(mapRegisterSrcDstBuilder.build());
+
+ // for SrcDstKey mapping
+ final ArgumentCaptor<MapRequest> captor_1 = ArgumentCaptor.forClass(MapRequest.class);
+ Mockito.verify(notifyHandler, Mockito.times(1)).handleSMR(captor_1.capture(), Mockito.eq(RLOC_2));
+ Mockito.verify(mapService).addData(MappingOrigin.Southbound, SOURCE_DEST_KEY_EID, SubKeys.SUBSCRIBERS,
+ subscriberSetMock_1);
+ final Eid resultEid_1 = captor_1.getValue().getEidItem().iterator().next().getEid();
+ assertEquals(IPV4_SOURCE_EID_2, resultEid_1);
+
+ // for SrcDst destination mapping
+ final ArgumentCaptor<MapRequest> captor_2 = ArgumentCaptor.forClass(MapRequest.class);
+ Mockito.verify(notifyHandler, Mockito.times(1)).handleSMR(captor_2.capture(), Mockito.eq(RLOC_4));
+ Mockito.verify(mapService).addData(MappingOrigin.Southbound,
+ SourceDestKeyHelper.getDstBinary(SOURCE_DEST_KEY_EID),
+ SubKeys.SUBSCRIBERS, subscriberSetMock_2);
+ final Eid resultEid_2 = captor_2.getValue().getEidItem().iterator().next().getEid();
+ assertEquals(IPV4_SOURCE_EID_4, resultEid_2);
+
+ // for Ipv4 mapping
+ final ArgumentCaptor<MapRequest> captor_3 = ArgumentCaptor.forClass(MapRequest.class);
+ Mockito.verify(notifyHandler, Mockito.times(1)).handleSMR(captor_3.capture(), Mockito.eq(RLOC_6));
+ Mockito.verify(mapService).addData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SUBSCRIBERS,
+ subscriberSetMock_3);
+ final Eid resultEid_3 = captor_3.getValue().getEidItem().iterator().next().getEid();
+ assertEquals(IPV4_SOURCE_EID_6, resultEid_3);
}
@Test
- public void handleMapRegister__ZeroMask() throws Exception {
- int mask = 0;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asMacAfiAddress("01:01:01:01:01:01");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
- }
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withDifferentEid() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- @Test
- public void handleMapRegisterIPv4__ZeroMask() throws Exception {
- int mask = 0;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid)).setMaskLength((short) mask);
- LocatorRecordBuilder locator = getDefaultLocatorBuilder();
- locator.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.getLocatorRecord().add(locator.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
- MapRegister mr = mapRegisterBuilder.build();
-
- addDefaultPutAndGetExpectations(eid, mask);
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mr, false);
- assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("10.31.0.5")), mapNotify.getEidToLocatorRecord().get(0)
- .getLispAddressContainer());
- ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mr.getKeyId(), mapNotify.getKeyId());
- assertEquals(mr.getNonce(), mapNotify.getNonce());
- }
+ final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder()
+ // apply the change
+ .setEid(IPV4_EID_2);
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- @Test
- public void handleMapRegisterIpv4__ValidMask32() throws Exception {
- int mask = 32;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid)).setMaskLength((short) mask);
- LocatorRecordBuilder locator = getDefaultLocatorBuilder();
- locator.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.getLocatorRecord().add(locator.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
- MapRegister mr = mapRegisterBuilder.build();
-
- addDefaultPutAndGetExpectations(eid, mask);
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mr, false);
- assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("10.31.0.5")), mapNotify.getEidToLocatorRecord().get(0)
- .getLispAddressContainer());
- ArrayAssert.assertEquals(mr.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mr.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mr.getKeyId(), mapNotify.getKeyId());
- assertEquals(mr.getNonce(), mapNotify.getNonce());
- }
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- @Test
- public void handleMapRegisterIpv6__ValidMask96() throws Exception {
- int mask = 96;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asIPv6AfiAddress("1:1:1:1:1:1:1:0");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
- }
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(mappingRecordBuilder_1.build())
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
- @Test
- public void handleMapRegisterIpv6__ZeroMask() throws Exception {
- int mask = 0;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asIPv6AfiAddress("1:1:1:1:1:1:1:0");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
@Test
- public void handleMapRegisterIpv6__ValidMask48() throws Exception {
- int mask = 48;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asIPv6AfiAddress("1:1:1:1:1:1:1:0");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
- }
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withDifferentRLOC() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- @Test
- public void handleMapRegisterIpv6__ValidMask128() throws Exception {
- int mask = 128;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress addr = LispAFIConvertor.asIPv6AfiAddress("1:1:1:1:1:1:1:0");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
- }
+ final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder();
+ // apply the change
+ mappingRecordBuilder_1.getLocatorRecord().add(new LocatorRecordBuilder().build());
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- @Test
- public void handleMapRegisterIPV4AndIpv6__ValidMask96() throws Exception {
- int mask = 96;
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- EidToLocatorRecordBuilder recordBuilder0 = getDefaultEidToLocatorBuilder();
- recordBuilder0.setLispAddressContainer(LispAFIConvertor.toContainer(eid)).setMaskLength((short) 32);
- LispAFIAddress addr = LispAFIConvertor.asIPv6AfiAddress("1:1:1:1:1:1:1:0");
- EidToLocatorRecordBuilder recordBuilder1 = getDefaultEidToLocatorBuilder();
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder1.setLispAddressContainer(LispAFIConvertor.toContainer(addr)).setMaskLength((short) mask);
- recordBuilder1.getLocatorRecord().add(locatorBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder0.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder1.build());
- mapRegisterBuilder.setWantMapNotify(true);
-
- addDefaultPutAndGetExpectations(eid, 32);
- addDefaultPutAndGetExpectations(addr, mask);
-
- MapRegister mapRegister = mapRegisterBuilder.build();
-
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegister, false);
- assertEquals(LispAFIConvertor.toContainer(eid), mapNotify.getEidToLocatorRecord().get(0).getLispAddressContainer());
- assertEquals(LispAFIConvertor.toContainer(addr), mapNotify.getEidToLocatorRecord().get(1).getLispAddressContainer());
- ArrayAssert.assertEquals(mapRegister.getAuthenticationData(), mapNotify.getAuthenticationData());
- assertEquals(mapRegister.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegister.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegister.getNonce(), mapNotify.getNonce());
- }
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- @Test
- public void handleMapRegister__MultipleRLOCs() throws Exception {
- addDefaultPutAndGetExpectations(eid, 32);
-
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress rloc0 = rloc;
- LispAFIAddress rloc1 = LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7");
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid));
- LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
- locatorBuilder1.setLispAddressContainer(LispAFIConvertor.toContainer(rloc0));
- LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
- locatorBuilder2.setLispAddressContainer(LispAFIConvertor.toContainer(rloc1));
- recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
- recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
-
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
-
- testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false);
-
- MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
- assertEquals(1, entries.length);
-
- assertEquals(AbstractLispComponent.ADDRESS_SUBKEY, entries[0].getKey());
- assertEquals(LispAFIConvertor.toContainer(rloc0), ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(0)
- .getLispAddressContainer());
- assertEquals(LispAFIConvertor.toContainer(rloc1), ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(1)
- .getLispAddressContainer());
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(mappingRecordBuilder_1.build())
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
@Test
- public void handleMapRegister__MultipleTypes() throws Exception {
- addDefaultPutAndGetExpectations(eid, 32);
-
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- LispAFIAddress rloc0 = rloc;
- // LispAFIAddress rloc1 =
- // LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7");
- String subkey = "bla";
- LispAFIAddress rloc1 = LispAFIConvertor
- .asKeyValue(subkey, LispAFIConvertor.toPrimitive(LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7")));
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid));
- LocatorRecordBuilder locatorBuilder1 = getDefaultLocatorBuilder();
- locatorBuilder1.setLispAddressContainer(LispAFIConvertor.toContainer(rloc0));
- LocatorRecordBuilder locatorBuilder2 = getDefaultLocatorBuilder();
- locatorBuilder2.setLispAddressContainer(LispAFIConvertor.toContainer(rloc1));
- recordBuilder.getLocatorRecord().add(locatorBuilder1.build());
- recordBuilder.getLocatorRecord().add(locatorBuilder2.build());
-
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
-
- testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false);
-
- MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
- assertEquals(2, entries.length);
-
- assertEquals(AbstractLispComponent.ADDRESS_SUBKEY, entries[0].getKey());
- assertEquals(subkey, entries[1].getKey());
- assertEquals(LispAFIConvertor.toContainer(rloc0), ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(0)
- .getLispAddressContainer());
- assertEquals(LispAFIConvertor.toContainer(rloc1), ((MappingServiceRLOCGroup) entries[1].getValue()).getRecords().get(0)
- .getLispAddressContainer());
-
- }
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withDifferentAction() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- @Test
- public void handleMapRegister__TestOverwrite() throws Exception {
- addDefaultPutAndGetExpectations(eid, 32);
+ final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder()
+ // apply the change
+ .setAction(MappingRecord.Action.NativelyForward);
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- addEidToLocatorRecord();
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
- assertEquals(1, entries.length);
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(mappingRecordBuilder_1.build())
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
- assertEquals(AbstractLispComponent.ADDRESS_SUBKEY, entries[0].getKey());
- assertEquals(LispAFIConvertor.toContainer(rloc), ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(0)
- .getLispAddressContainer());
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
@Test
- public void handleMapRegister__TestDontOverwrite() throws Exception {
- int hc = LispAFIConvertor.toContainer(rloc).getAddress().hashCode();
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withDifferentTTL() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- addDefaultPutAndGetExpectations(eid, 32);
- testedMapServer.setOverwrite(false);
+ final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder()
+ // apply the change
+ .setRecordTtl(10);
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- addEidToLocatorRecord();
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- MappingEntry<?>[] entries = mappingEntriesSaver.lastValue;
- assertEquals(1, entries.length);
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(mappingRecordBuilder_1.build())
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
- assertEquals(String.valueOf(hc), entries[0].getKey());
- assertEquals(LispAFIConvertor.toContainer(rloc), ((MappingServiceRLOCGroup) entries[0].getValue()).getRecords().get(0)
- .getLispAddressContainer());
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
- private void addEidToLocatorRecord() {
- EidToLocatorRecordBuilder recordBuilder = getDefaultEidToLocatorBuilder();
- recordBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid));
- LocatorRecordBuilder locatorBuilder = getDefaultLocatorBuilder();
- locatorBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(rloc));
- recordBuilder.getLocatorRecord().add(locatorBuilder.build());
-
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- mapRegisterBuilder.getEidToLocatorRecord().add(recordBuilder.build());
+ @Test
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withDifferentMapVersion() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false);
- }
+ final MappingRecordBuilder mappingRecordBuilder_1 = getDefaultMappingRecordBuilder()
+ // apply the change
+ .setMapVersion((short) 10);
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- @Test
- public void handleMapRegister__MultipleEIDs() throws Exception {
- addDefaultPutAndGetExpectations(eid, 32);
-
- LispAFIAddress rloc1 = LispAFIConvertor.asIPv6AfiAddress("0:0:0:0:0:0:0:7");
- mapRegisterBuilder = getDefaultMapRegisterBuilder();
- EidToLocatorRecordBuilder etlrBuilder = getDefaultEidToLocatorBuilder();
- etlrBuilder.getLocatorRecord().add(getDefaultLocatorBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(rloc1)).build());
- mapRegisterBuilder.setWantMapNotify(true);
- etlrBuilder.setLispAddressContainer(LispAFIConvertor.toContainer(eid));
-
- EidToLocatorRecordBuilder etlr2Builder = getDefaultEidToLocatorBuilder();
- LispAFIAddress address = LispAFIConvertor.asIPAfiAddress("1.1.1.1");
- etlr2Builder.setLispAddressContainer(LispAFIConvertor.toContainer(address));
- etlr2Builder.setMaskLength((short) 32);
- int recordTtl = 5;
- etlr2Builder.setRecordTtl(recordTtl);
- etlr2Builder.getLocatorRecord().add(
- getDefaultLocatorBuilder().setPriority((short) 10)
- .setLispAddressContainer(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("2.2.2.2"))).build());
- mapRegisterBuilder.getEidToLocatorRecord().add(etlrBuilder.build());
- mapRegisterBuilder.getEidToLocatorRecord().add(etlr2Builder.build());
- addDefaultPutAndGetExpectations(address, 32);
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterBuilder.build(), false);
-
- assertEquals(LispAFIConvertor.toContainer(rloc1), mapNotify.getEidToLocatorRecord().get(0).getLocatorRecord().get(0)
- .getLispAddressContainer());
- assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("2.2.2.2")), mapNotify.getEidToLocatorRecord().get(1)
- .getLocatorRecord().get(0).getLispAddressContainer());
- assertEquals(LispAFIConvertor.toContainer(LispAFIConvertor.asIPAfiAddress("1.1.1.1")), mapNotify.getEidToLocatorRecord().get(1)
- .getLispAddressContainer());
- assertEquals(recordTtl, mapNotify.getEidToLocatorRecord().get(1).getRecordTtl().intValue());
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- }
- @Test
- public void handleMapRegisterIpv4__ChekWrongPassword() throws Exception {
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(mappingRecordBuilder_1.build())
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
- addGetExpectations(LispAFIConvertor.asIPAfiAddress("153.16.254.1"), 32, 0, 31, "bla");
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication, false);
- assertEquals(null, mapNotify);
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
@Test
- public void handleMapRegisterIpv4__ChcekNoPasswordAndThenPassword() throws Exception {
-
- addGetExpectations(LispAFIConvertor.asIPAfiAddress("153.16.254.1"), 32, 30, 25, "password");
- addPutExpectations(LispAFIConvertor.asIPAfiAddress("153.16.254.1"), 32);
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication, false);
- assertEquals(mapRegisterWithAuthentication.getEidToLocatorRecord(), mapNotify.getEidToLocatorRecord());
- assertEquals(mapRegisterWithAuthentication.getKeyId(), mapNotify.getKeyId());
- assertEquals(mapRegisterWithAuthentication.getNonce(), mapNotify.getNonce());
- }
+ @SuppressWarnings({ "unchecked", "rawtypes" })
+ public void mappingChangedTest_withNullMap() throws NoSuchFieldException, IllegalAccessException {
+ setConfigIniMappingMergeField(true);
- @Test
- public void handleMapRegisterIpv4__ChcekNoPassword() throws Exception {
+ final MappingRecordBuilder mappingRecordBuilder_2 = getDefaultMappingRecordBuilder();
+ final ArgumentCaptor<List> captor = ArgumentCaptor.forClass(List.class);
- addGetExpectations(LispAFIConvertor.asIPAfiAddress("153.16.254.1"), 32, 30, 0, "password");
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication, false);
- assertEquals(null, mapNotify);
- }
+ Mockito.when(mapService.getAuthenticationKey(IPV4_EID_1)).thenReturn(MAPPING_AUTHKEY);
+ Mockito.when(mapService.getData(MappingOrigin.Southbound, IPV4_EID_1, SubKeys.SRC_RLOCS))
+ .thenReturn(DEFAULT_IP_ADDRESS_SET);
- @Test
- public void handleMapRegisterIpv4__ChcekNoreturn() throws Exception {
+ Mockito.when(mapService.getMapping(MappingOrigin.Southbound, IPV4_EID_1))
+ .thenReturn(null)
+ .thenReturn(mappingRecordBuilder_2.build())
+ .thenReturn(null);
- addGetExpectations(LispAFIConvertor.asIPAfiAddress("153.16.254.1"), 32);
- MapNotify mapNotify = testedMapServer.handleMapRegister(mapRegisterWithAuthentication, false);
- assertEquals(mapNotify, null);
+ mapServer.handleMapRegister(mapRegister);
+ Mockito.verify(notifyHandler).handleMapNotify(Mockito.any(MapNotify.class), captor.capture());
+ // verify that a list of transport addresses has 2 values - happens only if mappingUpdated == true
+ assertEquals(2, captor.getValue().size());
}
- @SuppressWarnings("unchecked")
- @Test
- public void handleAddAuthenticationKey() throws Exception {
- String password = "pass";
- IMappingServiceKey key = getDefualtKey();
- oneOf(lispDAO).put(weq(key),
- weq((MappingEntry<String>[]) (Arrays.asList(new MappingEntry<String>(AbstractLispComponent.PASSWORD_SUBKEY, password)).toArray())));
- testedMapServer.addAuthenticationKey(LispAFIConvertor.toContainer(eid), key.getMask(), password);
- }
+ private static MapRegisterBuilder getDefaultMapRegisterBuilder() {
+ final MapRegisterBuilder mapRegisterBuilder = new MapRegisterBuilder()
+ .setProxyMapReply(true)
+ .setWantMapNotify(true)
+ .setKeyId((short) 0)
+ .setMappingRecordItem(new ArrayList<>())
+ .setMergeEnabled(true)
+ .setNonce(1L)
+ .setSiteId(new SiteId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7}))
+ .setXtrId(new XtrId(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}))
+ .setXtrSiteIdPresent(true);
+ mapRegisterBuilder.getMappingRecordItem().add(getDefaultMappingRecordItemBuilder().build());
- @Test
- public void handleGetAuthenticationKey() throws Exception {
- IMappingServiceKey key = getDefualtKey();
- oneOf(lispDAO).getSpecific(weq(key), with(AbstractLispComponent.PASSWORD_SUBKEY));
- ret("password");
- assertEquals("password", testedMapServer.getAuthenticationKey(LispAFIConvertor.toContainer(eid), key.getMask()));
+ return mapRegisterBuilder;
}
- @Test
- public void handleGetAuthenticationKeyNoIteration() throws Exception {
- testedMapServer.setShouldIterateMask(false);
- IMappingServiceKey key = getDefualtKey();
- IMappingServiceKey passKey = getKey(30);
- oneOf(lispDAO).getSpecific(weq(key), with(AbstractLispComponent.PASSWORD_SUBKEY));
- allowing(lispDAO).getSpecific(weq(passKey), with(AbstractLispComponent.PASSWORD_SUBKEY));
- ret("password");
- assertEquals(null, testedMapServer.getAuthenticationKey(LispAFIConvertor.toContainer(eid), key.getMask()));
+ private static MappingRecordItemBuilder getDefaultMappingRecordItemBuilder() {
+ return new MappingRecordItemBuilder()
+ .setMappingRecordItemId("mapping-record-item-id")
+ .setKey(new MappingRecordItemKey("mapping-record-item-key"))
+ .setMappingRecord(getDefaultMappingRecordBuilder().build());
}
- @Test
- public void handleRemoveAuthenticationKey() throws Exception {
- IMappingServiceKey key = getDefualtKey();
- oneOf(lispDAO).removeSpecific(weq(key), with(AbstractLispComponent.PASSWORD_SUBKEY));
- testedMapServer.removeAuthenticationKey(LispAFIConvertor.toContainer(eid), key.getMask());
+ private static MappingRecordBuilder getDefaultMappingRecordBuilder() {
+ return new MappingRecordBuilder()
+ .setAction(MappingRecord.Action.NoAction)
+ .setAuthoritative(false)
+ .setLocatorRecord(new ArrayList<>())
+ .setMapVersion((short) 0)
+ .setRecordTtl(60)
+ .setEid(IPV4_EID_1);
}
- private void addDefaultPutAndGetExpectations(LispAFIAddress addr, int mask) {
- addPutExpectations(addr, mask);
- addGetExpectations(addr, mask);
- }
+ private static MapNotifyBuilder getDefaultMapNotifyBuilder(MapRegister mapRegister) {
+ final MapNotifyBuilder mapNotifyBuilder = new MapNotifyBuilder()
+ .setNonce(mapRegister.getNonce())
+ .setKeyId(mapRegister.getKeyId())
+ .setMergeEnabled(mapRegister.isMergeEnabled())
+ .setMappingRecordItem(new ArrayList<>())
+ .setAuthenticationData(new byte[]{});
+ mapNotifyBuilder.getMappingRecordItem().add(getDefaultMappingRecordItemBuilder().build());
- private void addGetExpectations(LispAFIAddress address, int mask) {
- addGetExpectations(address, mask, 0, 0, "password");
+ return mapNotifyBuilder;
}
- private void addPutExpectations(LispAFIAddress address, int mask) {
- oneOf(lispDAO).put(weq(MappingServiceKeyUtil.generateMappingServiceKey(LispAFIConvertor.toContainer(address), mask)),
- with(mappingEntriesSaver));
+ private static void setConfigIniMappingMergeField(boolean value) throws NoSuchFieldException,
+ IllegalAccessException {
+ final Field mappingMergeField = CONFIG_INI.getClass().getDeclaredField("mappingMerge");
+ mappingMergeField.setAccessible(true);
+ mappingMergeField.setBoolean(CONFIG_INI, value);
}
- private void addGetExpectations(LispAFIAddress address, int mask, int withoutPassword, int withPassword, String password) {
- if (withoutPassword > 0) {
- String result = null;
- result = null;
- allowing(lispDAO).getSpecific(
- with(MappingServiceKeyUtil.generateMappingServiceKey(LispAFIConvertor.toContainer(address), withoutPassword)), with("password"));
- ret(result);
- }
- if (withPassword > 0) {
- String result = null;
- result = password;
- allowing(lispDAO).getSpecific(with(MappingServiceKeyUtil.generateMappingServiceKey(LispAFIConvertor.toContainer(address), withPassword)),
- with("password"));
- ret(result);
- }
- for (int i = mask; i >= 0; i--) {
- allowing(lispDAO).getSpecific(with(MappingServiceKeyUtil.generateMappingServiceKey(LispAFIConvertor.toContainer(address), i)),
- with("password"));
- ret(null);
- }
- }
+ private static Set<IpAddressBinary> getDefaultIpAddressSet() {
+ final Set<IpAddressBinary> addressSet = Sets.newHashSet(IPV4_BINARY_1, IPV4_BINARY_2);
- private IMappingServiceKey getDefualtKey() {
- return getKey(32);
+ return addressSet;
}
- private IMappingServiceKey getKey(int mask) {
- IMappingServiceKey key = MappingServiceKeyUtil.generateMappingServiceKey(LispAFIConvertor.toContainer(eid), mask);
- return key;
- }
+ private static List<TransportAddress> getTransportAddressList() {
+ TransportAddressBuilder transportAddressBuilder_1 = new TransportAddressBuilder()
+ .setIpAddress(IPV4_BINARY_1)
+ .setPort(new PortNumber(LispMessage.PORT_NUM));
- private MapRegisterBuilder getDefaultMapRegisterBuilder() {
- MapRegisterBuilder mrb = new MapRegisterBuilder();
- mrb.setKeyId((short) 0);
- mrb.setNonce((long) 0);
- mrb.setWantMapNotify(false);
- mrb.setProxyMapReply(false);
- mrb.setEidToLocatorRecord(new ArrayList<EidToLocatorRecord>());
- mrb.setAuthenticationData(new byte[0]);
- return mrb;
- }
+ TransportAddressBuilder transportAddressBuilder_2 = new TransportAddressBuilder()
+ .setIpAddress(IPV4_BINARY_2)
+ .setPort(new PortNumber(LispMessage.PORT_NUM));
- private EidToLocatorRecordBuilder getDefaultEidToLocatorBuilder() {
- EidToLocatorRecordBuilder builder = new EidToLocatorRecordBuilder();
- builder.setAction(Action.NoAction);
- builder.setAuthoritative(false);
- builder.setLocatorRecord(new ArrayList<LocatorRecord>());
- builder.setMapVersion((short) 0);
- builder.setMaskLength((short) 32);
- builder.setRecordTtl(60);
- return builder;
- }
+ final List<TransportAddress> transportAddressList = Lists.newArrayList(
+ transportAddressBuilder_1.build(),
+ transportAddressBuilder_2.build());
- private LocatorRecordBuilder getDefaultLocatorBuilder() {
- LocatorRecordBuilder builder = new LocatorRecordBuilder();
- builder.setLocalLocator(false);
- builder.setMulticastPriority((short) 0);
- builder.setMulticastWeight((short) 0);
- builder.setPriority((short) 0);
- builder.setRlocProbed(false);
- builder.setRouted(false);
- builder.setWeight((short) 0);
- return builder;
+ return transportAddressList;
}
}