Skip to content

Commit 29bfa6d

Browse files
authored
Fix Validate JdbcUrls with additional test (#15190)
* Fixed uncalled jdbcUrl validation and added test for exception * Removed unused constants * Converted assertCustomParamtersDontOverwriteDefaultParameters to protected static for testing and host/port retrieval
1 parent ff32bea commit 29bfa6d

File tree

3 files changed

+37
-12
lines changed

3 files changed

+37
-12
lines changed

airbyte-integrations/connectors/source-jdbc/src/main/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,7 @@ protected DataSource createDataSource(final JsonNode config) {
299299
jdbcConfig.has(JdbcUtils.PASSWORD_KEY) ? jdbcConfig.get(JdbcUtils.PASSWORD_KEY).asText() : null,
300300
driverClass,
301301
jdbcConfig.get(JdbcUtils.JDBC_URL_KEY).asText(),
302-
JdbcUtils.parseJdbcParameters(jdbcConfig, JdbcUtils.CONNECTION_PROPERTIES_KEY, getJdbcParameterDelimiter()));
302+
getConnectionProperties(config));
303303
// Record the data source so that it can be closed.
304304
dataSources.add(dataSource);
305305
return dataSource;
@@ -339,7 +339,7 @@ protected Map<String, String> getConnectionProperties(final JsonNode config) {
339339
* @param defaultParameters connection properties map as specified by each Jdbc source
340340
* @throws IllegalArgumentException
341341
*/
342-
private void assertCustomParametersDontOverwriteDefaultParameters(final Map<String, String> customParameters,
342+
protected static void assertCustomParametersDontOverwriteDefaultParameters(final Map<String, String> customParameters,
343343
final Map<String, String> defaultParameters) {
344344
for (final String key : defaultParameters.keySet()) {
345345
if (customParameters.containsKey(key) && !Objects.equals(customParameters.get(key), defaultParameters.get(key))) {

airbyte-integrations/connectors/source-jdbc/src/test/java/io/airbyte/integrations/source/jdbc/AbstractJdbcSourceAcceptanceTest.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@
44

55
package io.airbyte.integrations.source.jdbc;
66

7+
import static io.airbyte.integrations.source.jdbc.AbstractJdbcSource.assertCustomParametersDontOverwriteDefaultParameters;
8+
import static org.junit.jupiter.api.Assertions.assertThrows;
9+
710
import com.fasterxml.jackson.databind.JsonNode;
811
import com.google.common.collect.ImmutableMap;
912
import io.airbyte.commons.features.EnvVariableFeatureFlags;
@@ -22,12 +25,16 @@
2225
import io.airbyte.protocol.models.AirbyteStateMessage.AirbyteStateType;
2326
import io.airbyte.protocol.models.AirbyteStreamState;
2427
import io.airbyte.test.utils.PostgreSQLContainerHelper;
28+
import io.airbyte.integrations.util.HostPortResolver;
2529
import java.sql.JDBCType;
2630
import java.util.List;
31+
import java.util.Map;
32+
import java.util.Objects;
2733
import java.util.Set;
2834
import org.junit.jupiter.api.AfterAll;
2935
import org.junit.jupiter.api.BeforeAll;
3036
import org.junit.jupiter.api.BeforeEach;
37+
import org.junit.jupiter.api.Test;
3138
import org.slf4j.Logger;
3239
import org.slf4j.LoggerFactory;
3340
import org.testcontainers.containers.PostgreSQLContainer;
@@ -43,6 +50,7 @@ class AbstractJdbcSourceAcceptanceTest extends JdbcSourceAcceptanceTest {
4350
private static PostgreSQLContainer<?> PSQL_DB;
4451

4552
private JsonNode config;
53+
private String dbName;
4654

4755
@BeforeAll
4856
static void init() {
@@ -53,7 +61,7 @@ static void init() {
5361

5462
@BeforeEach
5563
public void setup() throws Exception {
56-
final String dbName = Strings.addRandomSuffix("db", "_", 10).toLowerCase();
64+
dbName = Strings.addRandomSuffix("db", "_", 10).toLowerCase();
5765

5866
config = Jsons.jsonNode(ImmutableMap.builder()
5967
.put(JdbcUtils.HOST_KEY, PSQL_DB.getHost())
@@ -85,6 +93,18 @@ public JsonNode getConfig() {
8593
return config;
8694
}
8795

96+
public JsonNode getConfigWithConnectionProperties(final PostgreSQLContainer<?> psqlDb, final String dbName, final String additionalParameters) {
97+
return Jsons.jsonNode(ImmutableMap.builder()
98+
.put(JdbcUtils.HOST_KEY, HostPortResolver.resolveHost(psqlDb))
99+
.put(JdbcUtils.PORT_KEY, HostPortResolver.resolvePort(psqlDb))
100+
.put(JdbcUtils.DATABASE_KEY, dbName)
101+
.put(JdbcUtils.SCHEMAS_KEY, List.of(SCHEMA_NAME))
102+
.put(JdbcUtils.USERNAME_KEY, psqlDb.getUsername())
103+
.put(JdbcUtils.PASSWORD_KEY, psqlDb.getPassword())
104+
.put(JdbcUtils.CONNECTION_PROPERTIES_KEY, additionalParameters)
105+
.build());
106+
}
107+
88108
@Override
89109
public String getDriverClass() {
90110
return PostgresTestSource.DRIVER_CLASS;
@@ -161,4 +181,18 @@ public static void main(final String[] args) throws Exception {
161181

162182
}
163183

184+
@Test
185+
void testCustomParametersOverwriteDefaultParametersExpectException() {
186+
final String connectionPropertiesUrl = "ssl=false";
187+
final JsonNode config = getConfigWithConnectionProperties(PSQL_DB, dbName, connectionPropertiesUrl);
188+
final Map<String, String> customParameters = JdbcUtils.parseJdbcParameters(config, JdbcUtils.CONNECTION_PROPERTIES_KEY, "&");
189+
final Map<String, String> defaultParameters = Map.of(
190+
"ssl", "true",
191+
"sslmode", "require"
192+
);
193+
assertThrows(IllegalArgumentException.class, () -> {
194+
assertCustomParametersDontOverwriteDefaultParameters(customParameters, defaultParameters);
195+
});
196+
}
197+
164198
}

airbyte-integrations/connectors/source-postgres/src/main/java/io/airbyte/integrations/source/postgres/PostgresSource.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,6 @@
7272
public class PostgresSource extends AbstractJdbcSource<JDBCType> implements Source {
7373

7474
private static final Logger LOGGER = LoggerFactory.getLogger(PostgresSource.class);
75-
76-
public static final String CDC_LSN = "_ab_cdc_lsn";
77-
public static final String DATABASE_KEY = "database";
78-
public static final String HOST_KEY = "host";
79-
public static final String JDBC_URL_KEY = "jdbc_url";
80-
public static final String PASSWORD_KEY = "password";
81-
public static final String PORT_KEY = "port";
82-
public static final String SCHEMAS_KEY = "schemas";
83-
public static final String USERNAME_KEY = "username";
8475
static final String DRIVER_CLASS = DatabaseDriver.POSTGRESQL.getDriverClassName();
8576
static final Map<String, String> SSL_JDBC_PARAMETERS = ImmutableMap.of(
8677
"ssl", "true",

0 commit comments

Comments
 (0)