DATAGEODE-198 - Change the generic signature of the Configurer interface.

This commit is contained in:
John Blum
2019-06-08 13:00:19 -07:00
parent 29443fdb50
commit cc987bdbd6
19 changed files with 304 additions and 151 deletions

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.config.annotation;
import static org.assertj.core.api.Assertions.assertThat;
@@ -22,11 +21,14 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.geode.cache.client.ClientCache;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.apache.geode.cache.client.ClientCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
@@ -41,17 +43,22 @@ import org.springframework.test.context.junit4.SpringRunner;
* @see org.junit.Test
* @see org.junit.runner.RunWith
* @see org.apache.geode.cache.client.ClientCache
* @see org.springframework.context.annotation.Bean
* @see org.springframework.data.gemfire.client.ClientCacheFactoryBean
* @see org.springframework.data.gemfire.config.annotation.ClientCacheApplication
* @see org.springframework.data.gemfire.config.annotation.ClientCacheConfigurer
* @see org.springframework.data.gemfire.test.GemfireTestBeanPostProcessor
* @see org.springframework.data.gemfire.test.mock.annotation.EnableGemFireMockObjects
* @see org.springframework.test.context.junit4.SpringRunner
* @since 1.1.0
* @since 2.1.0
*/
@RunWith(SpringRunner.class)
@SuppressWarnings("unused")
public class ClientCacheConfigurerIntegrationTests {
private static final AtomicBoolean testClientCacheConfigurerThreeCalled = new AtomicBoolean(false);
private static final String GEMFIRE_LOG_LEVEL = "error";
@Autowired
private ClientCache clientCache;
@@ -86,8 +93,13 @@ public class ClientCacheConfigurerIntegrationTests {
assertClientCacheConfigurerInvokedSuccessfully(this.configurerTwo, "gemfireCache");
}
@Test
public void clientCacheConfigurerThreeCalledSuccessfully() {
assertThat(testClientCacheConfigurerThreeCalled.get()).isTrue();
}
@EnableGemFireMockObjects
@ClientCacheApplication(logLevel = "error")
@ClientCacheApplication(logLevel = GEMFIRE_LOG_LEVEL)
static class TestConfiguration {
@Bean
@@ -100,6 +112,11 @@ public class ClientCacheConfigurerIntegrationTests {
return new TestClientCacheConfigurer();
}
@Bean
ClientCacheConfigurer testClientCacheConfigurerThree() {
return (beanName, bean) -> testClientCacheConfigurerThreeCalled.set(true);
}
@Bean
String nonRelevantBean() {
return "test";

View File

@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.gemfire.config.annotation;
import static org.assertj.core.api.Assertions.assertThat;
@@ -24,9 +23,11 @@ import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
import org.apache.geode.cache.GemFireCache;
import org.junit.After;
import org.junit.Test;
import org.apache.geode.cache.GemFireCache;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -42,6 +43,7 @@ import org.springframework.data.gemfire.mapping.annotation.LocalRegion;
import org.springframework.data.gemfire.mapping.annotation.PartitionRegion;
import org.springframework.data.gemfire.mapping.annotation.ReplicateRegion;
import org.springframework.data.gemfire.test.GemfireTestBeanPostProcessor;
import org.springframework.util.ReflectionUtils;
/**
* Integration tests for {@link RegionConfigurer}.
@@ -52,11 +54,13 @@ import org.springframework.data.gemfire.test.GemfireTestBeanPostProcessor;
* @see org.apache.geode.cache.Region
* @see org.springframework.context.ConfigurableApplicationContext
* @see org.springframework.context.annotation.AnnotationConfigApplicationContext
* @see PeerRegionFactoryBean
* @see org.springframework.context.annotation.Bean
* @see org.springframework.data.gemfire.PartitionedRegionFactoryBean
* @see org.springframework.data.gemfire.PeerRegionFactoryBean
* @see org.springframework.data.gemfire.client.ClientRegionFactoryBean
* @see org.springframework.data.gemfire.config.annotation.RegionConfigurer
* @see org.springframework.data.gemfire.test.GemfireTestBeanPostProcessor
* @since 1.1.0
* @since 2.1.0
*/
public class RegionConfigurerIntegrationTests {
@@ -64,34 +68,54 @@ public class RegionConfigurerIntegrationTests {
@After
public void tearDown() {
Optional.ofNullable(this.applicationContext).ifPresent(ConfigurableApplicationContext::close);
Optional.ofNullable(this.applicationContext)
.ifPresent(ConfigurableApplicationContext::close);
}
/* (non-Javadoc) */
private void assertRegionConfigurerInvocations(TestRegionConfigurer regionConfigurer, String... regionBeanNames) {
assertThat(regionConfigurer).isNotNull();
assertThat(regionConfigurer).contains(regionBeanNames);
assertThat(regionConfigurer).hasSize(regionBeanNames.length);
@SuppressWarnings("unchecked")
private Iterable<String> resolveBeanNames(Object target) {
return Optional.ofNullable(target)
.map(Object::getClass)
.map(type -> ReflectionUtils.findField(type, "beanNames"))
.map(beanNamesField -> {
ReflectionUtils.makeAccessible(beanNamesField);
return beanNamesField;
})
.map(beanNamesField -> (Set<String>) ReflectionUtils.getField(beanNamesField, target))
.orElseGet(() -> Collections.emptySet());
}
/* (non-Javadoc) */
private ConfigurableApplicationContext newApplicationContext(Class<?>... annotatedClasses) {
ConfigurableApplicationContext applicationContext = new AnnotationConfigApplicationContext(annotatedClasses);
applicationContext.registerShutdownHook();
return applicationContext;
}
private void assertRegionConfigurerInvocations(Iterable<String> actualRegionBeanNames,
String... expectedRegionBeanNames) {
assertThat(actualRegionBeanNames).isNotNull();
assertThat(actualRegionBeanNames).hasSize(expectedRegionBeanNames.length);
assertThat(actualRegionBeanNames).contains(expectedRegionBeanNames);
}
@Test
public void clientRegionConfigurersCalledSuccessfully() {
this.applicationContext = newApplicationContext(ClientTestConfiguration.class);
assertThat(this.applicationContext).isNotNull();
assertThat(this.applicationContext.containsBean("Test")).isTrue();
assertThat(this.applicationContext.containsBean("Sessions")).isTrue();
assertThat(this.applicationContext.containsBean("GenericRegionEntity")).isTrue();
assertThat(this.applicationContext.containsBean("Test")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerOne")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerTwo")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerThree")).isTrue();
assertRegionConfigurerInvocations(
this.applicationContext.getBean("testRegionConfigurerOne", TestRegionConfigurer.class),
@@ -100,6 +124,10 @@ public class RegionConfigurerIntegrationTests {
assertRegionConfigurerInvocations(
this.applicationContext.getBean("testRegionConfigurerTwo", TestRegionConfigurer.class),
"GenericRegionEntity", "Sessions");
assertRegionConfigurerInvocations(
resolveBeanNames(this.applicationContext.getBean("testRegionConfigurerThree", RegionConfigurer.class)),
"GenericRegionEntity", "Sessions");
}
@Test
@@ -108,11 +136,12 @@ public class RegionConfigurerIntegrationTests {
this.applicationContext = newApplicationContext(PeerTestConfiguration.class);
assertThat(this.applicationContext).isNotNull();
assertThat(this.applicationContext.containsBean("Customers")).isTrue();
assertThat(this.applicationContext.containsBean("GenericRegionEntity")).isTrue();
assertThat(this.applicationContext.containsBean("Test")).isTrue();
assertThat(this.applicationContext.containsBean("GenericRegionEntity")).isTrue();
assertThat(this.applicationContext.containsBean("Customers")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerOne")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerTwo")).isTrue();
assertThat(this.applicationContext.containsBean("testRegionConfigurerThree")).isTrue();
assertRegionConfigurerInvocations(
this.applicationContext.getBean("testRegionConfigurerOne", TestRegionConfigurer.class),
@@ -121,6 +150,10 @@ public class RegionConfigurerIntegrationTests {
assertRegionConfigurerInvocations(
this.applicationContext.getBean("testRegionConfigurerTwo", TestRegionConfigurer.class),
"Customers", "GenericRegionEntity");
assertRegionConfigurerInvocations(
resolveBeanNames(this.applicationContext.getBean("testRegionConfigurerThree", RegionConfigurer.class)),
"Customers", "GenericRegionEntity");
}
@SuppressWarnings("unused")
@@ -141,6 +174,25 @@ public class RegionConfigurerIntegrationTests {
return new TestRegionConfigurer();
}
@Bean
RegionConfigurer testRegionConfigurerThree() {
return new RegionConfigurer() {
private final Set<String> beanNames = new HashSet<>();
@Override
public void configure(String beanName, ClientRegionFactoryBean<?, ?> bean) {
this.beanNames.add(beanName);
}
@Override
public void configure(String beanName, PeerRegionFactoryBean<?, ?> bean) {
this.beanNames.add(beanName);
}
};
}
@Bean
String nonRelevantBean() {
return "test";
@@ -150,14 +202,19 @@ public class RegionConfigurerIntegrationTests {
@ClientCacheApplication
@EnableEntityDefinedRegions(basePackageClasses = NonEntity.class,
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION,
classes = { LocalRegion.class, PartitionRegion.class, ReplicateRegion.class }))
classes = { LocalRegion.class, PartitionRegion.class, ReplicateRegion.class
})
)
@SuppressWarnings("unused")
static class ClientTestConfiguration extends AbstractTestConfiguration {
@Bean(name = "Test")
ClientRegionFactoryBean<Object, Object> testRegion(GemFireCache gemfireCache) {
ClientRegionFactoryBean<Object, Object> testRegionFactory = new ClientRegionFactoryBean<>();
testRegionFactory.setCache(gemfireCache);
return testRegionFactory;
}
}
@@ -176,8 +233,11 @@ public class RegionConfigurerIntegrationTests {
@Bean(name = "Test")
PartitionedRegionFactoryBean<Object, Object> testRegion(GemFireCache gemfireCache) {
PartitionedRegionFactoryBean<Object, Object> testRegionFactory = new PartitionedRegionFactoryBean<>();
testRegionFactory.setCache(gemfireCache);
return testRegionFactory;
}
}
@@ -187,12 +247,12 @@ public class RegionConfigurerIntegrationTests {
private final Set<String> beanNames = new HashSet<>();
@Override
public void configure(String beanName, PeerRegionFactoryBean<?, ?> bean) {
public void configure(String beanName, ClientRegionFactoryBean<?, ?> bean) {
this.beanNames.add(beanName);
}
@Override
public void configure(String beanName, ClientRegionFactoryBean<?, ?> bean) {
public void configure(String beanName, PeerRegionFactoryBean<?, ?> bean) {
this.beanNames.add(beanName);
}