diff --git a/pom.xml b/pom.xml
index f189ba2..94d27b1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.kapeta
nosql-mongodb
- 1.1.1
+ 1.1.2
${project.groupId}:${project.artifactId}
MongoDB support for Kapeta Spring Boot SDK
@@ -158,6 +158,11 @@
[1.0,2.0)
provided
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
\ No newline at end of file
diff --git a/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java b/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
index 1b7b079..8940e67 100644
--- a/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
+++ b/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
@@ -87,12 +87,25 @@ private MongoProperties createMongoProperties(String databaseName, String dbAuth
return properties;
}
- private MongoProperties createMongoUriProperties(String databaseName, String dbAuthDB, ResourceInfo mongoInfo) {
+ protected MongoProperties createMongoUriProperties(String databaseName, String dbAuthDB, ResourceInfo mongoInfo) {
String username = mongoInfo.getCredentials().get("username");
String password = mongoInfo.getCredentials().getOrDefault("password","");
- String uri = String.format("mongodb+srv://%s:%s@%s/%s?ssl=false&authSource=%s", username, password, mongoInfo.getHost(), databaseName, dbAuthDB);
+ String ssl = "ssl=false";
+ if(mongoInfo.getOptions().containsKey("ssl")) {
+ if (Boolean.parseBoolean(mongoInfo.getOptions().get("ssl").toString())) {
+ ssl = "ssl=true";
+ }
+ }
+ String dbAuthDBStr = String.format("&authSource=%s", dbAuthDB);
+ if (StringUtils.isEmpty(dbAuthDB)) {
+ dbAuthDBStr = "";
+ }
+
+ String uri = String.format("mongodb+srv://%s:%s@%s/%s?%s%s", username, password, mongoInfo.getHost(), databaseName,ssl, dbAuthDBStr);
+ // Override with environment variable if set
if(!StringUtils.isEmpty(System.getenv("SPRING_DATA_MONGODB_URI"))) {
+ log.info("Overriding MongoDB URI with environment variable SPRING_DATA_MONGODB_URI");
uri = System.getenv("SPRING_DATA_MONGODB_URI");
}
diff --git a/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java b/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
new file mode 100644
index 0000000..7a9ff45
--- /dev/null
+++ b/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2023 Kapeta Inc.
+ * SPDX-License-Identifier: MIT
+ */
+package com.kapeta.spring.mongo;
+
+import com.kapeta.spring.config.providers.TestConfigProvider;
+import com.kapeta.spring.config.providers.types.ResourceInfo;
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.autoconfigure.mongo.MongoProperties;
+
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AbstractMongoDBConfigTest {
+
+
+ @Test
+ public void testCreateMongoUriProperties() {
+ Map credentials = new HashMap<>();
+ credentials.put("username", "testUser");
+ credentials.put("password", "testPass");
+
+ Map options = new HashMap<>();
+ options.put("ssl", "true");
+
+ TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
+
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.setCredentials(credentials);
+ resourceInfo.setOptions(options);
+ resourceInfo.setHost("testHost");
+
+ MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
+
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true&authSource=admin", properties.getUri());
+ }
+
+
+ @Test
+ public void testSSLFalse() {
+ Map credentials = new HashMap<>();
+ credentials.put("username", "testUser");
+ credentials.put("password", "testPass");
+
+ Map options = new HashMap<>();
+ options.put("ssl", "false");
+
+ TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
+
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.setCredentials(credentials);
+ resourceInfo.setOptions(options);
+ resourceInfo.setHost("testHost");
+
+ MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
+
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
+ }
+
+ @Test
+ public void testEmptySSLConfig() {
+ Map credentials = new HashMap<>();
+ credentials.put("username", "testUser");
+ credentials.put("password", "testPass");
+
+ Map options = new HashMap<>();
+
+ TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
+
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.setCredentials(credentials);
+ resourceInfo.setOptions(options);
+ resourceInfo.setHost("testHost");
+
+ MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
+
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
+ }
+
+ @Test
+ public void testEmptyAuthSource() {
+ Map credentials = new HashMap<>();
+ credentials.put("username", "testUser");
+ credentials.put("password", "testPass");
+
+ Map options = new HashMap<>();
+ options.put("ssl", "true");
+
+ TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
+
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.setCredentials(credentials);
+ resourceInfo.setOptions(options);
+ resourceInfo.setHost("testHost");
+
+ MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "", resourceInfo);
+
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true", properties.getUri());
+ }
+
+ private class TestMongoDBConfig extends AbstractMongoDBConfig {
+ public TestMongoDBConfig(String resourceName) {
+ super(resourceName);
+ }
+ }
+}
\ No newline at end of file