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
2 changes: 1 addition & 1 deletion NEXT_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
-

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

---
*Note: When making changes, please add your change under the appropriate section with a brief description.*
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public final class DatabricksJdbcConstants {
public static final Pattern HTTP_CLI_PATTERN = Pattern.compile(".*cliservice(.+)");
public static final Pattern HTTP_PATH_CLI_PATTERN = Pattern.compile("cliservice");
public static final Pattern TEST_PATH_PATTERN = Pattern.compile("jdbc:databricks://test");
public static final Pattern BASE_PATTERN = Pattern.compile("jdbc:databricks://[^;]+(;[^;]*)?");
public static final Pattern BASE_PATTERN = Pattern.compile("jdbc:databricks://[^;]+(;[^;]*)*");
public static final Pattern HTTP_CLUSTER_PATH_PATTERN = Pattern.compile(".*/o/(.+)/(.+)");
public static final String JDBC_SCHEMA = "jdbc:databricks://";
public static final LogLevel DEFAULT_LOG_LEVEL = LogLevel.OFF;
Expand Down
10 changes: 6 additions & 4 deletions src/test/java/com/databricks/jdbc/TestConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -250,10 +250,6 @@ public class TestConstants {
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;"
+ "httpPath=sql/protocolv1/o/9999999999999999/9999999999999999999;AuthMech=3;loglevel=3";

public static final String INVALID_CLUSTER_URL =
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;"
+ "httpPath=sql/protocolv1/oo/9999999999999999/9999999999999999999;AuthMech=3";

public static final String VALID_BASE_URL_1 =
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;";

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

public static final String VALID_BASE_URL_4 =
"jdbc:databricks://sample-host.cloud.databricks.com:9999;AuthMech=3";

public static final String VALID_BASE_URL_5 =
"jdbc:databricks://sample-host.cloud.databricks.com:9999;EnableArrow=0;ConnCatalog=test";

public static final String VALID_URL_WITH_PROXY =
"jdbc:databricks://sample-host.cloud.databricks.com:9999/default;ssl=1;AuthMech=3;"
+ "httpPath=/sql/1.0/warehouses/9999999999999999;UseProxy=1;ProxyHost=127.0.0.1;"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@

import com.databricks.jdbc.exception.DatabricksHttpException;
import com.databricks.jdbc.exception.DatabricksSQLException;
import java.util.stream.Stream;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

Expand Down Expand Up @@ -49,23 +53,33 @@ void testUnsuccessfulResponseCheck() {
assertThrows(DatabricksHttpException.class, () -> ValidationUtil.checkHTTPError(response));
}

@Test
public void testIsValidJdbcUrl() {
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_1));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_2));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_3));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_4));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_5));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_6));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_7));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_1));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_2));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_BASE_URL_3));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_TEST_URL));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_CLUSTER_URL));
assertTrue(ValidationUtil.isValidJdbcUrl(VALID_URL_WITH_INVALID_COMPRESSION_TYPE));
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_URL_1));
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_URL_2));
assertFalse(ValidationUtil.isValidJdbcUrl(INVALID_CLUSTER_URL));
@ParameterizedTest
@MethodSource("jdbcUrlValidityTestCases")
void testIsValidJdbcUrl(String url, String description, boolean expectedValid) {
assertEquals(expectedValid, ValidationUtil.isValidJdbcUrl(url), description);
}

private static Stream<Arguments> jdbcUrlValidityTestCases() {
return Stream.of(
Arguments.of(VALID_URL_1, "Valid URL with auth_flow=2 and log path", true),
Arguments.of(VALID_URL_2, "Valid URL with invalid LogLevel but valid structure", true),
Arguments.of(VALID_URL_3, "Valid URL with EnableQueryResultLZ4Compression=0", true),
Arguments.of(VALID_URL_4, "Valid URL with EnableDirectResults", true),
Arguments.of(VALID_URL_5, "Valid URL without schema", true),
Arguments.of(VALID_URL_6, "Valid URL with ConnCatalog and ConnSchema", true),
Arguments.of(VALID_URL_7, "Valid URL with Arrow disabled", true),
Arguments.of(VALID_BASE_URL_1, "Valid base URL with trailing semicolon", true),
Arguments.of(VALID_BASE_URL_2, "Valid base URL without trailing semicolon", true),
Arguments.of(VALID_BASE_URL_3, "Valid base URL without schema", true),
Arguments.of(VALID_BASE_URL_4, "Valid base URL with one parameter", true),
Arguments.of(VALID_BASE_URL_5, "Valid base URL with two parameters", true),
Arguments.of(VALID_TEST_URL, "Minimal valid test URL", true),
Arguments.of(VALID_CLUSTER_URL, "Valid cluster URL with protocol path", true),
Arguments.of(
VALID_URL_WITH_INVALID_COMPRESSION_TYPE,
"Valid URL with invalid compression type",
true),
Arguments.of(INVALID_URL_1, "Invalid non-Databricks JDBC URL", false),
Arguments.of(INVALID_URL_2, "Invalid malformed JDBC scheme", false));
}
}
Loading