THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
Overall, the Fakes.java, DistributedRegionJUnitTest, BucketRegionJUnitTest are a good start to build a shareable template to write mock-based test cases for gemfire legacy components.
Summary of a junit test for BucketRegion:
Code Block |
---|
GemFireCacheImpl cache = Fakes.cache();
RegionAttributes ra = createRegionAttributes(isConcurrencyChecksEnabled);
InternalRegionArguments ira = new InternalRegionArguments();
// specify more mock behaviors for ParitionedRegion and BucketRegion
PartitionedRegion pr = mock(PartitionedRegion.class);
BucketAdvisor ba = mock(BucketAdvisor.class);
ReadWriteLock primaryMoveLock = new ReentrantReadWriteLock();
Lock activeWriteLock = primaryMoveLock.readLock();
when(ba.getActiveWriteLock()).thenReturn(activeWriteLock);
when(ba.isPrimary()).thenReturn(true);
ira.setPartitionedRegion(pr)
.setPartitionedRegionBucketRedundancy(1)
.setBucketAdvisor(ba);
// create Bucket Region
BucketRegion br = new BucketRegion("testRegion", ra, null, cache, ira);
// since br is a real bucket region object, we need to tell mockito to monitor it
br = Mockito.spy(br);
doNothing().when(br).distributeUpdateOperation(any(), anyLong());
doNothing().when(br).distributeDestroyOperation(any());
doNothing().when(br).distributeInvalidateOperation(any());
doNothing().when(br).distributeUpdateEntryVersionOperation(any());
doNothing().when(br).checkForPrimary();
doNothing().when(br).handleWANEvent(any());
doReturn(false).when(br).needWriteLock(any());
if (isConcurrencyChecksEnabled) {
region.enableConcurrencyChecks();
}
doNothing().when(region).notifyGatewaySender(any(), any());
doReturn(true).when(region).hasSeenEvent(any(EntryEventImpl.class));
EntryEventImpl event = createDummyEvent(region);
VersionTag tag = createVersionTag(false);
event.setVersionTag(tag);
br.virtualPut(event, false, false, null, false, 12345L, false);
// verify the result
if (cnt > 0) {
verify(br, times(cnt)).distributeUpdateOperation(eq(event), eq(12345L));
} else {
verify(br, never()).distributeUpdateOperation(eq(event), eq(12345L));
} |