Checkstyle: fix issues and enforce on implementation
[lispflowmapping.git] / mappingservice / implementation / src / test / java / org / opendaylight / lispflowmapping / implementation / LispMappingServiceTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.lispflowmapping.implementation;
9
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
12
13 import com.google.common.collect.Lists;
14 import java.lang.reflect.Field;
15 import java.util.ArrayList;
16 import java.util.List;
17 import org.apache.commons.lang3.tuple.ImmutablePair;
18 import org.apache.commons.lang3.tuple.MutablePair;
19 import org.apache.commons.lang3.tuple.Pair;
20 import org.junit.Test;
21 import org.junit.runner.RunWith;
22 import org.mockito.ArgumentMatcher;
23 import org.mockito.InjectMocks;
24 import org.mockito.Mock;
25 import org.mockito.Mockito;
26 import org.mockito.runners.MockitoJUnitRunner;
27 import org.opendaylight.controller.md.sal.binding.api.NotificationService;
28 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapResolverAsync;
29 import org.opendaylight.lispflowmapping.interfaces.lisp.IMapServerAsync;
30 import org.opendaylight.lispflowmapping.interfaces.mappingservice.IMappingService;
31 import org.opendaylight.lispflowmapping.lisp.type.LispMessage;
32 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.AddMapping;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.GotMapNotify;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.GotMapReply;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapNotify;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapRegister;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MapReply;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.MappingKeepAlive;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.RequestMapping;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrReplyMapping;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrRequestMapping;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.list.EidItemBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.MapRegisterCacheMetadata;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.MapRegisterCacheMetadataBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.map.register.cache.metadata.EidLispAddress;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.map.register.cache.metadata.container.map.register.cache.metadata.EidLispAddressBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapnotifymessage.MapNotifyBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecordBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.list.MappingRecordItemBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapreplymessage.MapReplyBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequest.SourceEidBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestmessage.MapRequest;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestmessage.MapRequestBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.rloc.container.Rloc;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddress;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.transport.address.TransportAddressBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.OdlLispSbService;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapNotifyInput;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapNotifyInputBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapReplyInputBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.sb.rev150904.SendMapRequestInputBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.MappingOrigin;
68
69 @RunWith(MockitoJUnitRunner.class)
70 public class LispMappingServiceTest {
71     @Mock private static MapRegister mapRegisterMock;
72     @Mock(name = "mapServer") private static IMapServerAsync mapServerMock;
73     @Mock(name = "mapResolver") private static IMapResolverAsync mapResolverMock;
74     @Mock(name = "tlsMapReply") private static ThreadLocal<MapReply> tlsMapReplyMock;
75     @Mock(name = "tlsMapNotify") private static ThreadLocal<Pair<MapNotify, List<TransportAddress>>> tlsMapNotifyMock;
76     @Mock(name = "tlsMapRequest") private static ThreadLocal<Pair<MapRequest, TransportAddress>> tlsMapRequestMock;
77
78     private final NotificationService notificationService = Mockito.mock(NotificationService.class);
79     private final IMappingService mappingService = Mockito.mock(IMappingService.class);
80     private final OdlLispSbService odlLispSbService = Mockito.mock(OdlLispSbService.class);
81
82     @InjectMocks
83     private LispMappingService lispMappingService = new LispMappingService(
84             notificationService,
85             mappingService,
86             odlLispSbService);
87
88     private static final byte[] IPV4_BYTES_1 =       new byte[] {1, 2, 3, 0};
89     private static final byte[] IPV4_BYTES_2 =       new byte[] {1, 2, 4, 0};
90     private static final String IPV4_STRING_1 =      "1.2.3.0";
91     private static final String IPV4_STRING_2 =      "1.2.3.1";
92     private static final String IPV4_SOURCE_STRING = "192.168.0.1";
93     private static final String IPV4_PREFIX_STRING = "/24";
94     private static final long TIMESTAMP = 1L;
95
96     private static final Eid IPV4_PREFIX_EID_1 = LispAddressUtil.asIpv4PrefixEid(IPV4_STRING_1 + IPV4_PREFIX_STRING);
97     private static final Eid IPV4_SOURCE_EID = LispAddressUtil.asIpv4Eid(IPV4_SOURCE_STRING);
98     private static final Eid IPV4_EID_1 = LispAddressUtil.asIpv4Eid(IPV4_STRING_1);
99     private static final Eid IPV4_EID_2 = LispAddressUtil.asIpv4Eid(IPV4_STRING_2);
100     private static final EidItemBuilder EID_ITEM_BUILDER = new EidItemBuilder()
101             .setEidItemId("eid-item-id")
102             .setEid(IPV4_PREFIX_EID_1);
103     private static final MappingRecordItemBuilder MAPPING_RECORD_ITEM_BUILDER = new MappingRecordItemBuilder()
104             .setMappingRecord(new MappingRecordBuilder().setEid(IPV4_PREFIX_EID_1).build());
105
106     private static final TransportAddress TRANSPORT_ADDRESS_1 = new TransportAddressBuilder()
107             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
108             .setPort(new PortNumber(9999)).build();
109     private static final TransportAddress TRANSPORT_ADDRESS_2 = new TransportAddressBuilder()
110             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_2)))
111             .setPort(new PortNumber(8888)).build();
112     private static final TransportAddress TRANSPORT_ADDRESS = new TransportAddressBuilder()
113             .setIpAddress(new IpAddressBinary(new Ipv4AddressBinary(IPV4_BYTES_1)))
114             .setPort(new PortNumber(LispMessage.PORT_NUM)).build();
115
116     /**
117      * Tests {@link LispMappingService#handleMapRequest} method.
118      */
119     @Test
120     public void handleMapRequestTest() {
121         final MapRequest mapRequest = Mockito.mock(MapRequest.class);
122         final MapReply mapReply = new MapReplyBuilder().build();
123         Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
124         Mockito.when(tlsMapRequestMock.get()).thenReturn(null);
125         Mockito.when(tlsMapReplyMock.get()).thenReturn(mapReply);
126
127         final MapReply result = lispMappingService.handleMapRequest(mapRequest);
128
129         Mockito.verify(tlsMapRequestMock).set(null);
130         Mockito.verify(tlsMapRequestMock).get();
131         Mockito.verifyNoMoreInteractions(tlsMapRequestMock);
132         Mockito.verify(mapResolverMock).handleMapRequest(mapRequest);
133         Mockito.verify(tlsMapReplyMock).set(Mockito.any(MapReply.class));
134         Mockito.verify(tlsMapReplyMock).get();
135
136         assertEquals(result, mapReply);
137     }
138
139     /**
140      * Tests {@link LispMappingService#handleMapRequest} method request from non-proxy xTR.
141      */
142     @Test
143     public void handleMapRequestTest_NonProxy() {
144         final MapRequest mapRequest = Mockito.mock(MapRequest.class);
145         final Pair<MapRequest, TransportAddress> pair = getDefaultMapRequestPair();
146         final SendMapRequestInputBuilder smrib = new SendMapRequestInputBuilder()
147                 .setMapRequest(pair.getLeft())
148                 .setTransportAddress(pair.getRight());
149
150         Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
151         Mockito.when(tlsMapRequestMock.get()).thenReturn(pair);
152
153         assertNull(lispMappingService.handleMapRequest(mapRequest));
154         Mockito.verify(odlLispSbService).sendMapRequest(smrib.build());
155     }
156
157     /**
158      * Tests {@link LispMappingService#handleMapRegister} method.
159      */
160     @Test
161     @SuppressWarnings("unchecked")
162     public void handleMapRegisterTest() {
163         final Pair<MapNotify, List<TransportAddress>> pairMock = Mockito.mock(Pair.class);
164
165         Mockito.when(mapRegisterMock.getMappingRecordItem())
166                 .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
167         Mockito.when(tlsMapNotifyMock.get()).thenReturn(pairMock);
168
169         lispMappingService.handleMapRegister(mapRegisterMock);
170         Mockito.verify(mapServerMock).handleMapRegister(mapRegisterMock);
171         Mockito.verify(tlsMapNotifyMock).set(Mockito.any(MutablePair.class));
172     }
173
174     /**
175      * Tests {@link LispMappingService#onAddMapping} method.
176      */
177     @Test
178     public void onAddMappingTest() {
179         final org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegister
180                 mapRegister = Mockito.mock(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105
181                 .mapregisternotification.MapRegister.class);
182         final AddMapping addMapping = Mockito.mock(AddMapping.class);
183
184         Mockito.when(addMapping.getMapRegister()).thenReturn(mapRegister);
185         Mockito.when(mapRegister.getMappingRecordItem())
186                 .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
187         Mockito.when(tlsMapNotifyMock.get()).thenReturn(getDefaultMapNotifyPair());
188
189         lispMappingService.onAddMapping(addMapping);
190         Mockito.verify(odlLispSbService, Mockito.times(2)).sendMapNotify(Mockito.argThat(new TransportAddressMatch()));
191     }
192
193     /**
194      * Tests {@link LispMappingService#onAddMapping} method with no TransportAddress.
195      */
196     @Test
197     public void onAddMappingTest_noTransportAddress() {
198         final org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapregisternotification.MapRegister
199                 mapRegister = Mockito.mock(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105
200                 .mapregisternotification.MapRegister.class);
201         final AddMapping addMapping = Mockito.mock(AddMapping.class);
202         final MapNotify mapNotify = new MapNotifyBuilder().setKeyId((short) 1).build();
203
204         Mockito.when(addMapping.getMapRegister()).thenReturn(mapRegister);
205         Mockito.when(mapRegister.getMappingRecordItem())
206                 .thenReturn(Lists.newArrayList(MAPPING_RECORD_ITEM_BUILDER.build()));
207         Mockito.when(tlsMapNotifyMock.get()).thenReturn(new MutablePair<>(mapNotify, null));
208         Mockito.when(addMapping.getTransportAddress()).thenReturn(TRANSPORT_ADDRESS_1);
209
210         // result
211         final SendMapNotifyInputBuilder smnib = new SendMapNotifyInputBuilder()
212                 .setMapNotify(new org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105
213                         .mapnotifymessage.MapNotifyBuilder().setKeyId((short) 1).build())
214                 .setTransportAddress(TRANSPORT_ADDRESS);
215
216         lispMappingService.onAddMapping(addMapping);
217         Mockito.verify(odlLispSbService).sendMapNotify(smnib.build());
218     }
219
220     /**
221      * Tests {@link LispMappingService#onRequestMapping} method.
222      */
223     @Test
224     public void onRequestMappingTest() {
225         final RequestMapping requestMapping = Mockito.mock(RequestMapping.class);
226         final org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequest
227                 mapRequest = Mockito.mock(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105
228                     .maprequestnotification.MapRequest.class);
229         final MapReply mapReply = new MapReplyBuilder().build();
230
231         Mockito.when(requestMapping.getMapRequest()).thenReturn(mapRequest);
232         Mockito.when(requestMapping.getTransportAddress()).thenReturn(TRANSPORT_ADDRESS_1);
233         Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
234         Mockito.when(tlsMapReplyMock.get()).thenReturn(mapReply);
235
236         // result
237         final SendMapReplyInputBuilder smrib = new SendMapReplyInputBuilder()
238                 .setMapReply(new MapReplyBuilder(mapReply).build())
239                 .setTransportAddress(TRANSPORT_ADDRESS_1);
240
241         lispMappingService.onRequestMapping(requestMapping);
242         Mockito.verify(odlLispSbService).sendMapReply(smrib.build());
243     }
244
245     /**
246      * Tests {@link LispMappingService#onRequestMapping} method with mapReply == null.
247      */
248     @Test
249     public void onRequestMappingTest_withNullMapReply() {
250         final RequestMapping requestMapping = Mockito.mock(RequestMapping.class);
251         final org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.maprequestnotification.MapRequest
252                 mapRequest = Mockito.mock(org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105
253                     .maprequestnotification.MapRequest.class);
254
255         Mockito.when(requestMapping.getMapRequest()).thenReturn(mapRequest);
256         Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
257         Mockito.when(tlsMapReplyMock.get()).thenReturn(null);
258
259         lispMappingService.onRequestMapping(requestMapping);
260         Mockito.verifyZeroInteractions(odlLispSbService);
261     }
262
263     /**
264      * Tests {@link LispMappingService#onMappingKeepAlive} method.
265      */
266     @Test
267     public void onMappingKeepAliveTest() {
268         final MappingKeepAlive mappingKeepAlive = Mockito.mock(MappingKeepAlive.class);
269         Mockito.when(mappingKeepAlive.getMapRegisterCacheMetadata()).thenReturn(getDefaultMapRegisterCacheMetadata());
270
271         lispMappingService.onMappingKeepAlive(mappingKeepAlive);
272         Mockito.verify(mappingService).updateMappingRegistration(MappingOrigin.Southbound, IPV4_EID_1, TIMESTAMP);
273         Mockito.verify(mappingService).updateMappingRegistration(MappingOrigin.Southbound, IPV4_EID_2, TIMESTAMP);
274     }
275
276     /**
277      * Tests {@link LispMappingService#handleSMR} method.
278      */
279     @Test
280     public void handleSmrTest() {
281         final MapRequest mapRequest = Mockito.mock(MapRequest.class);
282         final Rloc subscriber = LispAddressUtil.asIpv4Rloc(IPV4_STRING_1);
283
284         Mockito.when(mapRequest.getSourceEid()).thenReturn(new SourceEidBuilder().setEid(IPV4_SOURCE_EID).build());
285         Mockito.when(mapRequest.getEidItem()).thenReturn(Lists.newArrayList(EID_ITEM_BUILDER.build()));
286
287         // result
288         final SendMapRequestInputBuilder smrib = new SendMapRequestInputBuilder()
289                 .setMapRequest(new MapRequestBuilder(mapRequest).build())
290                 .setTransportAddress(TRANSPORT_ADDRESS);
291
292         lispMappingService.handleSMR(mapRequest, subscriber);
293         Mockito.verify(odlLispSbService).sendMapRequest(smrib.build());
294     }
295
296     /**
297      * Tests {@link LispMappingService#setShouldUseSmr} method.
298      */
299     @Test
300     public void setShouldUseSmrTest() {
301         final boolean value = true;
302
303         lispMappingService.setShouldUseSmr(value);
304         Mockito.verify(mapServerMock).setSubscriptionService(value);
305         Mockito.verify(mapResolverMock).setSubscriptionService(value);
306     }
307
308     /**
309      * Tests {@link LispMappingService#handleMapNotify} method.
310      */
311     @Test
312     @SuppressWarnings("unchecked")
313     public void handleMapNotifyTest() {
314         final MapNotify mapNotify = Mockito.mock(MapNotify.class);
315         final List<TransportAddress> list = Mockito.mock(ArrayList.class);
316
317         lispMappingService.handleMapNotify(mapNotify, list);
318         Mockito.verify(tlsMapNotifyMock).set(Mockito.any(MutablePair.class));
319     }
320
321     /**
322      * Tests {@link LispMappingService#handleNonProxyMapRequest} method.
323      */
324     @Test
325     @SuppressWarnings("unchecked")
326     public void handleNonProxyMapRequestTest() {
327         final MapRequest mapRequest = Mockito.mock(MapRequest.class);
328         final TransportAddress transportAddress = Mockito.mock(TransportAddress.class);
329
330         lispMappingService.handleNonProxyMapRequest(mapRequest, transportAddress);
331         Mockito.verify(tlsMapRequestMock).set(Mockito.any(MutablePair.class));
332     }
333
334     /**
335      * Tests {@link LispMappingService#handleMapReply} method.
336      */
337     @Test
338     public void handleMapReplyTest() {
339         final MapReply mapReply = Mockito.mock(MapReply.class);
340
341         lispMappingService.handleMapReply(mapReply);
342         Mockito.verify(tlsMapReplyMock).set(Mockito.any(MapReply.class));
343     }
344
345     /**
346      * Tests {@link LispMappingService#close} method.
347      */
348     @Test
349     public void closeTest() throws Exception {
350         lispMappingService.close();
351
352         assertNull(getField("mapResolver"));
353         assertNull(getField("mapServer"));
354     }
355
356     /**
357      * Tests {@link LispMappingService} other setter and getter methods.
358      */
359     @Test
360     public void otherTest() throws Exception {
361         assertEquals(notificationService, lispMappingService.getNotificationService());
362         assertEquals(true, lispMappingService.shouldUseSmr());
363
364         lispMappingService.setShouldAuthenticate(true);
365         Mockito.verify(mapResolverMock).setShouldAuthenticate(true);
366
367         lispMappingService.onGotMapReply(Mockito.mock(GotMapReply.class));
368         lispMappingService.onGotMapNotify(Mockito.mock(GotMapNotify.class));
369         lispMappingService.onXtrRequestMapping(Mockito.mock(XtrRequestMapping.class));
370         lispMappingService.onXtrReplyMapping(Mockito.mock(XtrReplyMapping.class));
371     }
372
373     @SuppressWarnings("unchecked")
374     private <T> T getField(String fieldName) throws NoSuchFieldException, IllegalAccessException {
375         final Field field = LispMappingService.class.getDeclaredField(fieldName);
376         field.setAccessible(true);
377
378         return (T) field.get(lispMappingService);
379     }
380
381     private static Pair<MapNotify, List<TransportAddress>> getDefaultMapNotifyPair() {
382         final MapNotify mapNotify = new MapNotifyBuilder().setKeyId((short) 1).build();
383         return new MutablePair<>(mapNotify, Lists.newArrayList(TRANSPORT_ADDRESS_1, TRANSPORT_ADDRESS_2));
384     }
385
386     private static Pair<MapRequest, TransportAddress> getDefaultMapRequestPair() {
387         final MapRequestBuilder mapRequestBuilder = new MapRequestBuilder()
388                 .setEidItem(Lists.newArrayList(EID_ITEM_BUILDER.build()));
389
390         return new ImmutablePair<>(mapRequestBuilder.build(), TRANSPORT_ADDRESS_1);
391     }
392
393     private static MapRegisterCacheMetadata getDefaultMapRegisterCacheMetadata() {
394         final EidLispAddress eidLispAddress_1 = new EidLispAddressBuilder()
395                 .setEidLispAddressId("id-1")
396                 .setEid(IPV4_EID_1).build();
397         final EidLispAddress eidLispAddress_2 = new EidLispAddressBuilder()
398                 .setEidLispAddressId("id-2")
399                 .setEid(IPV4_EID_2).build();
400
401         return new MapRegisterCacheMetadataBuilder()
402                 .setEidLispAddress(Lists.newArrayList(eidLispAddress_1, eidLispAddress_2))
403                 .setTimestamp(TIMESTAMP).build();
404     }
405
406     class TransportAddressMatch extends ArgumentMatcher<SendMapNotifyInput> {
407         public boolean matches(Object sendMapNotify) {
408             final SendMapNotifyInput sendMapNotifyInput = (SendMapNotifyInput) sendMapNotify;
409             final TransportAddress notifyTransportAddress = sendMapNotifyInput.getTransportAddress();
410             return TRANSPORT_ADDRESS_1.equals(notifyTransportAddress)
411                     || TRANSPORT_ADDRESS_2.equals(notifyTransportAddress);
412         }
413     }
414 }