Skip to content

Commit a47ab1a

Browse files
authored
[ES-1502544] Fix connection check for OSS JDBC (#852)
* [ES-1502544] Modify Validity checks for OSS JDBC * Add changelog
1 parent 333801c commit a47ab1a

4 files changed

Lines changed: 40 additions & 24 deletions

File tree

NEXT_CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
-
1313

1414
### Fixed
15-
-
15+
- Updated JDBC URL regex to accept valid connection strings that were incorrectly rejected.
1616

1717
---
1818
*Note: When making changes, please add your change under the appropriate section with a brief description.*

src/main/java/com/databricks/jdbc/common/DatabricksJdbcConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public final class DatabricksJdbcConstants {
2020
public static final Pattern HTTP_CLI_PATTERN = Pattern.compile(".*cliservice(.+)");
2121
public static final Pattern HTTP_PATH_CLI_PATTERN = Pattern.compile("cliservice");
2222
public static final Pattern TEST_PATH_PATTERN = Pattern.compile("jdbc:databricks://test");
23-
public static final Pattern BASE_PATTERN = Pattern.compile("jdbc:databricks://[^;]+(;[^;]*)?");
23+
public static final Pattern BASE_PATTERN = Pattern.compile("jdbc:databricks://[^;]+(;[^;]*)*");
2424
public static final Pattern HTTP_CLUSTER_PATH_PATTERN = Pattern.compile(".*/o/(.+)/(.+)");
2525
public static final String JDBC_SCHEMA = "jdbc:databricks://";
2626
public static final LogLevel DEFAULT_LOG_LEVEL = LogLevel.OFF;

src/test/java/com/databricks/jdbc/TestConstants.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -250,10 +250,6 @@ public class TestConstants {
250250
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;"
251251
+ "httpPath=sql/protocolv1/o/9999999999999999/9999999999999999999;AuthMech=3;loglevel=3";
252252

253-
public static final String INVALID_CLUSTER_URL =
254-
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;"
255-
+ "httpPath=sql/protocolv1/oo/9999999999999999/9999999999999999999;AuthMech=3";
256-
257253
public static final String VALID_BASE_URL_1 =
258254
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;";
259255

@@ -263,6 +259,12 @@ public class TestConstants {
263259
public static final String VALID_BASE_URL_3 =
264260
"jdbc:databricks://sample-host.cloud.databricks.com:9999";
265261

262+
public static final String VALID_BASE_URL_4 =
263+
"jdbc:databricks://sample-host.cloud.databricks.com:9999;AuthMech=3";
264+
265+
public static final String VALID_BASE_URL_5 =
266+
"jdbc:databricks://sample-host.cloud.databricks.com:9999;EnableArrow=0;ConnCatalog=test";
267+
266268
public static final String VALID_URL_WITH_PROXY =
267269
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;AuthMech=3;"
268270
+ "httpPath=/sql/1.0/warehouses/9999999999999999;UseProxy=1;ProxyHost=127.0.0.1;"

src/test/java/com/databricks/jdbc/common/util/ValidationUtilTest.java

Lines changed: 32 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,14 @@
66

77
import com.databricks.jdbc.exception.DatabricksHttpException;
88
import com.databricks.jdbc.exception.DatabricksSQLException;
9+
import java.util.stream.Stream;
910
import org.apache.http.HttpResponse;
1011
import org.apache.http.StatusLine;
1112
import org.junit.jupiter.api.Test;
1213
import org.junit.jupiter.api.extension.ExtendWith;
14+
import org.junit.jupiter.params.ParameterizedTest;
15+
import org.junit.jupiter.params.provider.Arguments;
16+
import org.junit.jupiter.params.provider.MethodSource;
1317
import org.mockito.Mock;
1418
import org.mockito.junit.jupiter.MockitoExtension;
1519

@@ -49,23 +53,33 @@ void testUnsuccessfulResponseCheck() {
4953
assertThrows(DatabricksHttpException.class, () -> ValidationUtil.checkHTTPError(response));
5054
}
5155

52-
@Test
53-
public void testIsValidJdbcUrl() {
54-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_1));
55-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_2));
56-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_3));
57-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_4));
58-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_5));
59-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_6));
60-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_7));
61-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_1));
62-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_2));
63-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_3));
64-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_TEST_URL));
65-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_CLUSTER_URL));
66-
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_WITH_INVALID_COMPRESSION_TYPE));
67-
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_URL_1));
68-
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_URL_2));
69-
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_CLUSTER_URL));
56+
@ParameterizedTest
57+
@MethodSource("jdbcUrlValidityTestCases")
58+
void testIsValidJdbcUrl(String url, String description, boolean expectedValid) {
59+
assertEquals(expectedValid, ValidationUtil.isValidJdbcUrl(url), description);
60+
}
61+
62+
private static Stream<Arguments> jdbcUrlValidityTestCases() {
63+
return Stream.of(
64+
Arguments.of(VALID_URL_1, "Valid URL with auth_flow=2 and log path", true),
65+
Arguments.of(VALID_URL_2, "Valid URL with invalid LogLevel but valid structure", true),
66+
Arguments.of(VALID_URL_3, "Valid URL with EnableQueryResultLZ4Compression=0", true),
67+
Arguments.of(VALID_URL_4, "Valid URL with EnableDirectResults", true),
68+
Arguments.of(VALID_URL_5, "Valid URL without schema", true),
69+
Arguments.of(VALID_URL_6, "Valid URL with ConnCatalog and ConnSchema", true),
70+
Arguments.of(VALID_URL_7, "Valid URL with Arrow disabled", true),
71+
Arguments.of(VALID_BASE_URL_1, "Valid base URL with trailing semicolon", true),
72+
Arguments.of(VALID_BASE_URL_2, "Valid base URL without trailing semicolon", true),
73+
Arguments.of(VALID_BASE_URL_3, "Valid base URL without schema", true),
74+
Arguments.of(VALID_BASE_URL_4, "Valid base URL with one parameter", true),
75+
Arguments.of(VALID_BASE_URL_5, "Valid base URL with two parameters", true),
76+
Arguments.of(VALID_TEST_URL, "Minimal valid test URL", true),
77+
Arguments.of(VALID_CLUSTER_URL, "Valid cluster URL with protocol path", true),
78+
Arguments.of(
79+
VALID_URL_WITH_INVALID_COMPRESSION_TYPE,
80+
"Valid URL with invalid compression type",
81+
true),
82+
Arguments.of(INVALID_URL_1, "Invalid non-Databricks JDBC URL", false),
83+
Arguments.of(INVALID_URL_2, "Invalid malformed JDBC scheme", false));
7084
}
7185
}

0 commit comments

Comments
 (0)