@Test public void initialImagePut_givenPutIfAbsentReturningDestroyedOrRemovedEntry_neverCallsUpdateSizeOnRemove() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isDestroyedOrRemoved()).thenReturn(true); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(versionStamp.asVersionTag()).thenReturn(mock(VersionTag.class)); when(map.putIfAbsent(eq(KEY), any())).thenReturn(entry).thenReturn(null); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, null); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(arm._getOwner(), never()).updateSizeOnRemove(any(), anyInt()); }
@Test public void initialImagePut_givenPutIfAbsentReturningRegionEntryOldIsTombstone_callUnscheduleTombstone() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isTombstone()).thenReturn(true); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(versionStamp.asVersionTag()).thenReturn(mock(VersionTag.class)); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(versionStamp); when(createdEntry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); RegionEntryFactory factory = mock(RegionEntryFactory.class); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); when(map.putIfAbsent(eq(KEY), any())).thenReturn(entry); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(arm._getOwner(), times(1)).unscheduleTombstone(entry); }
@Test public void initialImagePut_givenPutIfAbsentReturningRegionEntryAndProcessVersionTagThrowsConcurrentCacheModificationException_createdEntryRemovedFromMapAndNotInitialImageInit() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isTombstone()).thenReturn(false); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(versionStamp.asVersionTag()).thenReturn(mock(VersionTag.class)); doThrow(new ConcurrentCacheModificationException()).when(versionStamp).processVersionTag(any(), any(), anyBoolean(), anyBoolean(), any(), any(), anyBoolean()); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(versionStamp); RegionEntryFactory factory = mock(RegionEntryFactory.class); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); when(map.putIfAbsent(eq(KEY), any())).thenReturn(entry); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(map, times(1)).remove(eq(KEY), eq(createdEntry)); verify(entry, never()).initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean()); }
@Test public void initialImagePut_givenPutIfAbsentReturningNonTombstone_callsUpdateSizeOnRemove() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isTombstone()).thenReturn(false); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(versionStamp.asVersionTag()).thenReturn(mock(VersionTag.class)); when(map.putIfAbsent(eq(KEY), any())).thenReturn(entry).thenReturn(null); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, null); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); VersionTag versionTag = mock(VersionTag.class); when(versionTag.getMemberID()).thenReturn(mock(VersionSource.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(arm._getOwner(), times(1)).updateSizeOnRemove(eq(KEY), anyInt()); }
@Test public void initialImagePut_givenPutIfAbsentReturningRegionEntryAndSameTombstoneWillAttemptToRemoveREAndInvokeNothingElse() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); RegionEntry entry = mock(RegionEntry.class); when(entry.isTombstone()).thenReturn(false); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); VersionStamp versionStamp = mock(VersionStamp.class); when(entry.getVersionStamp()).thenReturn(versionStamp); when(entry.isTombstone()).thenReturn(true); TestableVersionTag versionTag = new TestableVersionTag(); versionTag.setVersionSource(mock(VersionSource.class)); when(versionStamp.asVersionTag()).thenReturn(versionTag); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(versionStamp); RegionEntryFactory factory = mock(RegionEntryFactory.class); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); when(map.putIfAbsent(eq(KEY), eq(createdEntry))).thenReturn(entry); when(arm._getOwner().getConcurrencyChecksEnabled()).thenReturn(true); when(arm._getOwner().getServerProxy()).thenReturn(mock(ServerRegionProxy.class)); arm.initialImagePut(KEY, 0, Token.TOMBSTONE, false, false, versionTag, null, false); verify(map, times(1)).remove(eq(KEY), eq(createdEntry)); verify(entry, never()).initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean()); }
when(entry.isTombstone()).thenReturn(false); when(entry.isDestroyedOrRemoved()).thenReturn(false); when(entry.initialImagePut(any(), anyLong(), any(), anyBoolean(), anyBoolean())) .thenReturn(true); RegionEntry removedTokenEntry = mock(RegionEntry.class);
result = oldRe.initialImagePut(owner, lastModified, newValue, wasRecovered, acceptedVersionTag); if (result) {