Skip to content

Commit 1d36aac

Browse files
Fix FakeService for Thrift tests (#200)
Do not set FakeService as the proxy if the target URI points directly to the corresponding WireMock server.
1 parent 88b1993 commit 1d36aac

File tree

2 files changed

+32
-6
lines changed

2 files changed

+32
-6
lines changed

src/main/java/com/databricks/jdbc/client/http/DatabricksHttpClient.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import static com.databricks.jdbc.driver.DatabricksJdbcConstants.FAKE_SERVICE_URI_PROP_SUFFIX;
44
import static com.databricks.jdbc.driver.DatabricksJdbcConstants.IS_FAKE_SERVICE_TEST_PROP;
5+
import static io.netty.util.NetUtil.LOCALHOST;
56

67
import com.databricks.jdbc.client.DatabricksHttpException;
78
import com.databricks.jdbc.client.IDatabricksHttpClient;
@@ -192,9 +193,6 @@ public static void setProxyDetailsInHttpClient(
192193
static void setFakeServiceRouteInHttpClient(HttpClientBuilder builder) {
193194
builder.setRoutePlanner(
194195
(host, request, context) -> {
195-
// Get the fake service URI for the target URI and set it as proxy
196-
final HttpHost proxy =
197-
HttpHost.create(System.getProperty(host.toURI() + FAKE_SERVICE_URI_PROP_SUFFIX));
198196
final HttpHost target;
199197
try {
200198
target =
@@ -205,6 +203,16 @@ static void setFakeServiceRouteInHttpClient(HttpClientBuilder builder) {
205203
} catch (UnsupportedSchemeException e) {
206204
throw new HttpException(e.getMessage());
207205
}
206+
207+
if (LOCALHOST.getHostName().equalsIgnoreCase(host.getHostName())) {
208+
// If the target host is localhost, then no need to set proxy
209+
return new HttpRoute(target, null, false);
210+
}
211+
212+
// Get the fake service URI for the target URI and set it as proxy
213+
final HttpHost proxy =
214+
HttpHost.create(System.getProperty(host.toURI() + FAKE_SERVICE_URI_PROP_SUFFIX));
215+
208216
return new HttpRoute(target, null, proxy, false);
209217
});
210218
}

src/test/java/com/databricks/jdbc/client/http/DatabricksHttpClientTest.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public class DatabricksHttpClientTest {
4343

4444
@Mock CloseableHttpResponse closeableHttpResponse;
4545

46+
@Mock HttpClientBuilder httpClientBuilder;
47+
4648
private static final String CLUSTER_JDBC_URL =
4749
"jdbc:databricks://e2-dogfood.staging.cloud.databricks.com:443/default;transportMode=http;ssl=1;httpPath=sql/protocolv1/o/6051921418418893/1115-130834-ms4m0yv;AuthMech=3;UserAgentEntry=MyApp";
4850
private static final String DBSQL_JDBC_URL =
@@ -77,7 +79,6 @@ public void testSetFakeServiceRouteInHttpClient() throws HttpException {
7779
final String testFakeServiceURI = "http://localhost:8080";
7880
System.setProperty(testTargetURI + FAKE_SERVICE_URI_PROP_SUFFIX, testFakeServiceURI);
7981

80-
HttpClientBuilder httpClientBuilder = Mockito.mock(HttpClientBuilder.class);
8182
ArgumentCaptor<HttpRoutePlanner> routePlannerCaptor =
8283
ArgumentCaptor.forClass(HttpRoutePlanner.class);
8384

@@ -101,11 +102,29 @@ public void testSetFakeServiceRouteInHttpClient() throws HttpException {
101102
System.clearProperty(testTargetURI + FAKE_SERVICE_URI_PROP_SUFFIX);
102103
}
103104

105+
@Test
106+
public void testSetFakeServiceRouteInHttpClientWithLocalhostTarget() throws HttpException {
107+
ArgumentCaptor<HttpRoutePlanner> routePlannerCaptor =
108+
ArgumentCaptor.forClass(HttpRoutePlanner.class);
109+
110+
DatabricksHttpClient.setFakeServiceRouteInHttpClient(httpClientBuilder);
111+
112+
Mockito.verify(httpClientBuilder).setRoutePlanner(routePlannerCaptor.capture());
113+
HttpRoutePlanner capturedRoutePlanner = routePlannerCaptor.getValue();
114+
115+
HttpGet request = new HttpGet("http://localhost:53423");
116+
HttpRoute route =
117+
capturedRoutePlanner.determineRoute(
118+
HttpHost.create(request.getURI().toString()), request, null);
119+
120+
// Verify the route has no proxy host set as the target URI directly points to fake service
121+
assertNull(route.getProxyHost());
122+
}
123+
104124
@Test
105125
public void testSetFakeServiceRouteInHttpClientThrowsError() {
106126
final String testTargetURI = "https://example.com";
107127

108-
HttpClientBuilder httpClientBuilder = Mockito.mock(HttpClientBuilder.class);
109128
ArgumentCaptor<HttpRoutePlanner> routePlannerCaptor =
110129
ArgumentCaptor.forClass(HttpRoutePlanner.class);
111130

@@ -131,7 +150,6 @@ public void testSetFakeServiceRouteInHttpClientThrowsHTTPError() {
131150
final String testFakeServiceURI = "http://localhost:8080";
132151
System.setProperty(testTargetURI + FAKE_SERVICE_URI_PROP_SUFFIX, testFakeServiceURI);
133152

134-
HttpClientBuilder httpClientBuilder = Mockito.mock(HttpClientBuilder.class);
135153
ArgumentCaptor<HttpRoutePlanner> routePlannerCaptor =
136154
ArgumentCaptor.forClass(HttpRoutePlanner.class);
137155

0 commit comments

Comments
 (0)