@Test public void initialImagePut_givenPutIfAbsentReturnsNullAndValueIsTombstone_callToScheduleTombstone() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); when(map.putIfAbsent(eq(KEY), any())).thenReturn(null); RegionEntryFactory factory = mock(RegionEntryFactory.class); VersionStamp mockVersionStamp = mock(VersionStamp.class); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(mockVersionStamp); when(createdEntry.initialImageInit(any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(true); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); final TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); 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)).scheduleTombstone(any(), any()); }
@Test public void initialImagePut_givenPutIfAbsentReturnsNullAndProcessVersionTagThrowsConcurrentCacheModificationException_createdEntryRemovedFromMapAndNotInitialImageInit() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); when(map.putIfAbsent(eq(KEY), any())).thenReturn(null); RegionEntryFactory factory = mock(RegionEntryFactory.class); VersionStamp mockVersionStamp = mock(VersionStamp.class); doThrow(new ConcurrentCacheModificationException()).when(mockVersionStamp) .processVersionTag(any(), any(), anyBoolean(), anyBoolean(), any(), any(), anyBoolean()); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(mockVersionStamp); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); final TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); 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(createdEntry, never()).initialImageInit(any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean()); }
@Test public void initialImagePut_givenPutIfAbsentReturnsNullAndValueIsNotTombstone_callUpdateSizeOnCreate() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); when(map.putIfAbsent(eq(KEY), any())).thenReturn(null); RegionEntryFactory factory = mock(RegionEntryFactory.class); VersionStamp mockVersionStamp = mock(VersionStamp.class); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(mockVersionStamp); when(createdEntry.initialImageInit(any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(true); when(factory.createEntry(any(), any(), any())).thenReturn(createdEntry); final TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); 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, "", false, false, versionTag, null, false); verify(arm._getOwner(), times(1)).updateSizeOnCreate(any(), anyInt()); }
@Test public void initialImagePut_ExceptionThrownWhenCreatingNewRegionEntry_removeDoesNotGetCalled() throws RegionClearedException { ConcurrentMapWithReusableEntries map = mock(ConcurrentMapWithReusableEntries.class); when(map.putIfAbsent(eq(KEY), any())).thenReturn(null); RegionEntryFactory factory = mock(RegionEntryFactory.class); VersionStamp mockVersionStamp = mock(VersionStamp.class); RegionEntry createdEntry = mock(RegionEntry.class); when(createdEntry.getVersionStamp()).thenReturn(mockVersionStamp); when(createdEntry.initialImageInit(any(), anyLong(), any(), anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(true); when(factory.createEntry(any(), any(), any())).thenThrow(new RuntimeException()); final TestableAbstractRegionMap arm = new TestableAbstractRegionMap(false, map, factory); 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)); try { arm.initialImagePut(KEY, 0, "", false, false, versionTag, null, false); } catch (RuntimeException e) { // expected to be thrown, we set up the test this way } verify(map, never()).remove(eq(KEY), eq(createdEntry)); }
!wasRecovered || isSynchronizing); result = newRe.initialImageInit(owner, lastModified, newValue, true, wasRecovered, acceptedVersionTag); if (result) {