DATAGEODE-198 - Change the generic signature of the Configurer interface.
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user