Add conditional logic to handle beans of type ResolvableRegionFactoryBean.

Resolves gh-67.
This commit is contained in:
John Blum
2020-05-06 11:07:52 -07:00
parent 8aed3f95cd
commit 9f97a8313d
2 changed files with 31 additions and 2 deletions

View File

@@ -19,6 +19,7 @@ import org.apache.geode.cache.Region;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
import org.springframework.data.gemfire.ResolvableRegionFactoryBean;
import org.springframework.lang.NonNull;
/**
@@ -29,6 +30,7 @@ import org.springframework.lang.NonNull;
* @see java.lang.FunctionalInterface
* @see org.apache.geode.cache.Region
* @see org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor
* @see org.springframework.data.gemfire.ResolvableRegionFactoryBean
* @since 1.3.0
*/
@FunctionalInterface
@@ -50,6 +52,9 @@ public interface CacheDataExporter extends DestructionAwareBeanPostProcessor {
if (bean instanceof Region) {
exportFrom((Region) bean);
}
else if (bean instanceof ResolvableRegionFactoryBean) {
exportFrom(((ResolvableRegionFactoryBean) bean).getRegion());
}
}
/**

View File

@@ -19,15 +19,19 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doCallRealMethod;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoInteractions;
import org.junit.Test;
import org.apache.geode.cache.Region;
import org.springframework.data.gemfire.ResolvableRegionFactoryBean;
/**
* Unit Tests for {@link CacheDataExporter}
*
@@ -41,7 +45,7 @@ import org.apache.geode.cache.Region;
public class CacheDataExporterUnitTests {
@Test
public void postProcessBeforeDestructionCallsExportFromGivenARegionArgument() {
public void postProcessBeforeDestructionCallsExportFromGivenARegion() {
Region<?, ?> mockRegion = mock(Region.class);
@@ -52,6 +56,26 @@ public class CacheDataExporterUnitTests {
exporter.postProcessBeforeDestruction(mockRegion, "TestRegion");
verify(exporter, times(1)).exportFrom(eq(mockRegion));
verifyNoInteractions(mockRegion);
}
@Test
public void postProcessBeforeDestructionCallsExportFromGivenAResolvableRegionFactoryBean() {
ResolvableRegionFactoryBean<?, ?> mockRegionFactoryBean = mock(ResolvableRegionFactoryBean.class);
Region<?, ?> mockRegion = mock(Region.class);
CacheDataExporter exporter = mock(CacheDataExporter.class);
doReturn(mockRegion).when(mockRegionFactoryBean).getRegion();
doCallRealMethod().when(exporter).postProcessBeforeDestruction(any(), anyString());
exporter.postProcessBeforeDestruction(mockRegionFactoryBean, "TestRegion");
verify(mockRegionFactoryBean, times(1)).getRegion();
verify(exporter, times(1)).exportFrom(eq(mockRegion));
verifyNoInteractions(mockRegion);
}
@Test
@@ -73,7 +97,7 @@ public class CacheDataExporterUnitTests {
doCallRealMethod().when(exporter).postProcessBeforeDestruction(any(), anyString());
exporter.postProcessBeforeDestruction(null, "TestRegion");
exporter.postProcessBeforeDestruction(null, "TestBean");
verify(exporter, never()).exportFrom(any(Region.class));
}