Add additional integration test case testing the accessiblity of Spring Session GemFire configuration as Properties via Spring's @Value annotation on other beans defined in the Spring ApplicationContext.

Resolves gh-14.
This commit is contained in:
John Blum
2018-12-06 01:27:38 -08:00
parent 308bf0e6b7
commit 7a9c1398ca

View File

@@ -28,12 +28,16 @@ import org.junit.Test;
import org.apache.geode.DataSerializer;
import org.apache.geode.cache.GemFireCache;
import org.apache.geode.cache.RegionShortcut;
import org.apache.geode.cache.client.ClientRegionShortcut;
import org.apache.geode.internal.InternalDataSerializer;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.gemfire.config.annotation.ClientCacheApplication;
import org.springframework.data.gemfire.tests.integration.SpringApplicationContextIntegrationTestsSupport;
import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects;
import org.springframework.session.data.gemfire.expiration.SessionExpirationPolicy;
import org.springframework.session.data.gemfire.serialization.SessionSerializer;
import org.springframework.session.data.gemfire.serialization.data.AbstractDataSerializableSessionSerializer;
import org.springframework.session.data.gemfire.serialization.data.provider.DataSerializableSessionSerializer;
@@ -124,6 +128,106 @@ public class GemFireHttpSessionConfigurationIntegrationTests extends SpringAppli
.orElse(null)).isNull();
}
@Test
public void exposedSpringSessionGemFireConfigurationIsAccessibleToOtherBeansViaTheAtValueAnnotation() {
newApplicationContext(ExposingSpringSessionGemFireConfigurationAsPropertiesConfiguration.class);
SpringSessionGemFireProperties properties =
getApplicationContext().getBean(SpringSessionGemFireProperties.class);
assertThat(properties).isNotNull();
assertThat(properties.clientRegionShortcut()).isEqualTo(ClientRegionShortcut.LOCAL);
assertThat(properties.indexableSessionAttributes()).containsExactly("AttributeOne", "AttributeTwo");
assertThat(properties.maxInactiveIntervalInSeconds()).isEqualTo(300);
assertThat(properties.poolName()).isEqualTo("DEFAULT");
assertThat(properties.regionName()).isEqualTo("Sessions");
assertThat(properties.serverRegionShortcut()).isEqualTo(RegionShortcut.REPLICATE);
assertThat(properties.sessionExpirationPolicyBeanName()).isEqualTo("MockSessionExpirationPolicy");
assertThat(properties.sessionSerializerBeanName()).isEqualTo("MockSessionSerializer");
}
@ClientCacheApplication
@EnableGemFireMockObjects
@EnableGemFireHttpSession(
clientRegionShortcut = ClientRegionShortcut.LOCAL,
exposeConfigurationAsProperties = true,
indexableSessionAttributes = { "AttributeOne", "AttributeTwo" },
maxInactiveIntervalInSeconds = 300,
poolName = "DEFAULT",
regionName = "Sessions",
serverRegionShortcut = RegionShortcut.REPLICATE,
sessionExpirationPolicyBeanName = "MockSessionExpirationPolicy",
sessionSerializerBeanName = "MockSessionSerializer"
)
static class ExposingSpringSessionGemFireConfigurationAsPropertiesConfiguration {
@Bean("MockSessionExpirationPolicy")
SessionExpirationPolicy mockSessionExpirationPolicy() {
return mock(SessionExpirationPolicy.class);
}
@Bean("MockSessionSerializer")
SessionSerializer mockSessionSerializer() {
return mock(SessionSerializer.class);
}
@Bean("SpringSessionGemFireProperties")
SpringSessionGemFireProperties springSessionGemFireProperties(
@Value("${spring.session.data.gemfire.cache.client.region.shortcut}") ClientRegionShortcut clientRegionShortcut,
@Value("${spring.session.data.gemfire.session.attributes.indexed}") String[] indexedSessionAttributes,
@Value("${spring.session.data.gemfire.session.expiration.max-inactive-interval-seconds}") int maxInactiveIntervalInSeconds,
@Value("${spring.session.data.gemfire.cache.client.pool.name}") String poolName,
@Value("${spring.session.data.gemfire.session.region.name}") String regionName,
@Value("${spring.session.data.gemfire.cache.server.region.shortcut}") RegionShortcut serverRegionShortcut,
@Value("${spring.session.data.gemfire.session.expiration.bean-name}") String sessionExpirationPolicyBeanName,
@Value("${spring.session.data.gemfire.session.serializer.bean-name}") String sessionSerializerBeanName) {
return new SpringSessionGemFireProperties() {
@Override
public ClientRegionShortcut clientRegionShortcut() {
return clientRegionShortcut;
}
@Override
public String[] indexableSessionAttributes() {
return indexedSessionAttributes;
}
@Override
public int maxInactiveIntervalInSeconds() {
return maxInactiveIntervalInSeconds;
}
@Override
public String poolName() {
return poolName;
}
@Override
public String regionName() {
return regionName;
}
@Override
public RegionShortcut serverRegionShortcut() {
return serverRegionShortcut;
}
@Override
public String sessionExpirationPolicyBeanName() {
return sessionExpirationPolicyBeanName;
}
@Override
public String sessionSerializerBeanName() {
return sessionSerializerBeanName;
}
};
}
}
@ClientCacheApplication
@EnableGemFireMockObjects
@EnableGemFireHttpSession(
@@ -154,6 +258,25 @@ public class GemFireHttpSessionConfigurationIntegrationTests extends SpringAppli
}
}
interface SpringSessionGemFireProperties {
ClientRegionShortcut clientRegionShortcut();
String[] indexableSessionAttributes();
int maxInactiveIntervalInSeconds();
String poolName();
String regionName();
RegionShortcut serverRegionShortcut();
String sessionExpirationPolicyBeanName();
String sessionSerializerBeanName();
}
static class TestDataSerializer extends AbstractDataSerializableSessionSerializer<Object> {
@Override