Skip to content

Commit 16a1047

Browse files
committed
fixed proxy tests
1 parent 82f4f1e commit 16a1047

File tree

4 files changed

+39
-72
lines changed

4 files changed

+39
-72
lines changed

client-v2/pom.xml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,7 @@
3535
<dependency>
3636
<groupId>org.apache.httpcomponents.client5</groupId>
3737
<artifactId>httpclient5</artifactId>
38-
<version>${apache.httpclient.version}</version>
39-
</dependency>
40-
<dependency>
41-
<groupId>org.apache.httpcomponents.core5</groupId>
42-
<artifactId>httpcore5</artifactId>
43-
<version>${apache.httpclient.version}</version>
38+
<version>5.3.1</version>
4439
</dependency>
4540
<dependency>
4641
<groupId>com.github.luben</groupId>

client-v2/src/main/java/com/clickhouse/client/api/Client.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ public Builder addProxy(ProxyType type, String host, int port) {
418418
ValidationUtils.checkNonBlank(host, "host");
419419
ValidationUtils.checkRange(port, 1, ValidationUtils.TCP_PORT_NUMBER_MAX, "port");
420420

421-
this.configuration.put(ClickHouseClientOption.PROXY_TYPE.getKey(), type.toString());
421+
this.configuration.put(ClickHouseClientOption.PROXY_TYPE.getKey(), type.name());
422422
this.configuration.put(ClickHouseClientOption.PROXY_HOST.getKey(), host);
423423
this.configuration.put(ClickHouseClientOption.PROXY_PORT.getKey(), String.valueOf(port));
424424
return this;

client-v2/src/main/java/com/clickhouse/client/api/internal/HttpAPIClientHelper.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@
77
import com.clickhouse.client.config.ClickHouseClientOption;
88
import com.clickhouse.client.http.ClickHouseHttpProto;
99
import com.clickhouse.client.http.config.ClickHouseHttpOption;
10+
import org.apache.hc.client5.http.SchemePortResolver;
1011
import org.apache.hc.client5.http.classic.methods.HttpPost;
1112
import org.apache.hc.client5.http.config.RequestConfig;
1213
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
1314
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
15+
import org.apache.hc.client5.http.impl.routing.DefaultRoutePlanner;
1416
import org.apache.hc.client5.http.protocol.HttpClientContext;
1517
import org.apache.hc.core5.http.ClassicHttpResponse;
1618
import org.apache.hc.core5.http.ContentType;
@@ -57,12 +59,16 @@ public HttpAPIClientHelper(Map<String, String> configuration) {
5759
}
5860

5961
public CloseableHttpClient createHttpClient(Map<String, String> chConfig, Map<String, Serializable> requestConfig) {
60-
final CloseableHttpClient httpclient = HttpClientBuilder.create()
61-
62-
.build();
62+
HttpClientBuilder httpclient = HttpClientBuilder.create();
6363

64+
String proxyHost = chConfig.get(ClickHouseClientOption.PROXY_HOST.getKey());
65+
String proxyPort = chConfig.get(ClickHouseClientOption.PROXY_PORT.getKey());
66+
if (proxyHost != null && proxyPort != null) {
67+
HttpHost proxy = new HttpHost(proxyHost, Integer.parseInt(proxyPort));
68+
httpclient.setProxy(proxy);
69+
}
6470

65-
return httpclient;
71+
return httpclient.build();
6672
}
6773

6874
/**
@@ -88,7 +94,7 @@ public ClassicHttpResponse executeRequest(ClickHouseNode server, Map<String, Obj
8894

8995
URI uri;
9096
try {
91-
URIBuilder uriBuilder = new URIBuilder(server.getBaseUri());
97+
URIBuilder uriBuilder = new URIBuilder("/");
9298
addQueryParams(uriBuilder, chConfiguration, requestConfig);
9399
uri = uriBuilder.build();
94100
} catch (URISyntaxException e) {
@@ -138,7 +144,6 @@ public ClassicHttpResponse executeRequest(ClickHouseNode server, Map<String, Obj
138144

139145
private void addHeaders(HttpPost req, Map<String, String> chConfig, Map<String, Object> requestConfig) {
140146
req.addHeader(HttpHeaders.CONTENT_TYPE, CONTENT_TYPE.getMimeType());
141-
142147
if (requestConfig != null) {
143148
if (requestConfig.containsKey(ClickHouseClientOption.FORMAT.getKey())) {
144149
req.addHeader(ClickHouseHttpProto.HEADER_FORMAT, requestConfig.get(ClickHouseClientOption.FORMAT.getKey()));
Lines changed: 26 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
11
package com.clickhouse.client;
22

33
import com.clickhouse.client.api.Client;
4-
import com.clickhouse.client.api.ClientException;
54
import com.clickhouse.client.api.enums.Protocol;
65
import com.clickhouse.client.api.enums.ProxyType;
76
import com.clickhouse.client.api.insert.InsertResponse;
8-
import com.clickhouse.client.api.insert.InsertSettings;
9-
import com.clickhouse.client.api.metrics.ClientMetrics;
10-
import com.clickhouse.client.api.metrics.OperationMetrics;
11-
import com.clickhouse.client.api.metrics.ServerMetrics;
7+
import com.clickhouse.client.api.query.GenericRecord;
128
import com.clickhouse.client.insert.SamplePOJO;
13-
import eu.rekawek.toxiproxy.Proxy;
14-
import eu.rekawek.toxiproxy.ToxiproxyClient;
15-
import org.testcontainers.containers.ToxiproxyContainer;
9+
import com.github.tomakehurst.wiremock.WireMockServer;
10+
import org.testng.Assert;
1611
import org.testng.annotations.AfterMethod;
1712
import org.testng.annotations.BeforeMethod;
1813
import org.testng.annotations.Test;
@@ -22,43 +17,33 @@
2217
import java.util.List;
2318
import java.util.concurrent.TimeUnit;
2419

25-
import static org.testng.Assert.assertEquals;
26-
import static org.testng.Assert.assertThrows;
27-
import static org.testng.Assert.assertTrue;
20+
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
21+
import static com.github.tomakehurst.wiremock.client.WireMock.post;
22+
import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
2823
import static org.testng.Assert.fail;
2924

3025
public class ProxyTests extends BaseIntegrationTest{
3126
private Client client;
32-
ToxiproxyContainer toxiproxy = null;
33-
ToxiproxyClient toxiproxyClient = null;
34-
Proxy proxy = null;
3527

36-
@BeforeMethod(groups = { "integration" }, enabled = false)
28+
private WireMockServer proxy = new WireMockServer(8666);
29+
@BeforeMethod(groups = { "integration" })
3730
public void setUp() throws IOException {
31+
proxy.start();
3832
ClickHouseNode node = getServer(ClickHouseProtocol.HTTP);
39-
toxiproxy = new ToxiproxyContainer(ClickHouseServerForTest.getProxyImage())
40-
.withNetwork(ClickHouseServerForTest.getNetwork());
41-
toxiproxy.start();
42-
43-
toxiproxyClient = new ToxiproxyClient(toxiproxy.getHost(), toxiproxy.getControlPort());
44-
proxy = toxiproxyClient.createProxy("clickhouse", "0.0.0.0:8666",
45-
ClickHouseServerForTest.hasClickHouseContainer()
46-
? "clickhouse:" + ClickHouseProtocol.HTTP.getDefaultPort()
47-
: ClickHouseServerForTest.getClickHouseAddress(ClickHouseProtocol.HTTP, true));
48-
33+
proxy.addStubMapping(post(urlMatching("/.*"))
34+
.willReturn(aResponse().proxiedFrom("http://localhost:" + node.getPort())).build());
4935
client = new Client.Builder()
50-
.addEndpoint(Protocol.HTTP, node.getHost(), node.getPort(), false)
36+
.addEndpoint(Protocol.HTTP, "clickhouse", 8123, false)
5137
.setUsername("default")
5238
.setPassword("")
53-
.addProxy(ProxyType.HTTP, toxiproxy.getHost(), toxiproxy.getMappedPort(8666))
39+
// .useNewImplementation(true)
40+
.addProxy(ProxyType.HTTP, "localhost", 8666)
5441
.build();
5542
}
5643

57-
@AfterMethod(groups = { "integration" }, enabled = false)
44+
@AfterMethod(groups = { "integration" })
5845
public void teardown() {
59-
if (toxiproxy != null) {
60-
toxiproxy.stop();
61-
}
46+
proxy.stop();
6247
}
6348

6449
private void createTable(String tableQuery) throws ClickHouseException {
@@ -68,33 +53,15 @@ private void createTable(String tableQuery) throws ClickHouseException {
6853
client.read(getServer(ClickHouseProtocol.HTTP)).query(tableQuery).executeAndWait().close();
6954
}
7055
}
71-
72-
73-
@Test(groups = { "integration" }, enabled = false)
74-
public void simpleProxyTest() throws Exception {
75-
String tableName = "simple_pojo_enable_proxy_table";
76-
String createSQL = SamplePOJO.generateTableCreateSQL(tableName);
77-
System.out.println(createSQL);
78-
createTable(createSQL);
79-
80-
client.register(SamplePOJO.class, client.getTableSchema(tableName, "default"));
81-
List<Object> simplePOJOs = new ArrayList<>();
82-
83-
for (int i = 0; i < 1000; i++) {
84-
simplePOJOs.add(new SamplePOJO());
85-
}
86-
proxy.enable();
87-
InsertResponse response = client.insert(tableName, simplePOJOs).get(120, TimeUnit.SECONDS);
88-
89-
OperationMetrics metrics = response.getMetrics();
90-
assertEquals(simplePOJOs.size(), metrics.getMetric(ServerMetrics.NUM_ROWS_WRITTEN).getLong());
91-
assertEquals(simplePOJOs.size(), response.getWrittenRows());
92-
assertTrue(metrics.getMetric(ClientMetrics.OP_DURATION).getLong() > 0);
93-
assertTrue(metrics.getMetric(ClientMetrics.OP_SERIALIZATION).getLong() > 0);
56+
57+
@Test(groups = { "integration" })
58+
public void testSimpleQuery() throws Exception {
59+
List<GenericRecord> records = client.queryAll("select timezone()");
60+
Assert.assertEquals(records.stream().findFirst().get().getString(1), "UTC");
9461
}
9562

96-
@Test(groups = { "integration" }, enabled = false)
97-
public void simpleDisabledProxyTest() throws Exception {
63+
@Test(groups = { "integration" })
64+
public void testInsert() throws Exception {
9865
String tableName = "simple_pojo_disable_proxy_table";
9966
String createSQL = SamplePOJO.generateTableCreateSQL(tableName);
10067
System.out.println(createSQL);
@@ -106,12 +73,12 @@ public void simpleDisabledProxyTest() throws Exception {
10673
for (int i = 0; i < 1000; i++) {
10774
simplePOJOs.add(new SamplePOJO());
10875
}
109-
proxy.disable();
76+
11077
try {
11178
InsertResponse response = client.insert(tableName, simplePOJOs).get(120, TimeUnit.SECONDS);
112-
fail("Should have thrown exception.");
79+
Assert.assertEquals(response.getWrittenRows(), 1000);
11380
} catch (Exception e) {
114-
assertTrue(e instanceof ClientException);
81+
fail("Should not have thrown exception.", e);
11582
}
11683
}
11784
}

0 commit comments

Comments
 (0)