diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests.java index a7bec3d..650c9ca 100644 --- a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests.java +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/config/annotation/web/http/ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests.java @@ -27,9 +27,13 @@ import org.junit.Test; import org.apache.geode.cache.RegionShortcut; import org.apache.geode.cache.client.ClientRegionShortcut; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.env.PropertySource; import org.springframework.data.gemfire.config.annotation.ClientCacheApplication; import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; @@ -59,7 +63,7 @@ public class ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests { private ConfigurableApplicationContext applicationContext; @After - public void tearDow() { + public void tearDown() { Optional.ofNullable(this.applicationContext).ifPresent(ConfigurableApplicationContext::close); } @@ -107,6 +111,37 @@ public class ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests { assertThat(sessionConfiguration.getSessionSerializerBeanName()).isEqualTo("SessionPdxSerializer"); } + @Test + public void usesPrimarySpringSessionGemFireConfigurerWhenPresent() { + + MockPropertySource testPropertySource = new MockPropertySource("TestProperties") + .withProperty("test.cache.client.region.shortcut", ClientRegionShortcut.CACHING_PROXY.name()) + .withProperty("test.cache.client.pool.name", "Car") + .withProperty("test.session.expiration.max-inactive-interval-seconds", "300") + .withProperty("test.session.region.name", "TestSessionRegionName") + .withProperty("spring.session.data.gemfire.cache.client.region.shortcut", ClientRegionShortcut.LOCAL_PERSISTENT.name()) + .withProperty("spring.session.data.gemfire.cache.server.region.shortcut", RegionShortcut.REPLICATE_PERSISTENT_OVERFLOW.name()) + .withProperty("spring.session.data.gemfire.session.attributes.indexable", "firstName, lastName") + .withProperty("spring.session.data.gemfire.session.expiration.max-inactive-interval-seconds", "120") + .withProperty("spring.session.data.gemfire.session.region.name", "PropertyRegionName"); + //.withProperty("spring.session.data.gemfire.session.serializer.bean-name", "MockSessionSerializer"); + + this.applicationContext = newApplicationContext(testPropertySource, + TestConfiguration.class, TestSpringSessionGemFireConfigurerConfiguration.class); + + GemFireHttpSessionConfiguration sessionConfiguration = + this.applicationContext.getBean(GemFireHttpSessionConfiguration.class); + + assertThat(sessionConfiguration).isNotNull(); + assertThat(sessionConfiguration.getClientRegionShortcut()).isEqualTo(ClientRegionShortcut.CACHING_PROXY); + assertThat(sessionConfiguration.getIndexableSessionAttributes()).isEmpty(); + assertThat(sessionConfiguration.getMaxInactiveIntervalInSeconds()).isEqualTo(300); + assertThat(sessionConfiguration.getPoolName()).isEqualTo("Car"); + assertThat(sessionConfiguration.getServerRegionShortcut()).isEqualTo(RegionShortcut.PARTITION_PERSISTENT); + assertThat(sessionConfiguration.getSessionRegionName()).isEqualTo("TestSessionRegionName"); + assertThat(sessionConfiguration.getSessionSerializerBeanName()).isEqualTo("SessionPdxSerializer"); + } + @Test public void usesSpringSessionGemFireConfigurerWhenPresent() { @@ -175,4 +210,57 @@ public class ConfigurerBasedGemFireHttpSessionConfigurationIntegrationTests { }; } } + + @Configuration + static class TestSpringSessionGemFireConfigurerConfiguration { + + //@Value("${test.cache.client.region.shortcut:PROXY}") + //private ClientRegionShortcut clientRegionShortcut; + + //@Value("${test.session.expiration.max-inactive-interval-seconds:600}") + //private int maxInactiveIntervalInSeconds; + + @Bean + static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { + return new PropertySourcesPlaceholderConfigurer(); + } + + @Bean + @Primary + SpringSessionGemFireConfigurer primarySpringSessionGemFireConfigurer( + @Value("${test.cache.client.pool.name:geodePool}") String poolName, + @Value("${test.cache.client.region.shortcut:PROXY}") ClientRegionShortcut clientRegionShortcut, + @Value("${test.cache.server.region.shortcut:PARTITION_PERSISTENT}") RegionShortcut serverRegionShortcut, + @Value("${test.session.expiration.max-inactive-interval-seconds:600}") int maxInactiveIntervalInSeconds, + @Value("${test.session.region.name:MockSessionRegionName}") String regionName) { + + return new SpringSessionGemFireConfigurer() { + + @Override + public ClientRegionShortcut getClientRegionShortcut() { + return clientRegionShortcut; + } + + @Override + public int getMaxInactiveIntervalInSeconds() { + return maxInactiveIntervalInSeconds; + } + + @Override + public String getPoolName() { + return poolName; + } + + @Override + public String getRegionName() { + return regionName; + } + + @Override + public RegionShortcut getServerRegionShortcut() { + return serverRegionShortcut; + } + }; + } + } }