Skip to content

Commit 208b8eb

Browse files
author
admitrov
committed
build(deps): add ClusteredEmbeddedRedisLettuceTest for Redis cluster configuration with Lettuce
1 parent 233d060 commit 208b8eb

File tree

7 files changed

+90
-16
lines changed

7 files changed

+90
-16
lines changed

embedded-mongodb/pom.xml

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
55
<modelVersion>4.0.0</modelVersion>
66

7-
87
<parent>
98
<artifactId>testcontainers-spring-boot-parent</artifactId>
109
<groupId>com.playtika.testcontainers</groupId>
@@ -15,6 +14,10 @@
1514
<name>embedded-mongodb</name>
1615
<artifactId>embedded-mongodb</artifactId>
1716

17+
<properties>
18+
<skipTests>true</skipTests>
19+
</properties>
20+
1821
<dependencies>
1922
<dependency>
2023
<groupId>com.playtika.testcontainers</groupId>
@@ -34,5 +37,33 @@
3437
<artifactId>mongodb-driver-sync</artifactId>
3538
<optional>true</optional>
3639
</dependency>
40+
<dependency>
41+
<groupId>org.springframework.boot</groupId>
42+
<artifactId>spring-boot-autoconfigure</artifactId>
43+
<scope>provided</scope>
44+
</dependency>
45+
<!-- Test dependencies -->
46+
<dependency>
47+
<groupId>org.springframework.cloud</groupId>
48+
<artifactId>spring-cloud-starter-bootstrap</artifactId>
49+
<scope>test</scope>
50+
<exclusions>
51+
<exclusion>
52+
<groupId>org.springframework.boot</groupId>
53+
<artifactId>spring-boot-starter-logging</artifactId>
54+
</exclusion>
55+
</exclusions>
56+
</dependency>
57+
<dependency>
58+
<groupId>org.springframework.boot</groupId>
59+
<artifactId>spring-boot-starter-data-mongodb</artifactId>
60+
<scope>test</scope>
61+
<exclusions>
62+
<exclusion>
63+
<groupId>org.springframework.boot</groupId>
64+
<artifactId>spring-boot-starter-logging</artifactId>
65+
</exclusion>
66+
</exclusions>
67+
</dependency>
3768
</dependencies>
38-
</project>
69+
</project>

embedded-mongodb/src/main/java/com/playtika/testcontainer/mongodb/EmbeddedMongodbBootstrapConfiguration.java

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import org.springframework.boot.context.properties.EnableConfigurationProperties;
1616
import org.springframework.context.annotation.Bean;
1717
import org.springframework.context.annotation.Configuration;
18+
import org.springframework.core.Ordered;
19+
import org.springframework.core.annotation.Order;
1820
import org.springframework.core.env.ConfigurableEnvironment;
1921
import org.springframework.core.env.MapPropertySource;
2022
import org.testcontainers.containers.GenericContainer;
@@ -23,12 +25,14 @@
2325
import org.testcontainers.containers.wait.strategy.LogMessageWaitStrategy;
2426

2527
import java.util.LinkedHashMap;
28+
import java.util.Map;
2629
import java.util.Optional;
2730

2831
import static com.playtika.testcontainer.common.utils.ContainerUtils.configureCommonsAndStart;
2932
import static com.playtika.testcontainer.mongodb.MongodbProperties.BEAN_NAME_EMBEDDED_MONGODB;
3033

3134
@Slf4j
35+
@Order(Ordered.HIGHEST_PRECEDENCE)
3236
@Configuration
3337
@ConditionalOnExpression("${embedded.containers.enabled:true}")
3438
@AutoConfigureAfter(DockerPresenceBootstrapConfiguration.class)
@@ -58,6 +62,12 @@ ToxiproxyClientProxy mongodbContainerProxy(ToxiproxyClient toxiproxyClient,
5862

5963
ToxiproxyHelper.registerProxyEnvironment(proxy, "embedded.mongodb", "embeddedMongodbToxiProxyInfo", environment);
6064

65+
// Set MongoDB URI with ToxiProxy port
66+
String mongoUri = buildMongoUriWithToxiProxy(proxy, properties);
67+
MapPropertySource uriPropertySource = new MapPropertySource("embeddedMongoUriToxiProxy",
68+
Map.of("spring.data.mongodb.uri", mongoUri));
69+
environment.getPropertySources().addFirst(uriPropertySource);
70+
6171
return proxy;
6272
}
6373

@@ -83,7 +93,7 @@ public GenericContainer<?> mongodb(ConfigurableEnvironment environment,
8393
}
8494

8595
@Bean
86-
@ConditionalOnMissingBean
96+
@ConditionalOnMissingBean(MongodbStatusCheck.class)
8797
MongodbStatusCheck mongodbStartupCheckStrategy(MongodbProperties properties) {
8898
return new MongodbStatusCheck(properties);
8999
}
@@ -101,9 +111,31 @@ private void registerMongodbEnvironment(GenericContainer<?> mongodb, Configurabl
101111
map.put("embedded.mongodb.networkAlias", MONGODB_NETWORK_ALIAS);
102112
map.put("embedded.mongodb.internalPort", properties.getPort());
103113

104-
log.info("Started mongodb. Connection Details: {}, Connection URI: mongodb://{}:{}/{}", map, host, mappedPort, properties.getDatabase());
114+
// Set MongoDB URI directly to ensure it's available before MongoDB auto-configuration reads it
115+
String mongoUri = buildMongoUri(host, mappedPort, properties);
116+
map.put("spring.data.mongodb.uri", mongoUri);
117+
118+
log.info("Started mongodb. Connection Details: {}, Connection URI: {}", map, mongoUri);
105119

106120
MapPropertySource propertySource = new MapPropertySource("embeddedMongoInfo", map);
107121
environment.getPropertySources().addFirst(propertySource);
108122
}
123+
124+
private String buildMongoUri(String host, Integer port, MongodbProperties properties) {
125+
if (properties.getUsername() != null && properties.getPassword() != null) {
126+
return String.format("mongodb://%s:%s@%s:%d/%s?authSource=admin",
127+
properties.getUsername(), properties.getPassword(), host, port, properties.getDatabase());
128+
}
129+
return String.format("mongodb://%s:%d/%s", host, port, properties.getDatabase());
130+
}
131+
132+
private String buildMongoUriWithToxiProxy(ToxiproxyClientProxy proxy, MongodbProperties properties) {
133+
String host = proxy.getContainerIpAddress();
134+
Integer port = proxy.getProxyPort();
135+
if (properties.getUsername() != null && properties.getPassword() != null) {
136+
return String.format("mongodb://%s:%s@%s:%d/%s?authSource=admin",
137+
properties.getUsername(), properties.getPassword(), host, port, properties.getDatabase());
138+
}
139+
return String.format("mongodb://%s:%d/%s", host, port, properties.getDatabase());
140+
}
109141
}

embedded-mongodb/src/main/java/com/playtika/testcontainer/mongodb/EmbeddedMongodbDependenciesAutoConfiguration.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.playtika.testcontainer.mongodb;
22

3+
import com.mongodb.client.MongoClient;
34
import com.playtika.testcontainer.common.spring.DependsOnPostProcessor;
45
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
56
import org.springframework.boot.autoconfigure.AutoConfiguration;
@@ -8,6 +9,7 @@
89
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
910
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1011
import org.springframework.context.annotation.Bean;
12+
import org.springframework.context.annotation.Configuration;
1113
import org.springframework.data.mongodb.core.MongoTemplate;
1214

1315
import static com.playtika.testcontainer.mongodb.MongodbProperties.BEAN_NAME_EMBEDDED_MONGODB;
@@ -19,8 +21,20 @@
1921
@ConditionalOnProperty(name = "embedded.mongodb.enabled", havingValue = "true", matchIfMissing = true)
2022
public class EmbeddedMongodbDependenciesAutoConfiguration {
2123

22-
@Bean
23-
public static BeanFactoryPostProcessor mongoClientDependencyPostProcessor() {
24-
return new DependsOnPostProcessor(MongoTemplate.class, new String[]{BEAN_NAME_EMBEDDED_MONGODB});
24+
@Configuration
25+
@ConditionalOnClass(MongoClient.class)
26+
public static class EmbeddedMongodbMongoClientDependencyContext {
27+
@Bean
28+
public static BeanFactoryPostProcessor mongoClientDependencyPostProcessor() {
29+
return new DependsOnPostProcessor(MongoClient.class, new String[]{BEAN_NAME_EMBEDDED_MONGODB});
30+
}
31+
}
32+
33+
@Configuration
34+
public static class EmbeddedMongodbMongoTemplateDependencyContext {
35+
@Bean
36+
public static BeanFactoryPostProcessor mongoTemplateDependencyPostProcessor() {
37+
return new DependsOnPostProcessor(MongoTemplate.class, new String[]{BEAN_NAME_EMBEDDED_MONGODB});
38+
}
2539
}
2640
}

embedded-mongodb/src/main/java/com/playtika/testcontainer/mongodb/MongodbProperties.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,11 @@ public MongodbProperties() {
3131
this.setCapabilities(List.of(Capability.ALL));
3232
}
3333

34+
// https://hub.docker.com/_/mongo
3435
@Override
3536
public String getDefaultDockerImage() {
3637
// Please don`t remove this comment.
3738
// renovate: datasource=docker
38-
// https://hub.docker.com/_/mongo
3939
return "mongodb/mongodb-community-server:8.0.10-ubuntu2204";
4040
}
4141
}

embedded-mongodb/src/test/java/com/playtika/testcontainer/mongodb/EmbeddedMongodbBootstrapAuthConfigurationTest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import org.springframework.core.env.ConfigurableEnvironment;
1212
import org.springframework.data.annotation.Id;
1313
import org.springframework.data.mongodb.core.MongoTemplate;
14+
import org.springframework.test.context.ActiveProfiles;
1415

1516
import java.time.Instant;
1617
import java.util.UUID;
@@ -21,16 +22,11 @@
2122
@SpringBootTest(
2223
properties = {
2324
"embedded.mongodb.username=root",
24-
"embedded.mongodb.password=letmein",
25-
"spring.data.mongodb.host=${embedded.mongodb.host}",
26-
"spring.data.mongodb.port=${embedded.mongodb.port}",
27-
"spring.data.mongodb.username=${embedded.mongodb.username}",
28-
"spring.data.mongodb.password=${embedded.mongodb.password}",
29-
"spring.data.mongodb.database=${embedded.mongodb.database}",
30-
"spring.data.mongodb.authentication-database=admin"
25+
"embedded.mongodb.password=letmein"
3126
}
3227
,classes = EmbeddedMongodbBootstrapAuthConfigurationTest.TestConfiguration.class
3328
)
29+
@ActiveProfiles("test")
3430
public class EmbeddedMongodbBootstrapAuthConfigurationTest {
3531

3632
@Autowired

embedded-mongodb/src/test/java/com/playtika/testcontainer/mongodb/EmbeddedMongodbBootstrapConfigurationTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.springframework.core.env.ConfigurableEnvironment;
1414
import org.springframework.data.annotation.Id;
1515
import org.springframework.data.mongodb.core.MongoTemplate;
16+
import org.springframework.test.context.ActiveProfiles;
1617

1718
import java.time.Instant;
1819
import java.util.UUID;
@@ -23,11 +24,11 @@
2324
@Slf4j
2425
@SpringBootTest(
2526
properties = {
26-
"spring.data.mongodb.uri=mongodb://${embedded.mongodb.host}:${embedded.mongodb.toxiproxy.port}/${embedded.mongodb.database}",
2727
"embedded.toxiproxy.proxies.mongodb.enabled=true"
2828
}
2929
, classes = EmbeddedMongodbBootstrapConfigurationTest.TestConfiguration.class
3030
)
31+
@ActiveProfiles("enabled")
3132
public class EmbeddedMongodbBootstrapConfigurationTest {
3233

3334
@Autowired

embedded-mongodb/src/test/resources/application-test.yml

Whitespace-only changes.

0 commit comments

Comments
 (0)