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