diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-hazelcast/src/test/java/smoketest/session/hazelcast/SampleSessionHazelcastApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-hazelcast/src/test/java/smoketest/session/hazelcast/SampleSessionHazelcastApplicationTests.java index 33e7dd68e4c..a48093d441e 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-hazelcast/src/test/java/smoketest/session/hazelcast/SampleSessionHazelcastApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-hazelcast/src/test/java/smoketest/session/hazelcast/SampleSessionHazelcastApplicationTests.java @@ -26,7 +26,6 @@ import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.client.TestRestTemplate; -import org.springframework.boot.web.server.LocalServerPort; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -36,7 +35,7 @@ import org.springframework.http.ResponseEntity; import static org.assertj.core.api.Assertions.assertThat; /** - * Tests for {@link SampleSessionHazelcastApplication}, + * Tests for {@link SampleSessionHazelcastApplication}. * * @author Susmitha Kandula * @author Madhura Bhave @@ -47,28 +46,24 @@ class SampleSessionHazelcastApplicationTests { @Autowired private TestRestTemplate restTemplate; - @LocalServerPort - private int port; - @Test @SuppressWarnings("unchecked") void sessionsEndpointShouldReturnUserSession() { - URI uri = URI.create("http://localhost:" + this.port + "/"); - ResponseEntity firstResponse = performRequest(this.restTemplate, uri, null); + URI uri = URI.create("/"); + ResponseEntity firstResponse = performRequest(uri, null); String cookie = firstResponse.getHeaders().getFirst("Set-Cookie"); - performRequest(this.restTemplate, uri, cookie).getBody(); - ResponseEntity> entity = (ResponseEntity>) (ResponseEntity) this.restTemplate - .withBasicAuth("user", "password").getForEntity("/actuator/sessions?username=user", Map.class); + performRequest(uri, cookie).getBody(); + ResponseEntity> entity = getSessions(); assertThat(entity).isNotNull(); assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK); List> sessions = (List>) entity.getBody().get("sessions"); assertThat(sessions.size()).isEqualTo(1); } - private ResponseEntity performRequest(TestRestTemplate restTemplate, URI uri, String cookie) { + private ResponseEntity performRequest(URI uri, String cookie) { HttpHeaders headers = getHeaders(cookie); RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); - return restTemplate.exchange(request, String.class); + return this.restTemplate.exchange(request, String.class); } private HttpHeaders getHeaders(String cookie) { @@ -86,4 +81,12 @@ class SampleSessionHazelcastApplicationTests { return "Basic " + Base64.getEncoder().encodeToString("user:password".getBytes()); } + @SuppressWarnings("unchecked") + private ResponseEntity> getSessions() { + HttpHeaders headers = getHeaders(null); + RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, + URI.create("/actuator/sessions?username=user")); + return (ResponseEntity>) (ResponseEntity) this.restTemplate.exchange(request, Map.class); + } + } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/build.gradle new file mode 100644 index 00000000000..9026d1ec12a --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/build.gradle @@ -0,0 +1,17 @@ +plugins { + id "java" + id "org.springframework.boot.conventions" +} + +description = "Spring Boot Session JDBC smoke test" + +dependencies { + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-actuator")) + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-security")) + implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web")) + runtimeOnly(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc")) + runtimeOnly("org.springframework.session:spring-session-jdbc") + runtimeOnly("com.h2database:h2") + + testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/java/smoketest/session/HelloRestController.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/java/smoketest/session/HelloRestController.java similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/java/smoketest/session/HelloRestController.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/java/smoketest/session/HelloRestController.java diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/java/smoketest/session/SampleSessionApplication.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/java/smoketest/session/SampleSessionJdbcApplication.java similarity index 88% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/java/smoketest/session/SampleSessionApplication.java rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/java/smoketest/session/SampleSessionJdbcApplication.java index 7a9f9bf9eb4..14bce7a2e3c 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/java/smoketest/session/SampleSessionApplication.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/java/smoketest/session/SampleSessionJdbcApplication.java @@ -20,10 +20,10 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class SampleSessionApplication { +public class SampleSessionJdbcApplication { public static void main(String[] args) { - SpringApplication.run(SampleSessionApplication.class); + SpringApplication.run(SampleSessionJdbcApplication.class); } } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/resources/application.properties b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/resources/application.properties similarity index 100% rename from spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/resources/application.properties rename to spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/main/resources/application.properties diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java new file mode 100644 index 00000000000..035bc528360 --- /dev/null +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-jdbc/src/test/java/smoketest/session/SampleSessionJdbcApplicationTests.java @@ -0,0 +1,105 @@ +/* + * Copyright 2012-2021 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 smoketest.session; + +import java.net.URI; +import java.util.Base64; +import java.util.List; +import java.util.Map; + +import org.junit.jupiter.api.Test; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.web.client.TestRestTemplate; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * Tests for {@link SampleSessionJdbcApplication}. + * + * @author Andy Wilkinson + * @author Vedran Pavic + * @author Madhura Bhave + */ +@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, + properties = "server.servlet.session.timeout:2") +class SampleSessionJdbcApplicationTests { + + @Autowired + private TestRestTemplate restTemplate; + + private static final URI ROOT_URI = URI.create("/"); + + @Test + void sessionExpiry() throws Exception { + ResponseEntity firstResponse = performRequest(ROOT_URI, null); + String sessionId1 = firstResponse.getBody(); + String cookie = firstResponse.getHeaders().getFirst("Set-Cookie"); + String sessionId2 = performRequest(ROOT_URI, cookie).getBody(); + assertThat(sessionId1).isEqualTo(sessionId2); + Thread.sleep(2100); + String loginPage = performRequest(ROOT_URI, cookie).getBody(); + assertThat(loginPage).containsIgnoringCase("login"); + } + + @Test + @SuppressWarnings("unchecked") + void sessionsEndpointShouldReturnUserSession() { + performRequest(ROOT_URI, null); + ResponseEntity> response = getSessions(); + assertThat(response).isNotNull(); + assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); + List> sessions = (List>) response.getBody().get("sessions"); + assertThat(sessions.size()).isEqualTo(1); + } + + private ResponseEntity performRequest(URI uri, String cookie) { + HttpHeaders headers = getHeaders(cookie); + RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); + return this.restTemplate.exchange(request, String.class); + } + + private HttpHeaders getHeaders(String cookie) { + HttpHeaders headers = new HttpHeaders(); + if (cookie != null) { + headers.set("Cookie", cookie); + } + else { + headers.set("Authorization", getBasicAuth()); + } + return headers; + } + + private String getBasicAuth() { + return "Basic " + Base64.getEncoder().encodeToString("user:password".getBytes()); + } + + @SuppressWarnings("unchecked") + private ResponseEntity> getSessions() { + HttpHeaders headers = getHeaders(null); + RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, + URI.create("/actuator/sessions?username=user")); + return (ResponseEntity>) (ResponseEntity) this.restTemplate.exchange(request, Map.class); + } + +} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-mongo/src/test/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-mongo/src/test/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java index c6340a1a339..a99500bd5bd 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-mongo/src/test/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-mongo/src/test/java/smoketest/session/mongodb/SampleSessionMongoApplicationTests.java @@ -49,10 +49,6 @@ import static org.assertj.core.api.Assertions.assertThat; @Testcontainers(disabledWithoutDocker = true) public class SampleSessionMongoApplicationTests { - private static final String USERNAME = "user"; - - private static final String PASSWORD = "password"; - @Autowired private TestRestTemplate restTemplate; @@ -68,7 +64,7 @@ public class SampleSessionMongoApplicationTests { @Test @SuppressWarnings("unchecked") void sessionsEndpointShouldReturnUserSessions() { - createSession(); + createSession(URI.create("/")); ResponseEntity> response = getSessions(); assertThat(response).isNotNull(); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -76,18 +72,21 @@ public class SampleSessionMongoApplicationTests { assertThat(sessions.size()).isEqualTo(1); } - private void createSession() { - URI uri = URI.create("/"); - HttpHeaders headers = new HttpHeaders(); - headers.setBasicAuth(USERNAME, PASSWORD); - RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); + private void createSession(URI uri) { + RequestEntity request = getRequestEntity(uri); this.restTemplate.exchange(request, String.class); } + private RequestEntity getRequestEntity(URI uri) { + HttpHeaders headers = new HttpHeaders(); + headers.setBasicAuth("user", "password"); + return new RequestEntity<>(headers, HttpMethod.GET, uri); + } + @SuppressWarnings("unchecked") private ResponseEntity> getSessions() { - return (ResponseEntity>) (ResponseEntity) this.restTemplate - .withBasicAuth(USERNAME, PASSWORD).getForEntity("/actuator/sessions?username=" + USERNAME, Map.class); + RequestEntity request = getRequestEntity(URI.create("/actuator/sessions?username=user")); + return (ResponseEntity>) (ResponseEntity) this.restTemplate.exchange(request, Map.class); } } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-redis/src/test/java/smoketest/session/redis/SampleSessionRedisApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-redis/src/test/java/smoketest/session/redis/SampleSessionRedisApplicationTests.java index 8ea78be57d0..8863197968b 100644 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-redis/src/test/java/smoketest/session/redis/SampleSessionRedisApplicationTests.java +++ b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-redis/src/test/java/smoketest/session/redis/SampleSessionRedisApplicationTests.java @@ -47,10 +47,6 @@ import static org.assertj.core.api.Assertions.assertThat; @Testcontainers(disabledWithoutDocker = true) public class SampleSessionRedisApplicationTests { - private static final String USERNAME = "user"; - - private static final String PASSWORD = "password"; - @Container static RedisContainer redis = new RedisContainer(); @@ -66,7 +62,7 @@ public class SampleSessionRedisApplicationTests { @Test @SuppressWarnings("unchecked") void sessionsEndpointShouldReturnUserSessions() { - createSession(); + createSession(URI.create("/")); ResponseEntity> response = this.getSessions(); assertThat(response).isNotNull(); assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK); @@ -74,18 +70,21 @@ public class SampleSessionRedisApplicationTests { assertThat(sessions.size()).isEqualTo(1); } - private void createSession() { - URI uri = URI.create("/"); - HttpHeaders headers = new HttpHeaders(); - headers.setBasicAuth(USERNAME, PASSWORD); - RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); + private void createSession(URI uri) { + RequestEntity request = getRequestEntity(uri); this.restTemplate.exchange(request, String.class); } + private RequestEntity getRequestEntity(URI uri) { + HttpHeaders headers = new HttpHeaders(); + headers.setBasicAuth("user", "password"); + return new RequestEntity<>(headers, HttpMethod.GET, uri); + } + @SuppressWarnings("unchecked") private ResponseEntity> getSessions() { - return (ResponseEntity>) (ResponseEntity) this.restTemplate - .withBasicAuth(USERNAME, PASSWORD).getForEntity("/actuator/sessions?username=" + USERNAME, Map.class); + RequestEntity request = getRequestEntity(URI.create("/actuator/sessions?username=user")); + return (ResponseEntity>) (ResponseEntity) this.restTemplate.exchange(request, Map.class); } } diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle deleted file mode 100644 index bd0ef38690d..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -plugins { - id "java" - id "org.springframework.boot.conventions" -} - -description = "Spring Boot Session smoke test" - -def sessionStores = [ - "hazelcast": [ - "com.hazelcast:hazelcast", - "org.springframework.session:spring-session-hazelcast" - ], - "jdbc": [ - project(":spring-boot-project:spring-boot-starters:spring-boot-starter-jdbc"), - "org.springframework.session:spring-session-jdbc" , - "com.h2database:h2" - ], - "mongodb": [ - project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb"), - "org.springframework.session:spring-session-data-mongodb" - ], - "redis": [ - project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis"), - "org.springframework.session:spring-session-data-redis" - ] -] - -dependencies { - implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-actuator")) - implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-security")) - implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web")) - - sessionStores[project.findProperty("sessionStore") ?: "jdbc"].each { runtimeOnly it } - - testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test")) -} diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/resources/hazelcast.xml b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/resources/hazelcast.xml deleted file mode 100644 index 9a988bf9789..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/main/resources/hazelcast.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - principalName - - - principalName - - - - - - - - - - diff --git a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/test/java/smoketest/session/SampleSessionApplicationTests.java b/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/test/java/smoketest/session/SampleSessionApplicationTests.java deleted file mode 100644 index 5d803a80601..00000000000 --- a/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session/src/test/java/smoketest/session/SampleSessionApplicationTests.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2012-2021 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 smoketest.session; - -import java.net.URI; -import java.util.Base64; - -import org.junit.jupiter.api.Test; - -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.boot.web.context.ServerPortInfoApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.RequestEntity; -import org.springframework.http.ResponseEntity; -import org.springframework.web.client.RestTemplate; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link SampleSessionApplication}. - * - * @author Andy Wilkinson - * @author Vedran Pavic - */ -class SampleSessionApplicationTests { - - @Test - void sessionExpiry() throws Exception { - ConfigurableApplicationContext context = createContext(); - String port = context.getEnvironment().getProperty("local.server.port"); - URI uri = URI.create("http://localhost:" + port + "/"); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity firstResponse = firstRequest(restTemplate, uri); - String sessionId1 = firstResponse.getBody(); - String cookie = firstResponse.getHeaders().getFirst("Set-Cookie"); - String sessionId2 = nextRequest(restTemplate, uri, cookie).getBody(); - assertThat(sessionId1).isEqualTo(sessionId2); - Thread.sleep(2100); - String loginPage = nextRequest(restTemplate, uri, cookie).getBody(); - assertThat(loginPage).containsIgnoringCase("login"); - } - - private ConfigurableApplicationContext createContext() { - ConfigurableApplicationContext context = new SpringApplicationBuilder().sources(SampleSessionApplication.class) - .properties("server.port:0", "server.servlet.session.timeout:2") - .initializers(new ServerPortInfoApplicationContextInitializer()).run(); - return context; - } - - private ResponseEntity firstRequest(RestTemplate restTemplate, URI uri) { - HttpHeaders headers = new HttpHeaders(); - headers.set("Authorization", getBasicAuth()); - RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); - return restTemplate.exchange(request, String.class); - } - - private ResponseEntity nextRequest(RestTemplate restTemplate, URI uri, String cookie) { - HttpHeaders headers = new HttpHeaders(); - headers.set("Cookie", cookie); - RequestEntity request = new RequestEntity<>(headers, HttpMethod.GET, uri); - return restTemplate.exchange(request, String.class); - } - - private String getBasicAuth() { - return "Basic " + Base64.getEncoder().encodeToString("user:password".getBytes()); - } - -}