Remove blueprint XML from mapping service implementation
[lispflowmapping.git] / mappingservice / implementation / src / test / java / org / opendaylight / lispflowmapping / implementation / LispMappingServiceTest.java
index b8b28fa1a9a8b9d13a52cc74744a1f229c87e722..021da330b73fa0f4229bd4fe8e9d486d4a02ef44 100644 (file)
@@ -11,11 +11,9 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.Lists;
-
 import java.lang.reflect.Field;
 import java.util.ArrayList;
 import java.util.List;
-
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.MutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -25,22 +23,23 @@ import org.mockito.ArgumentMatcher;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.opendaylight.controller.md.sal.binding.api.NotificationService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolverAsync;
 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
 import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService;
 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.PortNumber;
+import org.opendaylight.mdsal.binding.api.NotificationService;
+import org.opendaylight.mdsal.binding.api.RpcProviderService;
+import org.opendaylight.mdsal.singleton.common.api.ClusterSingletonServiceProvider;
+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.AddMapping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.GotMapNotify;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.GotMapReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
+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.MapReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MappingKeepAlive;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.RequestMapping;
@@ -48,20 +47,13 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.Xt
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrRequestMapping;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container
-        .MapRegisterCacheMetadata;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container
-        .MapRegisterCacheMetadataBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container
-        .map.register.cache.metadata.EidLispAddress;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container
-        .map.register.cache.metadata.EidLispAddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.MapRegisterCacheMetadata;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.MapRegisterCacheMetadataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.map.register.cache.metadata.EidLispAddress;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.map.register.cache.metadata.EidLispAddressBuilder;
 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.
-        MappingRecordBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.
-        MappingRecordItemBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping._record.container.MappingRecordBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping._record.list.MappingRecordItemBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestmessage.MapRequest;
@@ -74,20 +66,31 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendM
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapNotifyInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapReplyInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapRequestInputBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
+import org.opendaylight.yangtools.concepts.Registration;
+import org.opendaylight.yangtools.yang.binding.util.BindingMap;
+import org.opendaylight.yangtools.yang.common.Uint16;
 
 @RunWith(MockitoJUnitRunner.class)
 public class LispMappingServiceTest {
     @Mock private static MapRegister mapRegisterMock;
-    @Mock(name = "lispSB") private static OdlLispSbService lispSBMock;
     @Mock(name = "mapServer") private static IMapServerAsync mapServerMock;
-    @Mock(name = "mapService") private static IMappingService iMappingServiceMock;
     @Mock(name = "mapResolver") private static IMapResolverAsync mapResolverMock;
     @Mock(name = "tlsMapReply") private static ThreadLocal<MapReply> tlsMapReplyMock;
-    @Mock(name = "notificationService") private static NotificationService notificationServiceMock;
     @Mock(name = "tlsMapNotify") private static ThreadLocal<Pair<MapNotify, List<TransportAddress>>> tlsMapNotifyMock;
     @Mock(name = "tlsMapRequest") private static ThreadLocal<Pair<MapRequest, TransportAddress>> tlsMapRequestMock;
-    @InjectMocks private static LispMappingService lispMappingService;
+    @Mock private static Registration rpcRegistration;
+    @Mock(name = "listenerRegistration") private static Registration listenerRegistration;
+
+    private final NotificationService notificationService = Mockito.mock(NotificationService.class);
+    private final RpcProviderService rpcProviderService = Mockito.mock(RpcProviderService.class);
+    private final IMappingService mappingService = Mockito.mock(IMappingService.class);
+    private final OdlLispSbService odlLispSbService = Mockito.mock(OdlLispSbService.class);
+    private final ClusterSingletonServiceProvider clusterSingletonService = Mockito.mock(
+            ClusterSingletonServiceProvider.class);
+
+    @InjectMocks
+    private final LispMappingService lispMappingService = new LispMappingService(
+            mappingService, odlLispSbService, clusterSingletonService, rpcProviderService, notificationService);
 
     private static final byte[] IPV4_BYTES_1 =       new byte[] {1, 2, 3, 0};
     private static final byte[] IPV4_BYTES_2 =       new byte[] {1, 2, 4, 0};
@@ -109,13 +112,13 @@ public class LispMappingServiceTest {
 
     private static final TransportAddress TRANSPORT_ADDRESS_1 = new TransportAddressBuilder()
             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
-            .setPort(new PortNumber(9999)).build();
+            .setPort(new PortNumber(Uint16.valueOf(9999))).build();
     private static final TransportAddress TRANSPORT_ADDRESS_2 = new TransportAddressBuilder()
             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_2)))
-            .setPort(new PortNumber(8888)).build();
+            .setPort(new PortNumber(Uint16.valueOf(8888))).build();
     private static final TransportAddress TRANSPORT_ADDRESS = new TransportAddressBuilder()
             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
-            .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
+            .setPort(new PortNumber(LispMessage.PORT_NUMBER)).build();
 
     /**
      * Tests {@link LispMappingService#handleMapRequest} method.
@@ -124,7 +127,6 @@ public class LispMappingServiceTest {
     public void handleMapRequestTest() {
         final MapRequest mapRequest = Mockito.mock(MapRequest.class);
         final MapReply mapReply = new MapReplyBuilder().build();
-        Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
         Mockito.when(tlsMapRequestMock.get()).thenReturn(null);
         Mockito.when(tlsMapReplyMock.get()).thenReturn(mapReply);
 
@@ -134,7 +136,7 @@ public class LispMappingServiceTest {
         Mockito.verify(tlsMapRequestMock).get();
         Mockito.verifyNoMoreInteractions(tlsMapRequestMock);
         Mockito.verify(mapResolverMock).handleMapRequest(mapRequest);
-        Mockito.verify(tlsMapReplyMock).set(Mockito.any(MapReply.class));
+        Mockito.verify(tlsMapReplyMock).set(Mockito.any());
         Mockito.verify(tlsMapReplyMock).get();
 
         assertEquals(result, mapReply);
@@ -151,11 +153,10 @@ public class LispMappingServiceTest {
                 .setMapRequest(pair.getLeft())
                 .setTransportAddress(pair.getRight());
 
-        Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
         Mockito.when(tlsMapRequestMock.get()).thenReturn(pair);
 
         assertNull(lispMappingService.handleMapRequest(mapRequest));
-        Mockito.verify(lispSBMock).sendMapRequest(smrib.build());
+        Mockito.verify(odlLispSbService).sendMapRequest(smrib.build());
     }
 
     /**
@@ -166,13 +167,11 @@ public class LispMappingServiceTest {
     public void handleMapRegisterTest() {
         final Pair<MapNotify, List<TransportAddress>> pairMock = Mockito.mock(Pair.class);
 
-        Mockito.when(mapRegisterMock.getMappingRecordItem())
-                .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
         Mockito.when(tlsMapNotifyMock.get()).thenReturn(pairMock);
 
         lispMappingService.handleMapRegister(mapRegisterMock);
         Mockito.verify(mapServerMock).handleMapRegister(mapRegisterMock);
-        Mockito.verify(tlsMapNotifyMock).set(Mockito.any(MutablePair.class));
+        Mockito.verify(tlsMapNotifyMock).set(Mockito.any());
     }
 
     /**
@@ -186,12 +185,10 @@ public class LispMappingServiceTest {
         final AddMapping addMapping = Mockito.mock(AddMapping.class);
 
         Mockito.when(addMapping.getMapRegister()).thenReturn(mapRegister);
-        Mockito.when(mapRegister.getMappingRecordItem())
-                .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
         Mockito.when(tlsMapNotifyMock.get()).thenReturn(getDefaultMapNotifyPair());
 
         lispMappingService.onAddMapping(addMapping);
-        Mockito.verify(lispSBMock, Mockito.times(2)).sendMapNotify(Mockito.argThat(new TransportAddressMatch()));
+        Mockito.verify(odlLispSbService, Mockito.times(2)).sendMapNotify(Mockito.argThat(new TransportAddressMatch()));
     }
 
     /**
@@ -206,8 +203,6 @@ public class LispMappingServiceTest {
         final MapNotify mapNotify = new MapNotifyBuilder().setKeyId((short) 1).build();
 
         Mockito.when(addMapping.getMapRegister()).thenReturn(mapRegister);
-        Mockito.when(mapRegister.getMappingRecordItem())
-                .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
         Mockito.when(tlsMapNotifyMock.get()).thenReturn(new MutablePair<>(mapNotify, null));
         Mockito.when(addMapping.getTransportAddress()).thenReturn(TRANSPORT_ADDRESS_1);
 
@@ -218,7 +213,7 @@ public class LispMappingServiceTest {
                 .setTransportAddress(TRANSPORT_ADDRESS);
 
         lispMappingService.onAddMapping(addMapping);
-        Mockito.verify(lispSBMock).sendMapNotify(smnib.build());
+        Mockito.verify(odlLispSbService).sendMapNotify(smnib.build());
     }
 
     /**
@@ -234,7 +229,6 @@ public class LispMappingServiceTest {
 
         Mockito.when(requestMapping.getMapRequest()).thenReturn(mapRequest);
         Mockito.when(requestMapping.getTransportAddress()).thenReturn(TRANSPORT_ADDRESS_1);
-        Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
         Mockito.when(tlsMapReplyMock.get()).thenReturn(mapReply);
 
         // result
@@ -243,7 +237,7 @@ public class LispMappingServiceTest {
                 .setTransportAddress(TRANSPORT_ADDRESS_1);
 
         lispMappingService.onRequestMapping(requestMapping);
-        Mockito.verify(lispSBMock).sendMapReply(smrib.build());
+        Mockito.verify(odlLispSbService).sendMapReply(smrib.build());
     }
 
     /**
@@ -257,11 +251,10 @@ public class LispMappingServiceTest {
                     .maprequestnotification.MapRequest.class);
 
         Mockito.when(requestMapping.getMapRequest()).thenReturn(mapRequest);
-        Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
         Mockito.when(tlsMapReplyMock.get()).thenReturn(null);
 
         lispMappingService.onRequestMapping(requestMapping);
-        Mockito.verifyZeroInteractions(lispSBMock);
+        Mockito.verifyZeroInteractions(odlLispSbService);
     }
 
     /**
@@ -273,8 +266,8 @@ public class LispMappingServiceTest {
         Mockito.when(mappingKeepAlive.getMapRegisterCacheMetadata()).thenReturn(getDefaultMapRegisterCacheMetadata());
 
         lispMappingService.onMappingKeepAlive(mappingKeepAlive);
-        Mockito.verify(iMappingServiceMock).updateMappingRegistration(MappingOrigin.Southbound, IPV4_EID_1, TIMESTAMP);
-        Mockito.verify(iMappingServiceMock).updateMappingRegistration(MappingOrigin.Southbound, IPV4_EID_2, TIMESTAMP);
+        Mockito.verify(mappingService).refreshMappingRegistration(IPV4_EID_1, null, TIMESTAMP);
+        Mockito.verify(mappingService).refreshMappingRegistration(IPV4_EID_2, null, TIMESTAMP);
     }
 
     /**
@@ -294,7 +287,7 @@ public class LispMappingServiceTest {
                 .setTransportAddress(TRANSPORT_ADDRESS);
 
         lispMappingService.handleSMR(mapRequest, subscriber);
-        Mockito.verify(lispSBMock).sendMapRequest(smrib.build());
+        Mockito.verify(odlLispSbService).sendMapRequest(smrib.build());
     }
 
     /**
@@ -351,8 +344,12 @@ public class LispMappingServiceTest {
      */
     @Test
     public void closeTest() throws Exception {
+        setMock("rpcRegistration", rpcRegistration);
+        setMock("listenerRegistration", listenerRegistration);
         lispMappingService.close();
-
+        Mockito.verify(rpcRegistration).close();
+        Mockito.verify(listenerRegistration).close();
+        Mockito.verify(clusterSingletonService).close();
         assertNull(getField("mapResolver"));
         assertNull(getField("mapServer"));
     }
@@ -362,36 +359,27 @@ public class LispMappingServiceTest {
      */
     @Test
     public void otherTest() throws Exception {
-        assertEquals(notificationServiceMock, lispMappingService.getNotificationService());
+        assertEquals(notificationService, lispMappingService.getNotificationService());
         assertEquals(true, lispMappingService.shouldUseSmr());
 
-        BindingAwareBroker brokerMock = Mockito.mock(BindingAwareBroker.class);
-        lispMappingService.setBindingAwareBroker(brokerMock);
-        assertEquals(brokerMock, getField("broker"));
-
-        NotificationService otherNotificationServiceMock = Mockito.mock(NotificationService.class);
-        lispMappingService.setNotificationService(otherNotificationServiceMock);
-        assertEquals(otherNotificationServiceMock, getField("notificationService"));
-
-        ProviderContext sessionMock = Mockito.mock(ProviderContext.class);
-        lispMappingService.onSessionInitiated(sessionMock);
-        assertEquals(sessionMock, getField("session"));
-
         lispMappingService.setShouldAuthenticate(true);
         Mockito.verify(mapResolverMock).setShouldAuthenticate(true);
 
-        IMappingService mappingServiceMock = Mockito.mock(IMappingService.class);
-        lispMappingService.setMappingService(mappingServiceMock);
-        assertEquals(mappingServiceMock, getField("mapService"));
-
         lispMappingService.onGotMapReply(Mockito.mock(GotMapReply.class));
         lispMappingService.onGotMapNotify(Mockito.mock(GotMapNotify.class));
         lispMappingService.onXtrRequestMapping(Mockito.mock(XtrRequestMapping.class));
         lispMappingService.onXtrReplyMapping(Mockito.mock(XtrReplyMapping.class));
     }
 
+    private void setMock(final String fieldName, final Object value)
+            throws IllegalAccessException, NoSuchFieldException {
+        final Field field = LispMappingService.class.getDeclaredField(fieldName);
+        field.setAccessible(true);
+        field.set(lispMappingService, value);
+    }
+
     @SuppressWarnings("unchecked")
-    private static <T> T getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
+    private <T> T getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
         final Field field = LispMappingService.class.getDeclaredField(fieldName);
         field.setAccessible(true);
 
@@ -419,14 +407,14 @@ public class LispMappingServiceTest {
                 .setEid(IPV4_EID_2).build();
 
         return new MapRegisterCacheMetadataBuilder()
-                .setEidLispAddress(Lists.newArrayList(eidLispAddress_1, eidLispAddress_2))
+                .setEidLispAddress(BindingMap.ordered(eidLispAddress_1, eidLispAddress_2))
                 .setTimestamp(TIMESTAMP).build();
     }
 
-    class TransportAddressMatch extends ArgumentMatcher<SendMapNotifyInput> {
-        public boolean matches(Object sendMapNotify) {
-            final SendMapNotifyInput sendMapNotifyInput = (SendMapNotifyInput) sendMapNotify;
-            final TransportAddress notifyTransportAddress = sendMapNotifyInput.getTransportAddress();
+    class TransportAddressMatch implements ArgumentMatcher<SendMapNotifyInput> {
+        @Override
+        public boolean matches(SendMapNotifyInput sendMapNotify) {
+            final TransportAddress notifyTransportAddress = sendMapNotify.getTransportAddress();
             return TRANSPORT_ADDRESS_1.equals(notifyTransportAddress)
                     || TRANSPORT_ADDRESS_2.equals(notifyTransportAddress);
         }