Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.kapeta</groupId>
<artifactId>nosql-mongodb</artifactId>
<version>1.1.1</version>
<version>1.1.2</version>

<name>${project.groupId}:${project.artifactId}</name>
<description>MongoDB support for Kapeta Spring Boot SDK</description>
Expand Down Expand Up @@ -158,6 +158,11 @@
<version>[1.0,2.0)</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

</project>
17 changes: 15 additions & 2 deletions src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
}

Expand Down
110 changes: 110 additions & 0 deletions src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
Original file line number Diff line number Diff line change
@@ -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<String, String> credentials = new HashMap<>();
credentials.put("username", "testUser");
credentials.put("password", "testPass");

Map<String, Object> 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<String, String> credentials = new HashMap<>();
credentials.put("username", "testUser");
credentials.put("password", "testPass");

Map<String, Object> 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<String, String> credentials = new HashMap<>();
credentials.put("username", "testUser");
credentials.put("password", "testPass");

Map<String, Object> 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<String, String> credentials = new HashMap<>();
credentials.put("username", "testUser");
credentials.put("password", "testPass");

Map<String, Object> 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);
}
}
}
Loading