From e980f9811bbe49db7394e078671d933e59c43778 Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 23 Oct 2018 22:09:48 -0700 Subject: [PATCH] Add additional test cases asserting the SessionExpirationPolicy bean configuration, the Region.customEntryIdleTimeout expiration configuration and the Region.entryIdleTimeout expiration configuration. Resolves gh-5. --- ...eoutSessionExpirationIntegrationTests.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) diff --git a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/expiration/FixedTimeoutSessionExpirationIntegrationTests.java b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/expiration/FixedTimeoutSessionExpirationIntegrationTests.java index d83be7f..7f42289 100644 --- a/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/expiration/FixedTimeoutSessionExpirationIntegrationTests.java +++ b/spring-session-data-geode/src/integration-test/java/org/springframework/session/data/gemfire/expiration/FixedTimeoutSessionExpirationIntegrationTests.java @@ -18,21 +18,33 @@ package org.springframework.session.data.gemfire.expiration; import static org.assertj.core.api.Assertions.assertThat; +import java.lang.reflect.Method; import java.time.Duration; +import java.util.Optional; + +import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; +import org.apache.geode.cache.CustomExpiry; +import org.apache.geode.cache.ExpirationAction; +import org.apache.geode.cache.ExpirationAttributes; +import org.apache.geode.cache.Region; import org.apache.geode.cache.client.ClientRegionShortcut; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.data.gemfire.config.annotation.ClientCacheApplication; import org.springframework.session.Session; import org.springframework.session.data.gemfire.AbstractGemFireIntegrationTests; import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; import org.springframework.session.data.gemfire.expiration.support.FixedTimeoutSessionExpirationPolicy; +import org.springframework.session.data.gemfire.expiration.support.SessionExpirationPolicyCustomExpiryAdapter; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.util.ReflectionUtils; /** * Integration tests asserting fixed duration expiration timeout for a {@link Session}. @@ -52,6 +64,71 @@ import org.springframework.test.context.junit4.SpringRunner; @SuppressWarnings("unused") public class FixedTimeoutSessionExpirationIntegrationTests extends AbstractGemFireIntegrationTests { + @Resource(name = GemFireHttpSessionConfiguration.DEFAULT_SESSION_REGION_NAME) + private Region sessions; + + @Autowired + private SessionExpirationPolicy sessionExpirationPolicy; + + @SuppressWarnings("unchecked") + private T invokeMethod(Object target, String methodName) throws NoSuchMethodException { + + Method method = ReflectionUtils.findMethod(target.getClass(), methodName); + + if (method == null) { + throw new NoSuchMethodException(String.format("No method with name [%1$s] found on object of type [%2$s]", + methodName, target.getClass())); + } + + ReflectionUtils.makeAccessible(method); + + return (T) ReflectionUtils.invokeMethod(method, target); + } + + @Test + public void sessionExpirationPolicyConfigurationIsCorrect() throws Exception { + + assertThat(this.sessionExpirationPolicy).isInstanceOf(FixedTimeoutSessionExpirationPolicy.class); + + assertThat(this.sessionExpirationPolicy.getExpirationAction()) + .isEqualTo(SessionExpirationPolicy.ExpirationAction.INVALIDATE); + + assertThat(this.invokeMethod(this.sessionExpirationPolicy, "getFixedTimeout")) + .isEqualTo(Duration.ofSeconds(3)); + + assertThat(this.>invokeMethod(this.sessionExpirationPolicy, "getIdleTimeout") + .orElse(null)).isEqualTo(Duration.ofMinutes(30)); + } + + @Test + public void sessionsRegionCustomEntryIdleTimeoutExpirationConfigurationIsCorrect() throws Exception { + + assertThat(this.sessions).isNotNull(); + assertThat(this.sessions.getAttributes()).isNotNull(); + + CustomExpiry customEntryIdleTimeout = this.sessions.getAttributes().getCustomEntryIdleTimeout(); + + assertThat(customEntryIdleTimeout).isInstanceOf(SessionExpirationPolicyCustomExpiryAdapter.class); + + SessionExpirationPolicy actualSessionExpirationPolicy = + invokeMethod(customEntryIdleTimeout, "getSessionExpirationPolicy"); + + assertThat(actualSessionExpirationPolicy).isEqualTo(this.sessionExpirationPolicy); + } + + @Test + public void sessionsRegionEntryIdleTimeoutExpirationConfigurationIsCorrect() { + + assertThat(this.sessions).isNotNull(); + assertThat(this.sessions.getAttributes()).isNotNull(); + + ExpirationAttributes entryIdleTimeout = this.sessions.getAttributes().getEntryIdleTimeout(); + + assertThat(entryIdleTimeout).isNotNull(); + assertThat(entryIdleTimeout.getAction()).isEqualTo(ExpirationAction.INVALIDATE); + assertThat(entryIdleTimeout.getTimeout()).isEqualTo((int) Duration.ofMinutes(30).getSeconds()); + } + @Test public void sessionExpiresAfterFixedDuration() {