2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.lispflowmapping.mapcache;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
13 import com.google.common.collect.Lists;
15 import java.util.Date;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.junit.runner.RunWith;
21 import org.mockito.Mockito;
22 import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
23 import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
24 import org.opendaylight.lispflowmapping.interfaces.dao.SubKeys;
25 import org.opendaylight.lispflowmapping.lisp.util.LispAddressUtil;
26 import org.opendaylight.lispflowmapping.lisp.util.MaskUtil;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.lisp.address.types.rev151105.InstanceIdType;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.IpAddressBinary;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.inet.binary.types.rev160303.Ipv4AddressBinary;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.XtrId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.eid.container.Eid;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container
34 .MappingRecordBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.mappingservice.rev150906.mapping.authkey.container
38 .MappingAuthkeyBuilder;
39 import org.powermock.api.mockito.PowerMockito;
40 import org.powermock.core.classloader.annotations.PrepareForTest;
41 import org.powermock.modules.junit4.PowerMockRunner;
43 @RunWith(PowerMockRunner.class)
44 @PrepareForTest(MappingMergeUtil.class)
45 public class SimpleMapCacheTest {
47 private static ILispDAO tableMock;
48 private static ILispDAO xtrIdDaoMock;
49 private static MappingRecord mappingRecordMock;
50 private static ILispDAO daoMock;
51 private static SimpleMapCache simpleMapCache;
53 private static final String IPV4_STRING_1 = "1.2.3.0";
54 private static final String IPV4_STRING_DST = "192.168.0.1";
55 private static final String IPV4_PREFIX_STRING = "/24";
56 private static final short MASK = 24;
57 private static final long VNI_0 = 0L;
58 private static final long VNI_100 = 100L;
59 private static final byte[] IPV4_RLOC_BINARY = new byte[] {0, 1, 4, 0};
60 private static final byte[] XTR_ID = new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
62 private static final Eid EID_IPV4_PREFIX_1_VNI = LispAddressUtil
63 .asIpv4PrefixEid(IPV4_STRING_1 + IPV4_PREFIX_STRING, new InstanceIdType(VNI_100));
64 private static final Eid EID_IPV4_PREFIX_2 = LispAddressUtil
65 .asIpv4PrefixEid(IPV4_STRING_1 + IPV4_PREFIX_STRING);
66 private static final Eid EID_IPV4_PREFIX_DST = LispAddressUtil
67 .asIpv4PrefixEid(IPV4_STRING_DST + IPV4_PREFIX_STRING);
68 private static final Eid EID_IPV4 = LispAddressUtil.asIpv4Eid(IPV4_STRING_1);
69 private static final Eid NORMALIZED_EID_1 = MaskUtil.normalize(EID_IPV4_PREFIX_1_VNI);
70 private static final Eid NORMALIZED_EID_2 = MaskUtil.normalize(EID_IPV4_PREFIX_2);
71 private static final Eid NORMALIZED_EID_IPV4 = MaskUtil.normalize(EID_IPV4);
72 private static final Eid NORMALIZED_EID_IPV4_PREFIX_DST = MaskUtil.normalize(EID_IPV4_PREFIX_DST, (short) 24);
74 private static final IpAddressBinary IP_ADDRESS = new IpAddressBinary(new Ipv4AddressBinary(IPV4_RLOC_BINARY));
75 // TODO Get from configuration when ready
76 private static final long REGISTRATION_VALIDITY = 200000L;
77 private static final MappingAuthkey MAPPING_AUTHKEY = new MappingAuthkeyBuilder()
79 .setKeyType(1).build();
80 private static final Date EXPIRED_DATE = new Date(System.currentTimeMillis() - (REGISTRATION_VALIDITY + 1L));
84 daoMock = Mockito.mock(ILispDAO.class, "dao");
85 tableMock = Mockito.mock(ILispDAO.class);
86 xtrIdDaoMock = Mockito.mock(ILispDAO.class);
87 mappingRecordMock = Mockito.mock(MappingRecord.class);
88 simpleMapCache = new SimpleMapCache(daoMock);
92 * Tests {@link SimpleMapCache#getMapping} method with dstEid == null.
95 public void getMappingTest_withNullDstEid() {
96 assertNull(simpleMapCache.getMapping(null, null, XTR_ID));
100 * Tests {@link SimpleMapCache#getMapping} method with VNI_100 table == null.
103 public void getMappingTest_withNullVniTable() {
104 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(null);
105 assertNull(simpleMapCache.getMapping(null, EID_IPV4_PREFIX_1_VNI, XTR_ID));
109 * Tests {@link SimpleMapCache#removeMapping} method with overwrite false.
112 public void removeMappingTest_withOverwriteFalse() {
113 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
114 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_IPV4, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
116 simpleMapCache.removeMapping(EID_IPV4, false);
117 Mockito.verify(tableMock).removeSpecific(NORMALIZED_EID_IPV4, SubKeys.RECORD);
118 Mockito.verify(xtrIdDaoMock).removeSpecific(NORMALIZED_EID_IPV4, SubKeys.RECORD);
122 * Tests {@link SimpleMapCache#removeMapping} method with overwrite true.
125 public void removeMappingTest_withOverwriteTrue() {
126 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
128 simpleMapCache.removeMapping(EID_IPV4, true);
129 Mockito.verify(tableMock).removeSpecific(MaskUtil.normalize(EID_IPV4), SubKeys.RECORD);
130 Mockito.verifyNoMoreInteractions(tableMock);
134 * Tests {@link SimpleMapCache#removeMapping} method with null VNI_100 table.
137 public void removeMappingTest_withNullVniTable() {
138 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
140 simpleMapCache.removeMapping(EID_IPV4, true);
141 Mockito.verifyNoMoreInteractions(tableMock);
145 * Tests {@link SimpleMapCache#addAuthenticationKey} method.
148 public void addAuthenticationKeyTest() {
149 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
151 simpleMapCache.addAuthenticationKey(EID_IPV4, MAPPING_AUTHKEY);
152 Mockito.verify(tableMock)
153 .put(MaskUtil.normalize(EID_IPV4), new MappingEntry<>(SubKeys.AUTH_KEY, MAPPING_AUTHKEY));
157 * Tests {@link SimpleMapCache#getAuthenticationKey} method with maskable address.
160 public void getAuthenticationKeyTest_withMaskableAddress() {
161 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
162 Mockito.when(tableMock.getSpecific(MaskUtil.normalize(EID_IPV4_PREFIX_1_VNI, MASK), SubKeys.AUTH_KEY))
163 .thenReturn(MAPPING_AUTHKEY);
165 assertEquals(MAPPING_AUTHKEY, simpleMapCache.getAuthenticationKey(EID_IPV4_PREFIX_1_VNI));
169 * Tests {@link SimpleMapCache#getAuthenticationKey} method with non maskable address.
172 public void addAuthenticationKeyTest_withNonMaskableAddress() {
173 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
174 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_IPV4, SubKeys.AUTH_KEY)).thenReturn(MAPPING_AUTHKEY);
176 assertEquals(MAPPING_AUTHKEY, simpleMapCache.getAuthenticationKey(EID_IPV4));
177 Mockito.verify(tableMock).getSpecific(NORMALIZED_EID_IPV4, SubKeys.AUTH_KEY);
181 * Tests {@link SimpleMapCache#getAuthenticationKey} method with no MappingAuthkey.
184 public void addAuthenticationKeyTest_withNoMappingAuthkey() {
185 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
186 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_IPV4, SubKeys.AUTH_KEY)).thenReturn(null);
188 assertNull(simpleMapCache.getAuthenticationKey(EID_IPV4));
192 * Tests {@link SimpleMapCache#getAuthenticationKey} method with no VNI_100 table.
195 public void addAuthenticationKeyTest_withNullVniTable() {
196 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
198 assertNull(simpleMapCache.getAuthenticationKey(EID_IPV4));
202 * Tests {@link SimpleMapCache#removeAuthenticationKey} method.
205 public void removeAuthenticationKeyTest() {
206 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
208 simpleMapCache.removeAuthenticationKey(EID_IPV4);
209 Mockito.verify(tableMock).removeSpecific(NORMALIZED_EID_IPV4, SubKeys.AUTH_KEY);
213 * Tests {@link SimpleMapCache#removeAuthenticationKey} method with no VNI_100 table.
216 public void removeAuthenticationKeyTest_withNoVniTable() {
217 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
219 simpleMapCache.removeAuthenticationKey(EID_IPV4);
220 Mockito.verify(tableMock, Mockito.never()).removeSpecific(Mockito.any(Eid.class), Mockito.anyString());
224 * Tests {@link SimpleMapCache#getDaoEntryBest} method with maskable address.
227 @SuppressWarnings("unchecked")
228 public void getDaoEntryBestTest_withMaskableAddress() {
229 final Eid normalizedKey = MaskUtil.normalize(EID_IPV4_PREFIX_1_VNI, MASK);
230 final Map<String, Object> entryMock = Mockito.mock(Map.class);
231 final ILispDAO xtrIdRecordsMock = Mockito.mock(ILispDAO.class);
233 Mockito.when(daoMock.get(normalizedKey)).thenReturn(entryMock);
234 Mockito.when(entryMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdRecordsMock);
235 Mockito.when(xtrIdRecordsMock.getSpecific(EID_IPV4_PREFIX_1_VNI, SubKeys.XTRID_RECORDS))
236 .thenReturn(xtrIdDaoMock);
237 simpleMapCache.getAllXtrIdMappings(EID_IPV4_PREFIX_1_VNI);
239 Mockito.verify(daoMock).get(Mockito.any(Eid.class));
243 * Tests {@link SimpleMapCache#getDaoEntryBest} method with non maskable address.
246 @SuppressWarnings("unchecked")
247 public void getDaoEntryBestTest_withNonMaskableAddress() {
248 final Map<String, Object> entryMock = Mockito.mock(Map.class);
249 final ILispDAO xtrIdRecordsMock = Mockito.mock(ILispDAO.class);
251 Mockito.when(daoMock.get(NORMALIZED_EID_IPV4)).thenReturn(entryMock);
252 Mockito.when(entryMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdRecordsMock);
253 Mockito.when(xtrIdRecordsMock.getSpecific(EID_IPV4, SubKeys.XTRID_RECORDS))
254 .thenReturn(xtrIdDaoMock);
255 simpleMapCache.getAllXtrIdMappings(EID_IPV4);
257 Mockito.verify(daoMock).get(Mockito.any(Eid.class));
261 * Tests {@link SimpleMapCache#getDaoEntryBest} method with null daoEntry.
264 public void getDaoEntryBestTest_withNullEntry() {
265 Mockito.when(daoMock.get(Mockito.any(Eid.class))).thenReturn(null);
267 assertNull(simpleMapCache.getAllXtrIdMappings(EID_IPV4_PREFIX_1_VNI));
268 Mockito.verify(daoMock, Mockito.times(24)).get(Mockito.any(Eid.class));
272 * Tests {@link SimpleMapCache#getMappingLpmEid} method.
275 @SuppressWarnings("unchecked")
276 public void getMappingLpmEidTest() throws Exception {
277 final Map<String, Object> mapMock = Mockito.mock(Map.class);
278 final ILispDAO xtrIdRecordsMock = Mockito.mock(ILispDAO.class);
279 final MappingRecord expiredMappingRecord = getDefaultMappingRecordBuilder().setTimestamp(1L).build(); // expired
280 final MappingRecord mappingRecord = getDefaultMappingRecordBuilder().build(); // not expired
282 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
283 Mockito.when(tableMock.get(NORMALIZED_EID_IPV4_PREFIX_DST)).thenReturn(mapMock);
284 Mockito.when(mapMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdRecordsMock);
285 Mockito.when(xtrIdRecordsMock.getSpecific(EID_IPV4_PREFIX_DST, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
286 Mockito.when(xtrIdDaoMock.getSpecific(XTR_ID, SubKeys.RECORD))
287 .thenReturn(expiredMappingRecord) // first invocation
288 .thenReturn(mappingRecord); // second invocation
290 // with expired mapping record
291 assertNull(simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
292 Mockito.verify(xtrIdDaoMock, Mockito.atMost(1)).removeSpecific(XTR_ID, SubKeys.RECORD);
294 // with non-expired mapping record
295 assertEquals(mappingRecord, simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
299 * Tests {@link SimpleMapCache#getMappingLpmEid} method with null XtrId.
302 @SuppressWarnings("unchecked")
303 public void getMappingLpmEidTest_withNullXtrId() throws Exception {
304 final Map<String, Object> mapMock = Mockito.mock(Map.class);
305 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
306 Mockito.when(tableMock.get(MaskUtil.normalize(EID_IPV4_PREFIX_DST, (short) 24))).thenReturn(mapMock);
307 Mockito.when(mapMock.get(SubKeys.REGDATE)).thenReturn(EXPIRED_DATE);
309 simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, null);
310 Mockito.verify(tableMock).removeSpecific(NORMALIZED_EID_IPV4_PREFIX_DST, SubKeys.REGDATE);
311 Mockito.verify(tableMock).removeSpecific(NORMALIZED_EID_IPV4_PREFIX_DST, SubKeys.RECORD);
312 Mockito.verify(mapMock).get(SubKeys.RECORD);
317 * Tests {@link SimpleMapCache#getDaoPairEntryBest} method with maskable eid.
320 @SuppressWarnings("unchecked")
321 public void getDaoPairEntryBestTest_withMaskableEid() {
322 final Eid ipv4PrefixEid = LispAddressUtil.asIpv4PrefixEid("192.168.0.225" + "/32");
323 final Eid normalizedKey = MaskUtil.normalize(EID_IPV4_PREFIX_DST, MASK);
324 final Map<String, Object> entryMock = Mockito.mock(Map.class);
326 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
327 Mockito.when(tableMock.get(Mockito.any(Eid.class))).thenReturn(null);
328 Mockito.when(tableMock.get(normalizedKey)).thenReturn(entryMock);
329 Mockito.when(entryMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
331 simpleMapCache.getMapping(null, ipv4PrefixEid, XTR_ID);
332 Mockito.verify(entryMock).get(SubKeys.XTRID_RECORDS);
336 * Tests {@link SimpleMapCache#getDaoPairEntryBest} method with maskable eid and entry not found.
339 public void getDaoPairEntryBestTest_withMaskableEid_noEntry() {
340 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
341 Mockito.when(tableMock.get(Mockito.any(Eid.class))).thenReturn(null);
343 assertNull(simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
347 * Tests {@link SimpleMapCache#getDaoPairEntryBest} method with non-maskable eid.
350 @SuppressWarnings("unchecked")
351 public void getDaoPairEntryBestTest_withNonMaskableEid() {
352 final Map<String, Object> entryMock = Mockito.mock(Map.class);
353 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
354 Mockito.when(tableMock.get(NORMALIZED_EID_IPV4)).thenReturn(entryMock);
355 Mockito.when(entryMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
357 simpleMapCache.getMapping(null, EID_IPV4, XTR_ID);
358 Mockito.verify(entryMock).get(SubKeys.XTRID_RECORDS);
362 * Tests {@link SimpleMapCache#getDaoPairEntryBest} method with non-maskable eid and entry not found.
365 public void getDaoPairEntryBestTest_withNonMaskableEid_noEntry() {
366 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
367 Mockito.when(tableMock.get(NORMALIZED_EID_IPV4)).thenReturn(null);
369 assertNull(simpleMapCache.getMapping(null, EID_IPV4, XTR_ID));
373 * Tests {@link SimpleMapCache#getMapping} method with Eid VNI_100 == null.
376 public void getVniTableTest_withVniNull() {
377 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
379 simpleMapCache.getMapping(null, EID_IPV4_PREFIX_2, XTR_ID);
380 Mockito.verify(daoMock).getSpecific(VNI_0, SubKeys.VNI);
384 * Tests {@link SimpleMapCache#getVniTable} method with Eid VNI_100 == 100L.
387 public void getVniTableTest_withVniNotNull() {
388 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(null);
390 simpleMapCache.getMapping(null, EID_IPV4_PREFIX_1_VNI, XTR_ID);
391 Mockito.verify(daoMock).getSpecific(VNI_100, SubKeys.VNI);
395 * Tests {@link SimpleMapCache#updateMappingRegistration} method.
398 @SuppressWarnings("unchecked")
399 public void updateMappingRegistrationTest() {
400 final Map<String, Object> entryMock = Mockito.mock(Map.class);
401 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
402 Mockito.when(tableMock.get(NORMALIZED_EID_IPV4)).thenReturn(entryMock);
404 simpleMapCache.updateMappingRegistration(EID_IPV4, null);
405 Mockito.verify(entryMock).put(Mockito.eq(SubKeys.REGDATE), Mockito.any(Date.class));
409 * Tests {@link SimpleMapCache#updateMappingRegistration} method with no VNI_100 table.
412 public void updateMappingRegistrationTest_withNullVniTable() {
413 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
415 simpleMapCache.updateMappingRegistration(EID_IPV4, null);
416 Mockito.verifyZeroInteractions(tableMock);
420 * Tests {@link SimpleMapCache#addData} method.
423 public void addDataTest() {
424 final Object dummyData = "dummy-data";
425 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
427 simpleMapCache.addData(EID_IPV4, SubKeys.RECORD, dummyData);
428 Mockito.verify(tableMock).put(NORMALIZED_EID_IPV4, new MappingEntry<>(SubKeys.RECORD, dummyData));
432 * Tests {@link SimpleMapCache#getData} method.
435 public void getDataTest() {
436 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
438 simpleMapCache.getData(EID_IPV4, SubKeys.RECORD);
439 Mockito.verify(tableMock).getSpecific(NORMALIZED_EID_IPV4, SubKeys.RECORD);
443 * Tests {@link SimpleMapCache#getData} method with no VNI_100 table.
446 public void getDataTest_withNullVniTable() {
447 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
449 simpleMapCache.getData(EID_IPV4, SubKeys.RECORD);
450 Mockito.verifyNoMoreInteractions(tableMock);
454 * Tests {@link SimpleMapCache#removeData} method.
457 public void removeDataTest() {
458 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
460 simpleMapCache.removeData(EID_IPV4, SubKeys.RECORD);
461 Mockito.verify(tableMock).removeSpecific(NORMALIZED_EID_IPV4, SubKeys.RECORD);
465 * Tests {@link SimpleMapCache#removeData} method with no VNI_100 table.
468 public void removeDataTest_withNullTable() {
469 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
471 simpleMapCache.removeData(EID_IPV4, SubKeys.RECORD);
472 Mockito.verifyNoMoreInteractions(tableMock);
476 * Tests {@link SimpleMapCache#addMapping} method with mapping merge allowed.
479 @SuppressWarnings("unchecked")
480 public void addMappingTest_mappingMergeTrue() throws Exception {
481 Mockito.when(mappingRecordMock.getTimestamp()).thenReturn(System.currentTimeMillis());
482 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
483 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
484 Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
486 PowerMockito.mockStatic(MappingMergeUtil.class);
487 PowerMockito.when(MappingMergeUtil.mergeXtrIdMappings(Mockito.anyList(), Mockito.anyList(), Mockito.anySet()))
488 .thenReturn(getDefaultMappingRecordBuilder().build());
490 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, true);
491 Mockito.verify(xtrIdDaoMock).put(new XtrId(XTR_ID), new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
492 Mockito.verify(tableMock)
493 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.REGDATE, new Date(Long.MAX_VALUE)));
494 Mockito.verify(tableMock)
495 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.RECORD, getDefaultMappingRecordBuilder().build()));
499 * Tests {@link SimpleMapCache#addMapping} method with mapping merge false.
502 public void addMappingTest_mappingMergeFalse() throws Exception {
503 Mockito.when(mappingRecordMock.getTimestamp()).thenReturn(Long.MAX_VALUE);
504 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
505 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
506 Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
508 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, false);
509 Mockito.verify(xtrIdDaoMock).put(new XtrId(XTR_ID), new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
511 Mockito.verify(tableMock)
512 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.REGDATE, new Date(Long.MAX_VALUE)));
513 Mockito.verify(tableMock)
514 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
518 * Tests {@link SimpleMapCache#addMapping} method where no interaction is expected with the dao.
521 public void addMappingTest_noDaoInteraction() throws Exception {
522 Mockito.when(mappingRecordMock.getXtrId()).thenReturn(null);
523 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, null, true, true);
524 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, new Object(), true, true);
525 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, true);
527 Mockito.verifyZeroInteractions(daoMock);
531 * Tests {@link SimpleMapCache#getOrInstantiateVniTable} method with vni == null.
534 public void getOrInstantiateVniTableTest_withNullVni() throws Exception {
535 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
536 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_2, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
538 simpleMapCache.addMapping(EID_IPV4_PREFIX_2, mappingRecordMock, false, false); // Eid VNI_100 == null
539 Mockito.verify(daoMock).getSpecific(VNI_0, SubKeys.VNI);
540 Mockito.verify(daoMock, Mockito.never()).putNestedTable(VNI_0, SubKeys.VNI);
544 * Tests {@link SimpleMapCache#getOrInstantiateVniTable} method with vni == null, table == null.
547 public void getOrInstantiateVniTableTest_withNullVniAndTable() throws Exception {
548 Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(null);
549 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_2, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
550 Mockito.when(daoMock.putNestedTable(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
552 simpleMapCache.addMapping(EID_IPV4_PREFIX_2, mappingRecordMock, true, false); // Eid VNI_100 == null
553 Mockito.verify(daoMock).putNestedTable(VNI_0, SubKeys.VNI);
557 * Tests {@link SimpleMapCache#getOrInstantiateVniTable} method with vni == 100L, table == null.
560 public void getOrInstantiateVniTableTest_withNullTable() throws Exception {
561 Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(null);
562 Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
563 Mockito.when(daoMock.putNestedTable(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
565 simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, false); // Eid VNI_100 == null
566 Mockito.verify(daoMock).putNestedTable(VNI_100, SubKeys.VNI);
569 private static MappingRecordBuilder getDefaultMappingRecordBuilder() {
570 return new MappingRecordBuilder()
572 .setLocatorRecord(Lists.newArrayList())
573 .setTimestamp(Long.MAX_VALUE)
575 .setAction(MappingRecord.Action.NativelyForward)
576 .setSourceRloc(IP_ADDRESS);