Skip to content

Commit 9329f35

Browse files
authored
Merge pull request #8 from kapetacom/db_config
allow more configuration of the database source
2 parents 8670510 + 1c8ce0d commit 9329f35

File tree

3 files changed

+131
-3
lines changed

3 files changed

+131
-3
lines changed

pom.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.kapeta</groupId>
88
<artifactId>nosql-mongodb</artifactId>
9-
<version>1.1.1</version>
9+
<version>1.1.2</version>
1010

1111
<name>${project.groupId}:${project.artifactId}</name>
1212
<description>MongoDB support for Kapeta Spring Boot SDK</description>
@@ -158,6 +158,11 @@
158158
<version>[1.0,2.0)</version>
159159
<scope>provided</scope>
160160
</dependency>
161+
<dependency>
162+
<groupId>org.junit.jupiter</groupId>
163+
<artifactId>junit-jupiter</artifactId>
164+
<scope>test</scope>
165+
</dependency>
161166
</dependencies>
162167

163168
</project>

src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,12 +87,25 @@ private MongoProperties createMongoProperties(String databaseName, String dbAuth
8787
return properties;
8888
}
8989

90-
private MongoProperties createMongoUriProperties(String databaseName, String dbAuthDB, ResourceInfo mongoInfo) {
90+
protected MongoProperties createMongoUriProperties(String databaseName, String dbAuthDB, ResourceInfo mongoInfo) {
9191
String username = mongoInfo.getCredentials().get("username");
9292
String password = mongoInfo.getCredentials().getOrDefault("password","");
9393

94-
String uri = String.format("mongodb+srv://%s:%s@%s/%s?ssl=false&authSource=%s", username, password, mongoInfo.getHost(), databaseName, dbAuthDB);
94+
String ssl = "ssl=false";
95+
if(mongoInfo.getOptions().containsKey("ssl")) {
96+
if (Boolean.parseBoolean(mongoInfo.getOptions().get("ssl").toString())) {
97+
ssl = "ssl=true";
98+
}
99+
}
100+
String dbAuthDBStr = String.format("&authSource=%s", dbAuthDB);
101+
if (StringUtils.isEmpty(dbAuthDB)) {
102+
dbAuthDBStr = "";
103+
}
104+
105+
String uri = String.format("mongodb+srv://%s:%s@%s/%s?%s%s", username, password, mongoInfo.getHost(), databaseName,ssl, dbAuthDBStr);
106+
// Override with environment variable if set
95107
if(!StringUtils.isEmpty(System.getenv("SPRING_DATA_MONGODB_URI"))) {
108+
log.info("Overriding MongoDB URI with environment variable SPRING_DATA_MONGODB_URI");
96109
uri = System.getenv("SPRING_DATA_MONGODB_URI");
97110
}
98111

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/*
2+
* Copyright 2023 Kapeta Inc.
3+
* SPDX-License-Identifier: MIT
4+
*/
5+
package com.kapeta.spring.mongo;
6+
7+
import com.kapeta.spring.config.providers.TestConfigProvider;
8+
import com.kapeta.spring.config.providers.types.ResourceInfo;
9+
import org.junit.jupiter.api.Test;
10+
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
11+
12+
13+
import java.util.HashMap;
14+
import java.util.Map;
15+
16+
import static org.junit.jupiter.api.Assertions.assertEquals;
17+
18+
public class AbstractMongoDBConfigTest {
19+
20+
21+
@Test
22+
public void testCreateMongoUriProperties() {
23+
Map<String, String> credentials = new HashMap<>();
24+
credentials.put("username", "testUser");
25+
credentials.put("password", "testPass");
26+
27+
Map<String, Object> options = new HashMap<>();
28+
options.put("ssl", "true");
29+
30+
TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
31+
32+
ResourceInfo resourceInfo = new ResourceInfo();
33+
resourceInfo.setCredentials(credentials);
34+
resourceInfo.setOptions(options);
35+
resourceInfo.setHost("testHost");
36+
37+
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
38+
39+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true&authSource=admin", properties.getUri());
40+
}
41+
42+
43+
@Test
44+
public void testSSLFalse() {
45+
Map<String, String> credentials = new HashMap<>();
46+
credentials.put("username", "testUser");
47+
credentials.put("password", "testPass");
48+
49+
Map<String, Object> options = new HashMap<>();
50+
options.put("ssl", "false");
51+
52+
TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
53+
54+
ResourceInfo resourceInfo = new ResourceInfo();
55+
resourceInfo.setCredentials(credentials);
56+
resourceInfo.setOptions(options);
57+
resourceInfo.setHost("testHost");
58+
59+
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
60+
61+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
62+
}
63+
64+
@Test
65+
public void testEmptySSLConfig() {
66+
Map<String, String> credentials = new HashMap<>();
67+
credentials.put("username", "testUser");
68+
credentials.put("password", "testPass");
69+
70+
Map<String, Object> options = new HashMap<>();
71+
72+
TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
73+
74+
ResourceInfo resourceInfo = new ResourceInfo();
75+
resourceInfo.setCredentials(credentials);
76+
resourceInfo.setOptions(options);
77+
resourceInfo.setHost("testHost");
78+
79+
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
80+
81+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
82+
}
83+
84+
@Test
85+
public void testEmptyAuthSource() {
86+
Map<String, String> credentials = new HashMap<>();
87+
credentials.put("username", "testUser");
88+
credentials.put("password", "testPass");
89+
90+
Map<String, Object> options = new HashMap<>();
91+
options.put("ssl", "true");
92+
93+
TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
94+
95+
ResourceInfo resourceInfo = new ResourceInfo();
96+
resourceInfo.setCredentials(credentials);
97+
resourceInfo.setOptions(options);
98+
resourceInfo.setHost("testHost");
99+
100+
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "", resourceInfo);
101+
102+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true", properties.getUri());
103+
}
104+
105+
private class TestMongoDBConfig extends AbstractMongoDBConfig {
106+
public TestMongoDBConfig(String resourceName) {
107+
super(resourceName);
108+
}
109+
}
110+
}

0 commit comments

Comments
 (0)