Skip to content

Commit

Permalink
Introduce default keys for typesafe config extractor (#184)
Browse files Browse the repository at this point in the history
  • Loading branch information
suresh-prakash authored Nov 16, 2023
1 parent 5f58106 commit 49518cd
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@
import java.util.Arrays;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.experimental.Accessors;
import lombok.experimental.FieldDefaults;

@Getter
@Accessors(fluent = true)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@FieldDefaults(makeFinal = true, level = AccessLevel.PRIVATE)
public enum DatabaseType {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,19 @@

@Value
public class TypesafeConfigDatastoreConfigExtractor {
private static final String HOST_KEY = "host";
private static final String PORT_KEY = "port";
private static final String ENDPOINTS_KEY = "endpoints";
private static final String AUTH_DB_KEY = "authDb";
private static final String REPLICA_SET_KEY = "replicaSet";
private static final String DATABASE_KEY = "database";
private static final String USER_KEY = "user";
private static final String PASSWORD_KEY = "password";
private static final String APP_NAME_KEY = "appName";
private static final String MAX_POOL_SIZE_KEY = "maxPoolSize";
private static final String CONNECTION_ACCESS_TIMEOUT_KEY = "connectionAccessTimeout";
private static final String CONNECTION_IDLE_TIME_KEY = "connectionIdleTime";

@NonNull Config config;
DatastoreConfigBuilder datastoreConfigBuilder;
ConnectionConfigBuilder connectionConfigBuilder;
Expand Down Expand Up @@ -40,6 +53,20 @@ private TypesafeConfigDatastoreConfigExtractor(
this.connectionPoolConfigBuilder = ConnectionPoolConfig.builder();
this.datastoreConfigBuilder = DatastoreConfig.builder().type(type);
this.endpointBuilder = Endpoint.builder();

final String dataStoreType = type.type();
this.hostKey(dataStoreType + "." + HOST_KEY)
.portKey(dataStoreType + "." + PORT_KEY)
.keysForEndpoints(dataStoreType + "." + ENDPOINTS_KEY, HOST_KEY, PORT_KEY)
.authDatabaseKey(dataStoreType + "." + AUTH_DB_KEY)
.replicaSetKey(dataStoreType + "." + REPLICA_SET_KEY)
.databaseKey(dataStoreType + "." + DATABASE_KEY)
.usernameKey(dataStoreType + "." + USER_KEY)
.passwordKey(dataStoreType + "." + PASSWORD_KEY)
.applicationNameKey(APP_NAME_KEY)
.poolMaxConnectionsKey(MAX_POOL_SIZE_KEY)
.poolConnectionAccessTimeoutKey(CONNECTION_ACCESS_TIMEOUT_KEY)
.poolConnectionSurrenderTimeoutKey(CONNECTION_IDLE_TIME_KEY);
}

public static TypesafeConfigDatastoreConfigExtractor from(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,62 @@ void testBuildPostgresUsingTypeKey() {
assertEquals(expected, config);
}

@Test
void testBuildMongoUsingDefaultKeys() {
final ConnectionConfig config =
TypesafeConfigDatastoreConfigExtractor.from(
buildConfigMapUsingDefaultKeysForMongo(), TYPE_KEY)
.extract()
.connectionConfig();
final ConnectionConfig expected =
ConnectionConfig.builder()
.type(DatabaseType.MONGO)
.addEndpoint(Endpoint.builder().host(host).port(port).build())
.database(database)
.credentials(
ConnectionCredentials.builder()
.username(user)
.password(password)
.authDatabase(authDb)
.build())
.applicationName(appName)
.connectionPoolConfig(
ConnectionPoolConfig.builder()
.maxConnections(maxConnections)
.connectionAccessTimeout(accessTimeout)
.connectionSurrenderTimeout(surrenderTimeout)
.build())
.replicaSet(replicaSet)
.build();

assertEquals(expected, config);
}

@Test
void testBuildPostgresUsingDefaultKeys() {
final ConnectionConfig config =
TypesafeConfigDatastoreConfigExtractor.from(
buildConfigMapWithDefaultKeysForPostgres(), TYPE_KEY)
.extract()
.connectionConfig();
final ConnectionConfig expected =
ConnectionConfig.builder()
.type(DatabaseType.POSTGRES)
.addEndpoint(Endpoint.builder().host(host).port(port).build())
.database(database)
.credentials(ConnectionCredentials.builder().username(user).password(password).build())
.applicationName(appName)
.connectionPoolConfig(
ConnectionPoolConfig.builder()
.maxConnections(maxConnections)
.connectionAccessTimeout(accessTimeout)
.connectionSurrenderTimeout(surrenderTimeout)
.build())
.build();

assertEquals(expected, config);
}

private Config buildConfigMap() {
return ConfigFactory.parseMap(
Map.ofEntries(
Expand All @@ -261,6 +317,38 @@ private Config buildConfigMap() {
entry(CONNECTION_SURRENDER_TIMEOUT_KEY, surrenderTimeout)));
}

private Config buildConfigMapWithDefaultKeysForPostgres() {
return ConfigFactory.parseMap(
Map.ofEntries(
entry(TYPE_KEY, "postgres"),
entry("postgres.host", host),
entry("postgres.port", port),
entry("postgres.database", database),
entry("postgres.user", user),
entry("postgres.password", password),
entry("appName", appName),
entry("maxPoolSize", maxConnections),
entry("connectionAccessTimeout", accessTimeout),
entry("connectionIdleTime", surrenderTimeout)));
}

private Config buildConfigMapUsingDefaultKeysForMongo() {
return ConfigFactory.parseMap(
Map.ofEntries(
entry(TYPE_KEY, "mongo"),
entry("mongo.host", host),
entry("mongo.port", port),
entry("mongo.database", database),
entry("mongo.user", user),
entry("mongo.password", password),
entry("mongo.authDb", authDb),
entry("appName", appName),
entry("mongo.replicaSet", replicaSet),
entry("maxPoolSize", maxConnections),
entry("connectionAccessTimeout", accessTimeout),
entry("connectionIdleTime", surrenderTimeout)));
}

private Config buildPostgresConfigMapUsingEndpointsKey() {
return ConfigFactory.parseMap(
Map.ofEntries(
Expand Down

0 comments on commit 49518cd

Please sign in to comment.