Bug 6362: Don't save timestamp to MappingRecords 73/43473/9
authorLorand Jakab <lojakab@cisco.com>
Fri, 5 Aug 2016 22:34:59 +0000 (17:34 -0500)
committerLori Jakab <lorand.jakab@gmail.com>
Mon, 22 Aug 2016 14:43:40 +0000 (14:43 +0000)
Change-Id: I9906e2310108b81b584e7fad39a310b8d79a4b3b
Co-authored-by: Miroslav Toth <mirtoth@cisco.com>
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
Signed-off-by: Miroslav Toth <mirtoth@cisco.com>
mappingservice/api/src/main/java/org/opendaylight/lispflowmapping/interfaces/dao/SubKeys.java
mappingservice/lisp-proto/src/main/java/org/opendaylight/lispflowmapping/lisp/serializer/MappingRecordSerializer.java
mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/ExtendedMappingRecord.java [new file with mode: 0644]
mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/MappingMergeUtil.java
mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/SimpleMapCache.java
mappingservice/mapcache/src/test/java/org/opendaylight/lispflowmapping/mapcache/MappingMergeUtilTest.java
mappingservice/mapcache/src/test/java/org/opendaylight/lispflowmapping/mapcache/SimpleMapCacheTest.java

index d91bc579d97a610f6d483c5b6f1fb88088bcd2bc..87a9623b8b16246f0d5bf6700ba54e0d1dad1b30 100644 (file)
@@ -18,6 +18,7 @@ package org.opendaylight.lispflowmapping.interfaces.dao;
 public interface SubKeys {
     String AUTH_KEY = "password";
     String RECORD = "address";
+    String EXT_RECORD = "ext_address";
     String XTRID_RECORDS = "xtrid";
     String SUBSCRIBERS = "subscribers";
     String SRC_RLOCS = "src_rlocs";
index 7d9c6a29ecb9b6b52d1e5b738988232f925a1042..84b2b887832e852039931273f074eba35f7913cc 100644 (file)
@@ -60,8 +60,6 @@ public final class MappingRecordSerializer {
             builder.getLocatorRecord().add(LocatorRecordSerializer.getInstance().deserialize(buffer));
         }
 
-        builder.setTimestamp(System.currentTimeMillis());
-
         return builder;
     }
 
diff --git a/mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/ExtendedMappingRecord.java b/mappingservice/mapcache/src/main/java/org/opendaylight/lispflowmapping/mapcache/ExtendedMappingRecord.java
new file mode 100644 (file)
index 0000000..6c520d0
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016 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,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.lispflowmapping.mapcache;
+
+import java.util.Date;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.lisp.proto.rev151105.mapping.record.container.MappingRecord;
+
+/**
+ * Wrapper class for MappingRecord with timestamp added.
+ *
+ * @author Lorand Jakab
+ *
+ */
+public class ExtendedMappingRecord {
+    private MappingRecord record;
+    private Date timestamp;
+
+    public ExtendedMappingRecord(MappingRecord record, Date timestamp) {
+        setRecord(record);
+        setTimestamp(timestamp);
+    }
+
+    public ExtendedMappingRecord(MappingRecord record) {
+        this(record, null);
+    }
+
+    public MappingRecord getRecord() {
+        return record;
+    }
+
+    public void setRecord(MappingRecord record) {
+        this.record = record;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+}
index f3cdeba0029c3a0ddd865e69654b5189d02b2efa..0516da50d522f0be5afcf55b706ca6d8e2624492 100644 (file)
@@ -152,28 +152,29 @@ public final class MappingMergeUtil {
         return mrb.build();
     }
 
-    public static MappingRecord mergeXtrIdMappings(List<Object> records, List<XtrId> expiredMappings,
+    public static ExtendedMappingRecord mergeXtrIdMappings(List<Object> extendedRecords, List<XtrId> expiredMappings,
             Set<IpAddressBinary> sourceRlocs) {
         MappingRecordBuilder mrb = null;
         XtrId xtrId = null;
         Long timestamp = Long.MAX_VALUE;
 
-        for (int i = 0; i < records.size(); i++) {
-            MappingRecord record = (MappingRecord) records.get(i);
+        for (int i = 0; i < extendedRecords.size(); i++) {
+            ExtendedMappingRecord extendedRecord = (ExtendedMappingRecord) extendedRecords.get(i);
+            MappingRecord record = extendedRecord.getRecord();
 
             // Skip expired mappings and add them to a list to be returned to the caller
-            if (timestampIsExpired(record.getTimestamp())) {
+            if (timestampIsExpired(extendedRecord.getTimestamp())) {
                 expiredMappings.add(record.getXtrId());
                 continue;
             }
 
             if (mrb == null) {
-                mrb = new MappingRecordBuilder((MappingRecord) records.get(i));
+                mrb = new MappingRecordBuilder(record);
             }
 
             // Save the oldest valid timestamp
-            if (record.getTimestamp() < timestamp) {
-                timestamp = record.getTimestamp();
+            if (extendedRecord.getTimestamp().getTime() < timestamp) {
+                timestamp = extendedRecord.getTimestamp().getTime();
                 xtrId = record.getXtrId();
             }
 
@@ -190,12 +191,11 @@ public final class MappingMergeUtil {
             return null;
         }
         mrb.setXtrId(xtrId);
-        mrb.setTimestamp(timestamp);
 
-        return mrb.build();
+        return new ExtendedMappingRecord(mrb.build(), new Date(timestamp));
     }
 
-    public static boolean mappingIsExpired(MappingRecord mapping) {
+    public static boolean mappingIsExpired(ExtendedMappingRecord mapping) {
         Preconditions.checkNotNull(mapping, "mapping should not be null!");
         if (mapping.getTimestamp() != null) {
             return timestampIsExpired(mapping.getTimestamp());
index 9df287388799f1daeafb16024766feabe459ac64..dd77cbebdbf345e656960b93b252669e002c2226 100644 (file)
@@ -84,7 +84,7 @@ public class SimpleMapCache implements IMapCache {
 
     private void removeExpiredXtrIdTableEntries(ILispDAO xtrIdDao, List<XtrId> expiredMappings) {
         for (XtrId xtrId : expiredMappings) {
-            xtrIdDao.removeSpecific(xtrId, SubKeys.RECORD);
+            xtrIdDao.removeSpecific(xtrId, SubKeys.EXT_RECORD);
         }
     }
 
@@ -105,28 +105,29 @@ public class SimpleMapCache implements IMapCache {
             return;
         }
 
-        Date regdate = new Date(record.getTimestamp());     // The serializer always sets it
+        Date regdate = new Date(System.currentTimeMillis());
         Eid eid = MaskUtil.normalize(key);
         ILispDAO table = getOrInstantiateVniTable(key);
 
         ILispDAO xtrIdDao = null;
         if (!shouldOverwrite && record.getXtrId() != null) {
             xtrIdDao = getOrInstantiateXtrIdTable(eid, table);
-            xtrIdDao.put(record.getXtrId(), new MappingEntry<>(SubKeys.RECORD, value));
+            xtrIdDao.put(record.getXtrId(), new MappingEntry<>(SubKeys.EXT_RECORD,
+                    new ExtendedMappingRecord(record, regdate)));
         }
 
         if (shouldMerge) {
             List<XtrId> expiredMappings = new ArrayList<>();
             Set<IpAddressBinary> sourceRlocs = new HashSet<>();
-            MappingRecord mergedEntry = MappingMergeUtil.mergeXtrIdMappings(getXtrIdMappingList(xtrIdDao),
+            ExtendedMappingRecord mergedEntry = MappingMergeUtil.mergeXtrIdMappings(getXtrIdMappingList(xtrIdDao),
                     expiredMappings, sourceRlocs);
             removeExpiredXtrIdTableEntries(xtrIdDao, expiredMappings);
             if (mergedEntry == null) {
                 return;
             }
-            regdate = new Date(mergedEntry.getTimestamp());
+            regdate = mergedEntry.getTimestamp();
             table.put(eid, new MappingEntry<>(SubKeys.REGDATE, regdate));
-            table.put(eid, new MappingEntry<>(SubKeys.RECORD, mergedEntry));
+            table.put(eid, new MappingEntry<>(SubKeys.RECORD, mergedEntry.getRecord()));
             table.put(eid, new MappingEntry<>(SubKeys.SRC_RLOCS, sourceRlocs));
         } else {
             table.put(eid, new MappingEntry<>(SubKeys.REGDATE, regdate));
@@ -140,7 +141,7 @@ public class SimpleMapCache implements IMapCache {
             final List<Object> records = new ArrayList<>();
             dao.getAll(new IRowVisitor() {
                 public void visitRow(Object keyId, String valueKey, Object value) {
-                    if (valueKey.equals(SubKeys.RECORD)) {
+                    if (valueKey.equals(SubKeys.EXT_RECORD)) {
                         records.add(value);
                     }
                 }
@@ -158,13 +159,14 @@ public class SimpleMapCache implements IMapCache {
             if (xtrId != null) {
                 ILispDAO xtrIdTable = getXtrIdTable(eid, (ILispDAO) daoEntry.getValue().get(SubKeys.XTRID_RECORDS));
                 if (xtrIdTable != null) {
-                    MappingRecord xtrIdRecord = (MappingRecord) xtrIdTable.getSpecific(xtrId, SubKeys.RECORD);
+                    ExtendedMappingRecord xtrIdRecord = (ExtendedMappingRecord) xtrIdTable.getSpecific(xtrId,
+                            SubKeys.EXT_RECORD);
                     if (xtrIdRecord.getTimestamp() != null
                             && MappingMergeUtil.timestampIsExpired(xtrIdRecord.getTimestamp())) {
-                        xtrIdTable.removeSpecific(xtrId, SubKeys.RECORD);
+                        xtrIdTable.removeSpecific(xtrId, SubKeys.EXT_RECORD);
                         return null;
                     } else {
-                        return xtrIdRecord;
+                        return xtrIdRecord.getRecord();
                     }
                 } else {
                     return null;
@@ -333,6 +335,16 @@ public class SimpleMapCache implements IMapCache {
         if (daoEntry != null) {
             daoEntry.put(SubKeys.REGDATE, new Date(timestamp));
         }
+
+        XtrId xtrId = ((MappingRecord) daoEntry.get(SubKeys.RECORD)).getXtrId();
+        if (xtrId != null) {
+            ILispDAO xtrIdTable = getXtrIdTable(eid, (ILispDAO) daoEntry.get(SubKeys.XTRID_RECORDS));
+            ExtendedMappingRecord extRecord = (ExtendedMappingRecord) xtrIdTable.getSpecific(xtrId,
+                    SubKeys.EXT_RECORD);
+            if (extRecord != null) {
+                extRecord.setTimestamp(new Date(timestamp));
+            }
+        }
     }
 
     @Override
index 5106c15f541d02b961bbafb58765f6a0b56eaf06..463f756065ae149ac150790a7c20980ad9b7b65b 100644 (file)
@@ -406,15 +406,16 @@ public class MappingMergeUtilTest {
      */
     @Test
     public void mergeXtrIdMappingsTest_verifyExpiredMappings() {
-        MappingRecord expiredMappingRecord1 = getDefaultMappingRecordBuilder().setTimestamp(1L).build();
-        MappingRecord expiredMappingRecord2 = getDefaultMappingRecordBuilder()
-                .setXtrId(XTR_ID_2)
-                .setTimestamp(1L).build();
+        ExtendedMappingRecord expiredRecord1 = new ExtendedMappingRecord(getDefaultMappingRecordBuilder().build());
+        expiredRecord1.setTimestamp(new Date(1L));
+        ExtendedMappingRecord expiredRecord2 = new ExtendedMappingRecord(getDefaultMappingRecordBuilder()
+                .setXtrId(XTR_ID_2).build());
+        expiredRecord2.setTimestamp(new Date(1L));
         List<XtrId> expiredMappings = Lists.newArrayList();
-        List<Object> mappingRecords =
-                Lists.newArrayList(expiredMappingRecord1, expiredMappingRecord2);
+        List<Object> records =
+                Lists.newArrayList(expiredRecord1, expiredRecord2);
 
-        assertNull(MappingMergeUtil.mergeXtrIdMappings(mappingRecords, expiredMappings, null));
+        assertNull(MappingMergeUtil.mergeXtrIdMappings(records, expiredMappings, null));
         assertEquals(2, expiredMappings.size());
         assertTrue(expiredMappings.contains(XTR_ID_1));
         assertTrue(expiredMappings.contains(XTR_ID_2));
@@ -430,26 +431,27 @@ public class MappingMergeUtilTest {
         final long timestamp_2 = timestamp - 300L; // oldest mapping
         final long timestamp_3 = timestamp - 100L;
 
-        final MappingRecord expiredMappingRecord_1 = getDefaultMappingRecordBuilder()
-                .setTimestamp(timestamp_1).build();
-        final MappingRecord expiredMappingRecord_2 = getDefaultMappingRecordBuilder()
+        ExtendedMappingRecord expiredRecord1 = new ExtendedMappingRecord(getDefaultMappingRecordBuilder().build());
+        expiredRecord1.setTimestamp(new Date(timestamp_1));
+        ExtendedMappingRecord expiredRecord2 = new ExtendedMappingRecord(getDefaultMappingRecordBuilder()
                 .setSourceRloc(IPV4_SOURCE_RLOC_2)
-                .setXtrId(XTR_ID_2)
-                .setTimestamp(timestamp_2).build();
-        final MappingRecord expiredMappingRecord_3 = getDefaultMappingRecordBuilder()
+                .setXtrId(XTR_ID_2).build());
+        expiredRecord2.setTimestamp(new Date(timestamp_2));
+        ExtendedMappingRecord expiredRecord3 = new ExtendedMappingRecord(getDefaultMappingRecordBuilder()
                 .setSourceRloc(IPV4_SOURCE_RLOC_3)
-                .setXtrId(XTR_ID_3)
-                .setTimestamp(timestamp_3).build();
+                .setXtrId(XTR_ID_3).build());
+        expiredRecord3.setTimestamp(new Date(timestamp_3));
 
         Set<IpAddressBinary> sourceRlocs = Sets.newHashSet();
         final List<XtrId> expiredMappings = Lists.newArrayList();
         final List<Object> mappingRecords =
-                Lists.newArrayList(expiredMappingRecord_1, expiredMappingRecord_2, expiredMappingRecord_3);
+                Lists.newArrayList(expiredRecord1, expiredRecord2, expiredRecord3);
 
         // result
-        MappingRecord result = MappingMergeUtil.mergeXtrIdMappings(mappingRecords, expiredMappings, sourceRlocs);
-        assertEquals(timestamp_2, (long) result.getTimestamp());
-        assertEquals(XTR_ID_2, result.getXtrId());
+        ExtendedMappingRecord result = MappingMergeUtil.mergeXtrIdMappings(
+                mappingRecords, expiredMappings, sourceRlocs);
+        assertEquals(timestamp_2, (long) result.getTimestamp().getTime());
+        assertEquals(XTR_ID_2, result.getRecord().getXtrId());
 
         assertTrue(sourceRlocs.size() == 3);
         assertTrue(sourceRlocs.contains(IPV4_SOURCE_RLOC_1));
@@ -465,11 +467,13 @@ public class MappingMergeUtilTest {
     @Test
     public void mappingIsExpiredTest() {
         long timestamp = new Date().getTime();
-        MappingRecordBuilder mappingRecordBuilder = getDefaultMappingRecordBuilder();
-        assertTrue(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder
-                .setTimestamp(timestamp - (REGISTRATION_VALIDITY + 1L)).build()));
-        assertFalse(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder.setTimestamp(timestamp).build()));
-        assertFalse(MappingMergeUtil.mappingIsExpired(mappingRecordBuilder.setTimestamp(null).build()));
+        ExtendedMappingRecord emr = new ExtendedMappingRecord(getDefaultMappingRecordBuilder().build());
+        emr.setTimestamp(new Date(timestamp - (REGISTRATION_VALIDITY + 1L)));
+        assertTrue(MappingMergeUtil.mappingIsExpired(emr));
+        emr.setTimestamp(new Date(timestamp));
+        assertFalse(MappingMergeUtil.mappingIsExpired(emr));
+        emr.setTimestamp(null);
+        assertFalse(MappingMergeUtil.mappingIsExpired(emr));
     }
 
     /**
index a2a5d1950c84fe820587c2c1176046af789d981f..17701ed3d7563f8d3ea6afc20cc2f7c13e0f139a 100644 (file)
@@ -17,6 +17,7 @@ import java.util.Map;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 import org.opendaylight.lispflowmapping.interfaces.dao.ILispDAO;
 import org.opendaylight.lispflowmapping.interfaces.dao.MappingEntry;
@@ -42,7 +43,9 @@ public class SimpleMapCacheTest {
 
     private static ILispDAO tableMock;
     private static ILispDAO xtrIdDaoMock;
+    private static ILispDAO xtrIdTableDaoMock;
     private static MappingRecord mappingRecordMock;
+    private static ExtendedMappingRecord extendedMappingRecordMock;
     private static ILispDAO daoMock;
     private static SimpleMapCache simpleMapCache;
 
@@ -80,7 +83,9 @@ public class SimpleMapCacheTest {
         daoMock = Mockito.mock(ILispDAO.class, "dao");
         tableMock = Mockito.mock(ILispDAO.class);
         xtrIdDaoMock = Mockito.mock(ILispDAO.class);
+        xtrIdTableDaoMock = Mockito.mock(ILispDAO.class);
         mappingRecordMock = Mockito.mock(MappingRecord.class);
+        extendedMappingRecordMock = Mockito.mock(ExtendedMappingRecord.class);
         simpleMapCache = new SimpleMapCache(daoMock);
     }
 
@@ -274,23 +279,25 @@ public class SimpleMapCacheTest {
         final SimpleImmutableEntry<Eid, Map<String, ?>> mapPair = new SimpleImmutableEntry<>(
                 NORMALIZED_EID_IPV4_PREFIX_DST, mapMock);
         final ILispDAO xtrIdRecordsMock = Mockito.mock(ILispDAO.class);
-        final MappingRecord expiredMappingRecord = getDefaultMappingRecordBuilder().setTimestamp(1L).build(); // expired
-        final MappingRecord mappingRecord = getDefaultMappingRecordBuilder().build(); // not expired
+        final ExtendedMappingRecord expiredMappingRecord = new ExtendedMappingRecord(getDefaultMappingRecordBuilder()
+                .build());
+        expiredMappingRecord.setTimestamp(new Date(1L)); //expired
+        final ExtendedMappingRecord mappingRecord = new ExtendedMappingRecord(getDefaultMappingRecordBuilder().build());
 
         Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
         Mockito.when(tableMock.getBestPair(NORMALIZED_EID_IPV4_PREFIX_DST)).thenReturn(mapPair);
         Mockito.when(mapMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdRecordsMock);
         Mockito.when(xtrIdRecordsMock.getSpecific(EID_IPV4_PREFIX_DST, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
-        Mockito.when(xtrIdDaoMock.getSpecific(XTR_ID, SubKeys.RECORD))
+        Mockito.when(xtrIdDaoMock.getSpecific(XTR_ID, SubKeys.EXT_RECORD))
                 .thenReturn(expiredMappingRecord) // first invocation
                 .thenReturn(mappingRecord);       // second invocation
 
         // with expired mapping record
         assertNull(simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
-        Mockito.verify(xtrIdDaoMock, Mockito.atMost(1)).removeSpecific(XTR_ID, SubKeys.RECORD);
+        Mockito.verify(xtrIdDaoMock, Mockito.atMost(1)).removeSpecific(XTR_ID, SubKeys.EXT_RECORD);
 
         // with non-expired mapping record
-        assertEquals(mappingRecord, simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
+        assertEquals(mappingRecord.getRecord(), simpleMapCache.getMapping(null, EID_IPV4_PREFIX_DST, XTR_ID));
     }
 
     /**
@@ -403,6 +410,12 @@ public class SimpleMapCacheTest {
         final Map<String, Object> entryMock = Mockito.mock(Map.class);
         Mockito.when(daoMock.getSpecific(VNI_0, SubKeys.VNI)).thenReturn(tableMock);
         Mockito.when(tableMock.getBest(NORMALIZED_EID_IPV4)).thenReturn(entryMock);
+        Mockito.when(entryMock.get(SubKeys.RECORD)).thenReturn(mappingRecordMock);
+        Mockito.when(entryMock.get(SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
+        Mockito.when(xtrIdDaoMock.getSpecific(EID_IPV4, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdTableDaoMock);
+        Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
+        Mockito.when(xtrIdTableDaoMock.getSpecific(new XtrId(XTR_ID), SubKeys.EXT_RECORD))
+            .thenReturn(extendedMappingRecordMock);
 
         simpleMapCache.updateMappingRegistration(EID_IPV4, null);
         Mockito.verify(entryMock).put(Mockito.eq(SubKeys.REGDATE), Mockito.any(Date.class));
@@ -481,21 +494,24 @@ public class SimpleMapCacheTest {
     @Test
     @SuppressWarnings("unchecked")
     public void addMappingTest_mappingMergeTrue() throws Exception {
-        Mockito.when(mappingRecordMock.getTimestamp()).thenReturn(System.currentTimeMillis());
+        final Date timestamp = new Date(System.currentTimeMillis());
         Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
         Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
         Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
 
         PowerMockito.mockStatic(MappingMergeUtil.class);
         PowerMockito.when(MappingMergeUtil.mergeXtrIdMappings(Mockito.anyList(), Mockito.anyList(), Mockito.anySet()))
-                .thenReturn(getDefaultMappingRecordBuilder().build());
+                .thenReturn(new ExtendedMappingRecord(getDefaultMappingRecordBuilder().build(), timestamp));
 
+        final ArgumentCaptor<MappingEntry> captor = ArgumentCaptor.forClass(MappingEntry.class);
         simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, true);
-        Mockito.verify(xtrIdDaoMock).put(new XtrId(XTR_ID), new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
+
+        Mockito.verify(xtrIdDaoMock).put(Mockito.eq(new XtrId(XTR_ID)), captor.capture());
         Mockito.verify(tableMock)
-                .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.REGDATE, new Date(Long.MAX_VALUE)));
+                .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.REGDATE, timestamp));
         Mockito.verify(tableMock)
                 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.RECORD, getDefaultMappingRecordBuilder().build()));
+        assertEquals(mappingRecordMock, ((ExtendedMappingRecord) captor.getValue().getValue()).getRecord());
     }
 
     /**
@@ -503,18 +519,19 @@ public class SimpleMapCacheTest {
      */
     @Test
     public void addMappingTest_mappingMergeFalse() throws Exception {
-        Mockito.when(mappingRecordMock.getTimestamp()).thenReturn(Long.MAX_VALUE);
+        final Date timestamp = new Date(System.currentTimeMillis());
+        Mockito.when(mappingRecordMock.getTimestamp()).thenReturn(timestamp.getTime());
         Mockito.when(daoMock.getSpecific(VNI_100, SubKeys.VNI)).thenReturn(tableMock);
         Mockito.when(tableMock.getSpecific(NORMALIZED_EID_1, SubKeys.XTRID_RECORDS)).thenReturn(xtrIdDaoMock);
         Mockito.when(mappingRecordMock.getXtrId()).thenReturn(new XtrId(XTR_ID));
 
         simpleMapCache.addMapping(EID_IPV4_PREFIX_1_VNI, mappingRecordMock, false, false);
-        Mockito.verify(xtrIdDaoMock).put(new XtrId(XTR_ID), new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
+        final ArgumentCaptor<MappingEntry> captor = ArgumentCaptor.forClass(MappingEntry.class);
 
-        Mockito.verify(tableMock)
-                .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.REGDATE, new Date(Long.MAX_VALUE)));
+        Mockito.verify(xtrIdDaoMock).put(Mockito.eq(new XtrId(XTR_ID)), captor.capture());
         Mockito.verify(tableMock)
                 .put(NORMALIZED_EID_1, new MappingEntry<>(SubKeys.RECORD, mappingRecordMock));
+        assertEquals(mappingRecordMock, ((ExtendedMappingRecord) captor.getValue().getValue()).getRecord());
     }
 
     /**