Skip to content

Commit 1036f8a

Browse files
author
Angel L. Villalain Garcia
committed
Refactor test cases to account for feedback
Remove the usage of embedded mongo and redis in favor of test containers
1 parent 0bfc2d5 commit 1036f8a

File tree

5 files changed

+47
-69
lines changed

5 files changed

+47
-69
lines changed

spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-http-mongo/build.gradle

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ dependencies {
1111
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-mongodb"))
1212
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web"))
1313
implementation("org.springframework.session:spring-session-data-mongodb")
14-
15-
runtimeOnly("de.flapdoodle.embed:de.flapdoodle.embed.mongo")
16-
14+
testImplementation("org.testcontainers:mongodb")
15+
testImplementation("org.testcontainers:testcontainers")
16+
testImplementation("org.testcontainers:junit-jupiter")
17+
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
1718
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
1819
}

spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-http-mongo/src/test/java/smoketest/session/mongodb/SampleHttpSessionMongoApplicationTests.java

+21-7
Original file line numberDiff line numberDiff line change
@@ -17,36 +17,50 @@
1717
package smoketest.session.mongodb;
1818

1919
import java.net.URI;
20+
import java.time.Duration;
2021
import java.util.List;
2122
import java.util.Map;
2223

2324
import org.junit.jupiter.api.Test;
25+
import org.testcontainers.containers.MongoDBContainer;
26+
import org.testcontainers.junit.jupiter.Container;
27+
import org.testcontainers.junit.jupiter.Testcontainers;
2428

2529
import org.springframework.beans.factory.annotation.Autowired;
2630
import org.springframework.boot.test.context.SpringBootTest;
2731
import org.springframework.boot.test.web.client.TestRestTemplate;
28-
import org.springframework.boot.web.server.LocalServerPort;
32+
import org.springframework.boot.testsupport.testcontainers.DockerImageNames;
2933
import org.springframework.http.HttpHeaders;
3034
import org.springframework.http.HttpMethod;
3135
import org.springframework.http.HttpStatus;
3236
import org.springframework.http.RequestEntity;
3337
import org.springframework.http.ResponseEntity;
38+
import org.springframework.test.context.DynamicPropertyRegistry;
39+
import org.springframework.test.context.DynamicPropertySource;
3440

3541
import static org.assertj.core.api.Assertions.assertThat;
3642

37-
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
38-
properties = { "spring.security.user.name=" + SampleHttpSessionMongoApplicationTests.USERNAME,
39-
"spring.security.user.password=" + SampleHttpSessionMongoApplicationTests.PASSWORD })
43+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
44+
@Testcontainers(disabledWithoutDocker = true)
4045
public class SampleHttpSessionMongoApplicationTests {
4146

4247
static final String USERNAME = "user";
4348
static final String PASSWORD = "password";
49+
static final String ROOT = "/";
50+
51+
@Container
52+
static MongoDBContainer mongo = new MongoDBContainer(DockerImageNames.mongo()).withStartupAttempts(3)
53+
.withStartupTimeout(Duration.ofMinutes(2));
4454

4555
@Autowired
4656
private TestRestTemplate template;
4757

48-
@LocalServerPort
49-
private int port;
58+
@DynamicPropertySource
59+
static void applicationProperties(DynamicPropertyRegistry registry) {
60+
registry.add("spring.security.user.name", () -> USERNAME);
61+
registry.add("spring.security.user.password", () -> PASSWORD);
62+
registry.add("spring.data.mongodb.uri", mongo::getReplicaSetUrl);
63+
}
5064

5165
@Test
5266
@SuppressWarnings("unchecked")
@@ -60,7 +74,7 @@ void sessionsEndpointShouldReturnUserSessions() {
6074
}
6175

6276
private void createSession() {
63-
URI uri = URI.create("http://localhost:" + this.port + "/");
77+
URI uri = URI.create(ROOT);
6478
HttpHeaders headers = new HttpHeaders();
6579
headers.setBasicAuth(USERNAME, PASSWORD);
6680
RequestEntity<Object> request = new RequestEntity<>(headers, HttpMethod.GET, uri);

spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-http-redis/build.gradle

+3-4
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ dependencies {
1111
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-data-redis"))
1212
implementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-web"))
1313
implementation("org.springframework.session:spring-session-data-redis")
14-
15-
testImplementation("it.ozimov:embedded-redis:0.7.3") {
16-
exclude group: "org.slf4j", module: "slf4j-simple"
17-
}
14+
testImplementation("org.testcontainers:testcontainers")
15+
testImplementation("org.testcontainers:junit-jupiter")
16+
testImplementation(project(":spring-boot-project:spring-boot-tools:spring-boot-test-support"))
1817
testImplementation(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-test"))
1918
}

spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-http-redis/src/test/java/smoketest/session/redis/SampleHttpSessionRedisApplicationTests.java

+19-9
Original file line numberDiff line numberDiff line change
@@ -21,34 +21,44 @@
2121
import java.util.Map;
2222

2323
import org.junit.jupiter.api.Test;
24+
import org.testcontainers.junit.jupiter.Container;
25+
import org.testcontainers.junit.jupiter.Testcontainers;
2426

2527
import org.springframework.beans.factory.annotation.Autowired;
2628
import org.springframework.boot.test.context.SpringBootTest;
2729
import org.springframework.boot.test.web.client.TestRestTemplate;
28-
import org.springframework.boot.web.server.LocalServerPort;
30+
import org.springframework.boot.testsupport.testcontainers.RedisContainer;
2931
import org.springframework.http.HttpHeaders;
3032
import org.springframework.http.HttpMethod;
3133
import org.springframework.http.HttpStatus;
3234
import org.springframework.http.RequestEntity;
3335
import org.springframework.http.ResponseEntity;
36+
import org.springframework.test.context.DynamicPropertyRegistry;
37+
import org.springframework.test.context.DynamicPropertySource;
3438

3539
import static org.assertj.core.api.Assertions.assertThat;
3640

37-
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
38-
properties = { "spring.security.user.name=" + SampleHttpSessionRedisApplicationTests.USERNAME,
39-
"spring.security.user.password=" + SampleHttpSessionRedisApplicationTests.PASSWORD,
40-
"spring.redis.host=localhost", "spring.redis.port=6379" },
41-
classes = TestRedisConfiguration.class)
41+
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
42+
@Testcontainers(disabledWithoutDocker = true)
4243
public class SampleHttpSessionRedisApplicationTests {
4344

4445
static final String USERNAME = "user";
4546
static final String PASSWORD = "password";
47+
static final String ROOT = "/";
48+
49+
@Container
50+
static RedisContainer redis = new RedisContainer();
4651

4752
@Autowired
4853
private TestRestTemplate template;
4954

50-
@LocalServerPort
51-
private int port;
55+
@DynamicPropertySource
56+
static void applicationProperties(DynamicPropertyRegistry registry) {
57+
registry.add("spring.security.user.name", () -> USERNAME);
58+
registry.add("spring.security.user.password", () -> PASSWORD);
59+
registry.add("spring.redis.host", redis::getHost);
60+
registry.add("spring.redis.port", redis::getFirstMappedPort);
61+
}
5262

5363
@Test
5464
@SuppressWarnings("unchecked")
@@ -62,7 +72,7 @@ void sessionsEndpointShouldReturnUserSessions() {
6272
}
6373

6474
private void createSession() {
65-
URI uri = URI.create("http://localhost:" + this.port + "/");
75+
URI uri = URI.create(ROOT);
6676
HttpHeaders headers = new HttpHeaders();
6777
headers.setBasicAuth(USERNAME, PASSWORD);
6878
RequestEntity<Object> request = new RequestEntity<>(headers, HttpMethod.GET, uri);

spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-session-http-redis/src/test/java/smoketest/session/redis/TestRedisConfiguration.java

-46
This file was deleted.

0 commit comments

Comments
 (0)