Skip to content

Commit 309ba26

Browse files
Modify MultiChunkExecutionIntegrationTests to extend AbstractFakeServiceIntegrationTests (#195)
AbstractFakeServiceIntegrationTests abstracts out the injection of fake services for sql-exec and cloud-fetch. Integration tests using the production sql-exec and cloud-fetch services can extend the abstract class to automatically use fake services (RECORD or REPLAY mode based on environment `FAKE_SERVICE_TEST_MODE`). The abstract class also provides hooks to configure the target URL of sql-exec and cloud-fetch (used in RECORD mode to capture requests hitting target URL).
1 parent f85b48c commit 309ba26

10 files changed

+52
-64
lines changed

src/test/java/com/databricks/jdbc/integration/fakeservice/BaseFakeServiceIntegrationTests.java renamed to src/test/java/com/databricks/jdbc/integration/fakeservice/AbstractFakeServiceIntegrationTests.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
* com.databricks.jdbc.driver.DatabricksJdbcConstants.FakeServiceType#SQL_EXEC} and {@link
1313
* com.databricks.jdbc.driver.DatabricksJdbcConstants.FakeServiceType#CLOUD_FETCH}.
1414
*/
15-
public abstract class BaseFakeServiceIntegrationTests {
15+
public abstract class AbstractFakeServiceIntegrationTests {
1616

1717
/**
1818
* {@link FakeServiceExtension} for {@link DatabricksJdbcConstants.FakeServiceType#SQL_EXEC}.
@@ -40,13 +40,24 @@ public abstract class BaseFakeServiceIntegrationTests {
4040
DatabricksJdbcConstants.FakeServiceType.CLOUD_FETCH,
4141
"https://dbstoragepzjc6kojqibtg.blob.core.windows.net");
4242

43-
/** Resets the possible mutations for the extensions after all tests have run. */
43+
/**
44+
* Resets the potential mutations (e.g., URLs set by {@link #setSqlExecApiTargetUrl}, {@link
45+
* #setCloudFetchApiTargetUrl}) to meaningful defaults, after all tests have completed.
46+
*/
4447
@AfterAll
45-
protected static void resetPossibleMutations() {
48+
static void resetPossibleMutations() {
4649
sqlExecApiExtension.setTargetBaseUrl("https://" + System.getenv("DATABRICKS_HOST"));
4750
cloudFetchApiExtension.setTargetBaseUrl("https://dbstoragepzjc6kojqibtg.blob.core.windows.net");
4851
}
4952

53+
protected static void setSqlExecApiTargetUrl(final String sqlExecApiTargetUrl) {
54+
sqlExecApiExtension.setTargetBaseUrl(sqlExecApiTargetUrl);
55+
}
56+
57+
protected static void setCloudFetchApiTargetUrl(final String cloudFetchApiTargetUrl) {
58+
cloudFetchApiExtension.setTargetBaseUrl(cloudFetchApiTargetUrl);
59+
}
60+
5061
protected FakeServiceExtension getSqlExecApiExtension() {
5162
return sqlExecApiExtension;
5263
}

src/test/java/com/databricks/jdbc/integration/fakeservice/FakeServiceExtension.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,9 @@ public class FakeServiceExtension extends DatabricksWireMockExtension {
104104
/** Fake service to manage. */
105105
private final FakeServiceType fakeServiceType;
106106

107+
/** HTTP port of the WireMock server. */
108+
private int wireMockServerHttpPort;
109+
107110
/** Base URL of the target production service. */
108111
private String targetBaseUrl;
109112

@@ -145,8 +148,9 @@ protected void onBeforeAll(WireMockRuntimeInfo wireMockRuntimeInfo, ExtensionCon
145148
fakeServiceModeValue != null
146149
? FakeServiceMode.valueOf(fakeServiceModeValue.toUpperCase())
147150
: FakeServiceMode.REPLAY;
151+
wireMockServerHttpPort = wireMockRuntimeInfo.getHttpPort();
148152

149-
setFakeServiceProperties(wireMockRuntimeInfo);
153+
setFakeServiceProperties(wireMockServerHttpPort);
150154
IntegrationTestUtil.resetJDBCConnection();
151155
DatabricksHttpClient.resetInstance();
152156
}
@@ -190,6 +194,9 @@ protected void onAfterAll(WireMockRuntimeInfo wireMockRuntimeInfo, ExtensionCont
190194
/** Sets the base URL of the target production service to be tracked. */
191195
protected void setTargetBaseUrl(String targetBaseUrl) {
192196
this.targetBaseUrl = targetBaseUrl;
197+
198+
// Refresh the fake service properties
199+
setFakeServiceProperties(wireMockServerHttpPort);
193200
}
194201

195202
/** Gets the stubbing directory for the current test class and method. */
@@ -254,13 +261,12 @@ private void saveStubMappings(WireMockRuntimeInfo wireMockRuntimeInfo, Extension
254261
new JsonFileMappingsSource(new SingleRootFileSource(stubbingDir), null).save(stubMappingList);
255262
}
256263

257-
private void setFakeServiceProperties(WireMockRuntimeInfo wireMockRuntimeInfo) {
264+
private void setFakeServiceProperties(int wireMockServerHttpPort) {
258265
System.setProperty(IS_FAKE_SERVICE_TEST_PROP, "true");
259266
System.setProperty(
260267
fakeServiceType.name().toLowerCase() + TARGET_URI_PROP_SUFFIX, targetBaseUrl);
261268
System.setProperty(
262-
targetBaseUrl + FAKE_SERVICE_URI_PROP_SUFFIX,
263-
"http://localhost:" + wireMockRuntimeInfo.getHttpPort());
269+
targetBaseUrl + FAKE_SERVICE_URI_PROP_SUFFIX, "http://localhost:" + wireMockServerHttpPort);
264270
}
265271

266272
private void clearFakeServiceProperties() {

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/ConcurrencyIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static org.junit.jupiter.api.Assertions.assertEquals;
55
import static org.junit.jupiter.api.Assertions.fail;
66

7-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
7+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
88
import java.sql.Connection;
99
import java.sql.PreparedStatement;
1010
import java.sql.ResultSet;
@@ -18,7 +18,7 @@
1818
import org.junit.jupiter.api.Test;
1919

2020
/** Integration tests for concurrent operations on a table. */
21-
public class ConcurrencyIntegrationTests extends BaseFakeServiceIntegrationTests {
21+
public class ConcurrencyIntegrationTests extends AbstractFakeServiceIntegrationTests {
2222

2323
private Connection connection;
2424

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/ConnectionIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
import static org.junit.jupiter.api.Assertions.assertThrows;
55

66
import com.databricks.jdbc.core.DatabricksSQLException;
7-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
7+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
88
import java.sql.Connection;
99
import java.sql.DriverManager;
1010
import java.sql.SQLException;
1111
import org.junit.jupiter.api.Test;
1212

1313
/** Integration tests for connection to Databricks service. */
14-
public class ConnectionIntegrationTests extends BaseFakeServiceIntegrationTests {
14+
public class ConnectionIntegrationTests extends AbstractFakeServiceIntegrationTests {
1515

1616
@Test
1717
void testSuccessfulConnection() throws SQLException {

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/ErrorHandlingIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
import com.databricks.jdbc.core.DatabricksParsingException;
77
import com.databricks.jdbc.core.DatabricksSQLException;
88
import com.databricks.jdbc.core.DatabricksSQLFeatureNotSupportedException;
9-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
9+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
1010
import java.sql.*;
1111
import org.junit.jupiter.api.Test;
1212

1313
/** Integration tests for error handling scenarios. */
14-
public class ErrorHandlingIntegrationTests extends BaseFakeServiceIntegrationTests {
14+
public class ErrorHandlingIntegrationTests extends AbstractFakeServiceIntegrationTests {
1515

1616
@Test
1717
void testFailureToLoadDriver() {

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/ExecutionIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
88
import static org.junit.jupiter.api.Assertions.*;
99

10-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
10+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
1111
import com.github.tomakehurst.wiremock.client.CountMatchingStrategy;
1212
import java.sql.ResultSet;
1313
import java.sql.SQLException;
1414
import org.junit.jupiter.api.Test;
1515

1616
/** Integration tests for SQL statement execution. */
17-
public class ExecutionIntegrationTests extends BaseFakeServiceIntegrationTests {
17+
public class ExecutionIntegrationTests extends AbstractFakeServiceIntegrationTests {
1818

1919
@Test
2020
void testInsertStatement() throws SQLException {

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/MetadataIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@
77
import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
88
import static org.junit.jupiter.api.Assertions.*;
99

10-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
10+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
1111
import com.github.tomakehurst.wiremock.client.CountMatchingStrategy;
1212
import java.sql.*;
1313
import org.junit.jupiter.api.AfterEach;
1414
import org.junit.jupiter.api.BeforeEach;
1515
import org.junit.jupiter.api.Test;
1616

1717
/** Integration tests for metadata retrieval. */
18-
public class MetadataIntegrationTests extends BaseFakeServiceIntegrationTests {
18+
public class MetadataIntegrationTests extends AbstractFakeServiceIntegrationTests {
1919

2020
private Connection connection;
2121

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/MultiChunkExecutionIntegrationTests.java

Lines changed: 14 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -4,57 +4,32 @@
44
import static com.databricks.jdbc.integration.IntegrationTestUtil.getValidJDBCConnection;
55
import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor;
66
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
7-
import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.wireMockConfig;
87
import static org.junit.jupiter.api.Assertions.assertEquals;
98
import static org.junit.jupiter.api.Assertions.assertTrue;
109

1110
import com.databricks.jdbc.core.DatabricksResultSet;
1211
import com.databricks.jdbc.core.DatabricksResultSetMetaData;
13-
import com.databricks.jdbc.driver.DatabricksJdbcConstants;
14-
import com.databricks.jdbc.integration.fakeservice.DatabricksWireMockExtension;
15-
import com.databricks.jdbc.integration.fakeservice.FakeServiceExtension;
16-
import com.databricks.jdbc.integration.fakeservice.StubMappingCredentialsCleaner;
17-
import com.github.tomakehurst.wiremock.extension.Extension;
12+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
1813
import java.sql.Connection;
1914
import java.sql.ResultSet;
2015
import java.sql.SQLException;
2116
import java.sql.Statement;
2217
import org.junit.jupiter.api.AfterEach;
18+
import org.junit.jupiter.api.BeforeAll;
2319
import org.junit.jupiter.api.BeforeEach;
2420
import org.junit.jupiter.api.Test;
25-
import org.junit.jupiter.api.extension.RegisterExtension;
2621

2722
/** Test SQL execution with results spanning multiple chunks. */
28-
public class MultiChunkExecutionIntegrationTests {
29-
30-
/**
31-
* {@link FakeServiceExtension} for {@link DatabricksJdbcConstants.FakeServiceType#SQL_EXEC}.
32-
* Intercepts all requests to SQL Execution API.
33-
*/
34-
@RegisterExtension
35-
private static final FakeServiceExtension sqlExecApiExtension =
36-
new FakeServiceExtension(
37-
new DatabricksWireMockExtension.Builder()
38-
.options(
39-
wireMockConfig().dynamicPort().dynamicHttpsPort().extensions(getExtensions())),
40-
DatabricksJdbcConstants.FakeServiceType.SQL_EXEC,
41-
"https://e2-dogfood.staging.cloud.databricks.com");
42-
43-
/**
44-
* {@link FakeServiceExtension} for {@link DatabricksJdbcConstants.FakeServiceType#CLOUD_FETCH}.
45-
* Intercepts all requests to Cloud Fetch API.
46-
*/
47-
@RegisterExtension
48-
private static final FakeServiceExtension cloudFetchApiExtension =
49-
new FakeServiceExtension(
50-
new DatabricksWireMockExtension.Builder()
51-
.options(
52-
wireMockConfig().dynamicPort().dynamicHttpsPort().extensions(getExtensions())),
53-
DatabricksJdbcConstants.FakeServiceType.CLOUD_FETCH,
54-
"https://e2-dogfood-core.s3.us-west-2.amazonaws.com");
23+
public class MultiChunkExecutionIntegrationTests extends AbstractFakeServiceIntegrationTests {
5524

5625
private Connection connection;
5726

27+
@BeforeAll
28+
static void beforeAll() {
29+
setSqlExecApiTargetUrl("https://e2-dogfood.staging.cloud.databricks.com");
30+
setCloudFetchApiTargetUrl("https://e2-dogfood-core.s3.us-west-2.amazonaws.com");
31+
}
32+
5833
@BeforeEach
5934
void setUp() throws SQLException {
6035
connection = getValidJDBCConnection();
@@ -94,7 +69,7 @@ void testMultiChunkSelect() throws SQLException {
9469

9570
// The number of cloud fetch calls should be equal to the number of chunks
9671
final int cloudFetchCalls =
97-
cloudFetchApiExtension
72+
getCloudFetchApiExtension()
9873
.countRequestsMatching(getRequestedFor(urlPathMatching(".*")).build())
9974
.getCount();
10075
assertEquals(metaData.getChunkCount(), cloudFetchCalls);
@@ -103,14 +78,10 @@ void testMultiChunkSelect() throws SQLException {
10378
// chunks as first chunk link is already fetched
10479
final String statementId = ((DatabricksResultSet) rs).statementId();
10580
final String resultChunkPathRegex = String.format(RESULT_CHUNK_PATH, statementId, ".*");
106-
sqlExecApiExtension.verify(
107-
(int) (metaData.getChunkCount() - 1),
108-
getRequestedFor(urlPathMatching(resultChunkPathRegex)));
81+
getSqlExecApiExtension()
82+
.verify(
83+
(int) (metaData.getChunkCount() - 1),
84+
getRequestedFor(urlPathMatching(resultChunkPathRegex)));
10985
}
11086
}
111-
112-
/** Returns the extensions to be used for stubbing. */
113-
private static Extension[] getExtensions() {
114-
return new Extension[] {new StubMappingCredentialsCleaner()};
115-
}
11687
}

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/PreparedStatementIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import static org.junit.jupiter.api.Assertions.assertEquals;
55
import static org.junit.jupiter.api.Assertions.assertTrue;
66

7-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
7+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
88
import java.sql.Connection;
99
import java.sql.PreparedStatement;
1010
import java.sql.ResultSet;
@@ -14,7 +14,7 @@
1414
import org.junit.jupiter.api.Test;
1515

1616
/** Integration tests for PreparedStatement operations. */
17-
public class PreparedStatementIntegrationTests extends BaseFakeServiceIntegrationTests {
17+
public class PreparedStatementIntegrationTests extends AbstractFakeServiceIntegrationTests {
1818

1919
private Connection connection;
2020

src/test/java/com/databricks/jdbc/integration/fakeservice/tests/ResultSetIntegrationTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import static com.databricks.jdbc.integration.IntegrationTestUtil.*;
44
import static org.junit.jupiter.api.Assertions.*;
55

6-
import com.databricks.jdbc.integration.fakeservice.BaseFakeServiceIntegrationTests;
6+
import com.databricks.jdbc.integration.fakeservice.AbstractFakeServiceIntegrationTests;
77
import java.math.BigDecimal;
88
import java.sql.Date;
99
import java.sql.ResultSet;
@@ -12,7 +12,7 @@
1212
import org.junit.jupiter.api.Test;
1313

1414
/** Integration tests for ResultSet operations. */
15-
public class ResultSetIntegrationTests extends BaseFakeServiceIntegrationTests {
15+
public class ResultSetIntegrationTests extends AbstractFakeServiceIntegrationTests {
1616

1717
@Test
1818
void testRetrievalOfBasicDataTypes() throws SQLException {

0 commit comments

Comments
 (0)