From 33f9d4bd41a1cef79657ef50e0aa2929a6fbed32 Mon Sep 17 00:00:00 2001 From: John Blum Date: Wed, 2 Mar 2022 13:54:13 -0800 Subject: [PATCH] Fix bug when parsing Spring Boot, spring.session.timeout property with java.time.Duration styling. Resolves gh-113. --- .../SpringSessionAutoConfiguration.java | 23 +++++- .../SpringSessionProperties.java | 12 +++ ...ringSessionPropertiesIntegrationTests.java | 2 +- ...tionTimeoutInTimeUnitIntegrationTests.java | 78 +++++++++++++++++++ ...figuredSessionCachingIntegrationTests.java | 6 +- .../SessionExpirationIntegrationTests.java | 5 +- ...pirationTimeoutInDaysIntegrationTests.java | 50 ++++++++++++ ...irationTimeoutInHoursIntegrationTests.java | 50 ++++++++++++ ...TimeoutInMillisecondsIntegrationTests.java | 54 +++++++++++++ ...ationTimeoutInMinutesIntegrationTests.java | 50 ++++++++++++ ...ationTimeoutInSecondsIntegrationTests.java | 50 ++++++++++++ 11 files changed, 373 insertions(+), 7 deletions(-) create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.java create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInDaysIntegrationTests.java create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInHoursIntegrationTests.java create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMillisecondsIntegrationTests.java create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMinutesIntegrationTests.java create mode 100644 spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInSecondsIntegrationTests.java diff --git a/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/SpringSessionAutoConfiguration.java b/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/SpringSessionAutoConfiguration.java index 622c27ef..7dd9c8c6 100644 --- a/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/SpringSessionAutoConfiguration.java +++ b/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/SpringSessionAutoConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.geode.boot.autoconfigure; import static org.springframework.data.gemfire.util.CollectionUtils.asSet; +import java.time.Duration; import java.util.Properties; import java.util.Set; @@ -40,6 +41,8 @@ import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.type.AnnotatedTypeMetadata; import org.springframework.geode.boot.autoconfigure.support.EnableSubscriptionConfiguration; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import org.springframework.session.Session; import org.springframework.session.data.gemfire.config.annotation.web.http.EnableGemFireHttpSession; import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; @@ -108,11 +111,13 @@ public class SpringSessionAutoConfiguration { if (isSet(environment, SPRING_SESSION_TIMEOUT_PROPERTY)) { springSessionProperties.setProperty(SPRING_SESSION_DATA_GEMFIRE_SESSION_EXPIRATION_TIMEOUT, - environment.getProperty(SPRING_SESSION_TIMEOUT_PROPERTY)); + toSecondsAsString(environment.getProperty(SPRING_SESSION_TIMEOUT_PROPERTY, Duration.class, + getDefaultSessionTimeout()))); } else if (isSet(environment, SERVER_SERVLET_SESSION_TIMEOUT_PROPERTY)) { springSessionProperties.setProperty(SPRING_SESSION_DATA_GEMFIRE_SESSION_EXPIRATION_TIMEOUT, - environment.getProperty(SERVER_SERVLET_SESSION_TIMEOUT_PROPERTY)); + toSecondsAsString(environment.getProperty(SERVER_SERVLET_SESSION_TIMEOUT_PROPERTY, + Duration.class, getDefaultSessionTimeout()))); } if (!springSessionProperties.isEmpty()) { @@ -127,6 +132,20 @@ public class SpringSessionAutoConfiguration { } } + protected static @NonNull Duration getDefaultSessionTimeout() { + return Duration.ofSeconds(GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS); + } + + protected static int toSeconds(@Nullable Duration duration) { + + return duration != null ? Long.valueOf(duration.getSeconds()).intValue() + : GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS; + } + + protected static @NonNull String toSecondsAsString(@Nullable Duration duration) { + return String.valueOf(toSeconds(duration)); + } + protected static boolean isNotSet(ConfigurableEnvironment environment, String propertyName) { return !isSet(environment, propertyName); } diff --git a/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionProperties.java b/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionProperties.java index 6deddb5c..a2bf3df8 100644 --- a/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionProperties.java +++ b/spring-geode-project/spring-geode-autoconfigure/src/main/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionProperties.java @@ -15,11 +15,14 @@ */ package org.springframework.geode.boot.autoconfigure.configuration; +import java.time.Duration; + import org.apache.geode.cache.RegionShortcut; import org.apache.geode.cache.client.ClientRegionShortcut; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.NestedConfigurationProperty; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; /** * Spring Boot {@link ConfigurationProperties} used to configure Spring Session for Apache Geode (SSDG) in order to @@ -190,6 +193,15 @@ public class SpringSessionProperties { public void setMaxInactiveIntervalSeconds(int maxInactiveIntervalSeconds) { this.maxInactiveIntervalSeconds = maxInactiveIntervalSeconds; } + + public void setMaxInactiveInterval(Duration duration) { + + int maxInactiveIntervalInSeconds = duration != null + ? Long.valueOf(duration.toSeconds()).intValue() + : GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS; + + setMaxInactiveIntervalSeconds(maxInactiveIntervalInSeconds); + } } public static class SessionRegionProperties { diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionPropertiesIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionPropertiesIntegrationTests.java index 4a8c7ef1..e2835a7a 100644 --- a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionPropertiesIntegrationTests.java +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/configuration/SpringSessionPropertiesIntegrationTests.java @@ -113,7 +113,7 @@ public class SpringSessionPropertiesIntegrationTests extends IntegrationTestsSup PdxSerializer pdxSerializer = this.clientCache.getPdxSerializer(); assertThat(pdxSerializer).isInstanceOf(PdxSerializerSessionSerializerAdapter.class); - assertThat(((PdxSerializerSessionSerializerAdapter) pdxSerializer).getSessionSerializer()) + assertThat(((PdxSerializerSessionSerializerAdapter) pdxSerializer).getSessionSerializer()) .isEqualTo(mockSessionSerializer); } diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.java new file mode 100644 index 00000000..80d6b544 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.java @@ -0,0 +1,78 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport; +import org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects; +import org.springframework.session.Session; +import org.springframework.session.SessionRepository; +import org.springframework.session.data.gemfire.GemFireOperationsSessionRepository; +import org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration; + +/** + * Abstract base test class for {@link Session} {@literal} in the configured {@literal time unit}, + * for example: seconds, minutes, etc. + * + * @author John Blum + * @see org.junit.Test + * @see org.springframework.boot.autoconfigure.SpringBootApplication + * @see org.springframework.data.gemfire.tests.integration.IntegrationTestsSupport + * @see org.springframework.data.gemfire.tests.mock.annotation.EnableGemFireMockObjects + * @see org.springframework.session.Session + * @see org.springframework.session.SessionRepository + * @see org.springframework.session.data.gemfire.GemFireOperationsSessionRepository + * @see org.springframework.session.data.gemfire.config.annotation.web.http.GemFireHttpSessionConfiguration + * @since 2.0.0 + */ +@SuppressWarnings("unused") +public abstract class AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests extends IntegrationTestsSupport { + + @Autowired + private GemFireHttpSessionConfiguration configuration; + + @Autowired + private SessionRepository repository; + + protected int getExpectedMaxInactiveIntervalInSeconds() { + return GemFireHttpSessionConfiguration.DEFAULT_MAX_INACTIVE_INTERVAL_IN_SECONDS; + } + + @Test + public void sessionTimeoutConfigurationIsCorrect() { + + int expectedMaxInactiveIntervalInSeconds = getExpectedMaxInactiveIntervalInSeconds(); + + assertThat(this.configuration).isNotNull(); + assertThat(this.configuration.getMaxInactiveIntervalInSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + assertThat(this.repository).isInstanceOf(GemFireOperationsSessionRepository.class); + + Session session = this.repository.createSession(); + + assertThat(session).isNotNull(); + assertThat(session.getMaxInactiveInterval().getSeconds()).isEqualTo(expectedMaxInactiveIntervalInSeconds); + } + + @SpringBootApplication + @EnableGemFireMockObjects + static class TestConfiguration { } + +} diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/CustomConfiguredSessionCachingIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/CustomConfiguredSessionCachingIntegrationTests.java index f7817edd..407acc1f 100644 --- a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/CustomConfiguredSessionCachingIntegrationTests.java +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/CustomConfiguredSessionCachingIntegrationTests.java @@ -109,7 +109,7 @@ public class CustomConfiguredSessionCachingIntegrationTests extends SpringBootAp private Function newSpringBootSessionPropertiesConfigurationFunction() { return springApplicationBuilder -> - springApplicationBuilder.properties(singletonProperties("spring.session.timeout", "300")); + springApplicationBuilder.properties(singletonProperties("spring.session.timeout", "300s")); } private Function newSpringSessionGemFirePropertiesConfigurationFunction() { @@ -134,7 +134,7 @@ public class CustomConfiguredSessionCachingIntegrationTests extends SpringBootAp private Function newWebServerSessionPropertiesConfigurationFunction() { return springApplicationBuilder -> - springApplicationBuilder.properties(singletonProperties("server.servlet.session.timeout", "3600")); + springApplicationBuilder.properties(singletonProperties("server.servlet.session.timeout", "3600s")); } @Override @@ -259,10 +259,10 @@ public class CustomConfiguredSessionCachingIntegrationTests extends SpringBootAp .isEqualTo(3600); } + //@SpringBootApplication @SpringBootConfiguration @EnableAutoConfiguration @EnableGemFireMockObjects - //@SpringBootApplication static class TestConfiguration { @Bean("MockSessionSerializer") diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationIntegrationTests.java index 8f2d54c7..93b96eeb 100644 --- a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationIntegrationTests.java +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationIntegrationTests.java @@ -17,6 +17,7 @@ package org.springframework.geode.boot.autoconfigure.session; import static org.assertj.core.api.Assertions.assertThat; +import java.time.Duration; import java.util.concurrent.TimeUnit; import jakarta.annotation.Resource; @@ -62,9 +63,10 @@ import org.springframework.test.context.junit4.SpringRunner; */ @RunWith(SpringRunner.class) @SpringBootTest( + classes = SessionExpirationIntegrationTests.TestConfiguration.class, properties = { "spring.session.data.gemfire.cache.client.region.shortcut=LOCAL", - "spring.session.timeout=1", + "spring.session.timeout=1s", }, webEnvironment = SpringBootTest.WebEnvironment.MOCK ) @@ -98,6 +100,7 @@ public class SessionExpirationIntegrationTests extends IntegrationTestsSupport { assertThat(session).isNotNull(); assertThat(session.getId()).isNotBlank(); assertThat(session.isExpired()).isFalse(); + assertThat(session.getMaxInactiveInterval()).isEqualTo(Duration.ofSeconds(1)); this.sessionRepository.save(session); diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInDaysIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInDaysIntegrationTests.java new file mode 100644 index 00000000..3db272d3 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInDaysIntegrationTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import java.time.Duration; + +import org.junit.runner.RunWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.session.Session; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests for {@link Session} {@literal expiration timeout} in {@literal days}. + * + * @author John Blum + * @see java.time.Duration + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.geode.boot.autoconfigure.session.AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests + * @see org.springframework.session.Session + * @see org.springframework.test.context.junit4.SpringRunner + * @since 2.0.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.TestConfiguration.class, + properties = "spring.session.timeout=5d", + webEnvironment = SpringBootTest.WebEnvironment.MOCK +) +public class SessionExpirationTimeoutInDaysIntegrationTests + extends AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests { + + @Override + protected int getExpectedMaxInactiveIntervalInSeconds() { + return Long.valueOf(Duration.ofDays(5).toSeconds()).intValue(); + } +} diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInHoursIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInHoursIntegrationTests.java new file mode 100644 index 00000000..3a1886a2 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInHoursIntegrationTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import java.time.Duration; + +import org.junit.runner.RunWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.session.Session; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests for {@link Session} {@literal expiration timeout} in {@literal hours}. + * + * @author John Blum + * @see java.time.Duration + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.geode.boot.autoconfigure.session.AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests + * @see org.springframework.session.Session + * @see org.springframework.test.context.junit4.SpringRunner + * @since 2.0.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.TestConfiguration.class, + properties = "spring.session.timeout=2h", + webEnvironment = SpringBootTest.WebEnvironment.MOCK +) +public class SessionExpirationTimeoutInHoursIntegrationTests + extends AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests{ + + @Override + protected int getExpectedMaxInactiveIntervalInSeconds() { + return Long.valueOf(Duration.ofHours(2).toSeconds()).intValue(); + } +} diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMillisecondsIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMillisecondsIntegrationTests.java new file mode 100644 index 00000000..19ce7246 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMillisecondsIntegrationTests.java @@ -0,0 +1,54 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.time.Duration; + +import org.junit.runner.RunWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.session.Session; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests for {@link Session} {@literal expiration timeout} in {@literal milliseconds}. + * + * @author John Blum + * @see java.time.Duration + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.geode.boot.autoconfigure.session.AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests + * @see org.springframework.session.Session + * @see org.springframework.test.context.junit4.SpringRunner + * @since 2.0.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.TestConfiguration.class, + properties = "spring.session.timeout=250ms", + webEnvironment = SpringBootTest.WebEnvironment.MOCK +) +public class SessionExpirationTimeoutInMillisecondsIntegrationTests + extends AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests { + + @Override + protected int getExpectedMaxInactiveIntervalInSeconds() { + int maxInactiveIntervalInSeconds = Long.valueOf(Duration.ofMillis(250).toSeconds()).intValue(); + assertThat(maxInactiveIntervalInSeconds).isZero(); + return maxInactiveIntervalInSeconds; + } +} diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMinutesIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMinutesIntegrationTests.java new file mode 100644 index 00000000..07578963 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInMinutesIntegrationTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import java.time.Duration; + +import org.junit.runner.RunWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.session.Session; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests for {@link Session} {@literal expiration timeout} in {@literal minutes}. + * + * @author John Blum + * @see java.time.Duration + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.geode.boot.autoconfigure.session.AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests + * @see org.springframework.session.Session + * @see org.springframework.test.context.junit4.SpringRunner + * @since 2.0.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.TestConfiguration.class, + properties = "spring.session.timeout=5m", + webEnvironment = SpringBootTest.WebEnvironment.MOCK +) +public class SessionExpirationTimeoutInMinutesIntegrationTests + extends AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests { + + @Override + protected int getExpectedMaxInactiveIntervalInSeconds() { + return Long.valueOf(Duration.ofMinutes(5).toSeconds()).intValue(); + } +} diff --git a/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInSecondsIntegrationTests.java b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInSecondsIntegrationTests.java new file mode 100644 index 00000000..010383b2 --- /dev/null +++ b/spring-geode-project/spring-geode-autoconfigure/src/test/java/org/springframework/geode/boot/autoconfigure/session/SessionExpirationTimeoutInSecondsIntegrationTests.java @@ -0,0 +1,50 @@ +/* + * Copyright 2017-present the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing + * permissions and limitations under the License. + */ +package org.springframework.geode.boot.autoconfigure.session; + +import java.time.Duration; + +import org.junit.runner.RunWith; + +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.session.Session; +import org.springframework.test.context.junit4.SpringRunner; + +/** + * Integration Tests for {@link Session} {@literal expiration timeout} in {@literal seconds}. + * + * @author John Blum + * @see java.time.Duration + * @see org.springframework.boot.test.context.SpringBootTest + * @see org.springframework.geode.boot.autoconfigure.session.AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests + * @see org.springframework.session.Session + * @see org.springframework.test.context.junit4.SpringRunner + * @since 2.0.0 + */ +@RunWith(SpringRunner.class) +@SpringBootTest( + classes = AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests.TestConfiguration.class, + properties = "spring.session.timeout=600s", + webEnvironment = SpringBootTest.WebEnvironment.MOCK +) +public class SessionExpirationTimeoutInSecondsIntegrationTests + extends AbstractSessionExpirationTimeoutInTimeUnitIntegrationTests { + + @Override + protected int getExpectedMaxInactiveIntervalInSeconds() { + return Long.valueOf(Duration.ofSeconds(600).toSeconds()).intValue(); + } +}