Merge "Provide Karaf 4 features"
[lispflowmapping.git] / mappingservice / implementation / src / test / java / org / opendaylight / lispflowmapping / implementation / lisp / MapResolverTest.java
index d4b6dcbfc806c6b8fef518bc5b1d5e56367c0c70..632bbc27c2528666caae9a12c777d6417df90a64 100644 (file)
@@ -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,
@@ -17,11 +17,13 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
+import org.opendaylight.lispflowmapping.config.ConfigIni;
 import org.opendaylight.lispflowmapping.implementation.LispMappingService;
 import org.opendaylight.lispflowmapping.implementation.MappingService;
-import org.opendaylight.lispflowmapping.implementation.config.ConfigIni;
 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
-import org.opendaylight.lispflowmapping.interfaces.dao.SubscriberRLOC;
+import org.opendaylight.lispflowmapping.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.rev130715.IpAddress;
@@ -48,7 +50,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.ei
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.locatorrecords.LocatorRecordKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.authkey.container.MappingAuthkeyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
@@ -66,7 +67,7 @@ public class MapResolverTest {
 
     private static MapResolver mapResolver;
     private static MappingService mapServiceMock;
-    private static Set<SubscriberRLOC> subscriberSetMock;
+    private static Set<Subscriber> subscriberSetMock;
     private static LispMappingService lispMappingServiceMock;
 
     private static final String ITR_RLOC_KEY_STRING =   "itr_rloc_key";
@@ -106,8 +107,8 @@ public class MapResolverTest {
 
     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")
@@ -129,9 +130,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();
@@ -151,14 +153,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.getWidestNegativePrefix(IPV4_PREFIX_EID_1)).thenReturn(IPV4_PREFIX_EID_1);
+        Mockito.when(mapServiceMock.addNegativeMapping(IPV4_PREFIX_EID_1))
+                .thenReturn(getDefaultMappingData(mappingRecordBuilder.build()));
 
         // result
         final MapReplyBuilder mapReplyBuilder = getDefaultMapReplyBuilder();
@@ -178,12 +179,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();
@@ -192,7 +194,7 @@ 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));
     }
 
     /**
@@ -204,12 +206,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);
 
         // ----------------------
         // with sourceRloc = null
@@ -217,7 +220,7 @@ public class MapResolverTest {
                 newItrRloc(MacAfi.class, null),
                 newItrRloc(Ipv4BinaryAfi.class, IPV4_ADDRESS));
 
-        ArgumentCaptor<SubscriberRLOC> captor = ArgumentCaptor.forClass(SubscriberRLOC.class);
+        ArgumentCaptor<Subscriber> 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.
@@ -233,7 +236,7 @@ public class MapResolverTest {
                 .setSourceRloc(IPV4_ADDRESS_BINARY_1)
                 .setItrRloc(itrRlocList).build();
 
-        captor = ArgumentCaptor.forClass(SubscriberRLOC.class);
+        captor = ArgumentCaptor.forClass(Subscriber.class);
         mapResolver.handleMapRequest(mapRequest);
         Mockito.verify(subscriberSetMock, Mockito.times(2)).add(captor.capture());
         assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress());
@@ -249,7 +252,7 @@ public class MapResolverTest {
                 .setSourceRloc(IPV6_ADDRESS_BINARY)
                 .setItrRloc(itrRlocList).build();
 
-        captor = ArgumentCaptor.forClass(SubscriberRLOC.class);
+        captor = ArgumentCaptor.forClass(Subscriber.class);
         mapResolver.handleMapRequest(mapRequest);
         Mockito.verify(subscriberSetMock, Mockito.times(3)).add(captor.capture());
         assertEquals(IPV6_ADDRESS, captor.getValue().getSrcRloc().getAddress());
@@ -265,7 +268,7 @@ public class MapResolverTest {
                 .setSourceRloc(IPV4_ADDRESS_BINARY_2)
                 .setItrRloc(itrRlocList).build();
 
-        captor = ArgumentCaptor.forClass(SubscriberRLOC.class);
+        captor = ArgumentCaptor.forClass(Subscriber.class);
         mapResolver.handleMapRequest(mapRequest);
         Mockito.verify(subscriberSetMock, Mockito.times(4)).add(captor.capture());
         assertEquals(IPV4_ADDRESS, captor.getValue().getSrcRloc().getAddress());
@@ -281,7 +284,7 @@ public class MapResolverTest {
                 .setSourceRloc(IPV4_ADDRESS_BINARY_1)
                 .setItrRloc(itrRlocList).build();
 
-        captor = ArgumentCaptor.forClass(SubscriberRLOC.class);
+        captor = ArgumentCaptor.forClass(Subscriber.class);
         mapResolver.handleMapRequest(mapRequest);
         Mockito.verify(subscriberSetMock, Mockito.times(5)).add(captor.capture());
         assertEquals(mac, captor.getValue().getSrcRloc().getAddress());
@@ -296,14 +299,18 @@ public class MapResolverTest {
         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.setSubscriberTimeoutByRecordTtl(
+                mappingRecordBuilder.getRecordTtl());
+        Mockito.when(subscriberSetMock.contains(subscriberMock))
                 .thenReturn(true);
 
         // result
@@ -322,8 +329,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,
@@ -349,6 +357,7 @@ 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))
@@ -357,7 +366,7 @@ public class MapResolverTest {
                 .build());
 
         Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1))
-                .thenReturn(mappingRecordBuilder.build());
+                .thenReturn(mappingData);
 
         // result
         final LocatorRecordBuilder locatorRecordBuilder_3 = getDefaultLocatorBuilder()
@@ -396,6 +405,7 @@ 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))
@@ -404,7 +414,7 @@ public class MapResolverTest {
                 .build());
 
         Mockito.when(mapServiceMock.getMapping(mapRequestBuilder.getSourceEid().getEid(), IPV4_PREFIX_EID_1))
-                .thenReturn(mappingRecordBuilder.build());
+                .thenReturn(mappingData);
 
         // result
         final LocatorRecordBuilder locatorRecordBuilder_3 = getDefaultLocatorBuilder()
@@ -437,14 +447,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();
@@ -484,7 +496,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());
 
@@ -493,6 +505,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)