Skip to content

Commit 4e23300

Browse files
committed
Added tests for query
1 parent 552d8b3 commit 4e23300

File tree

2 files changed

+51
-60
lines changed

2 files changed

+51
-60
lines changed

client-v2/src/test/java/com/clickhouse/client/HttpTransportTests.java

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.clickhouse.client;
22

33
import com.clickhouse.client.api.Client;
4+
import com.clickhouse.client.api.ClientException;
45
import com.clickhouse.client.api.ClientFaultCause;
56
import com.clickhouse.client.api.ConnectionInitiationException;
67
import com.clickhouse.client.api.ConnectionReuseStrategy;
@@ -21,6 +22,7 @@
2122
import org.apache.hc.core5.http.ConnectionRequestTimeoutException;
2223
import org.apache.hc.core5.http.HttpStatus;
2324
import org.apache.hc.core5.net.URIBuilder;
25+
import org.testcontainers.utility.ThrowingFunction;
2426
import org.testng.Assert;
2527
import org.testng.annotations.DataProvider;
2628
import org.testng.annotations.Test;
@@ -33,13 +35,18 @@
3335
import java.util.Random;
3436
import java.util.concurrent.CompletableFuture;
3537
import java.util.concurrent.ExecutionException;
38+
import java.util.concurrent.Future;
3639
import java.util.concurrent.TimeUnit;
3740
import java.util.concurrent.atomic.AtomicInteger;
41+
import java.util.function.Consumer;
3842

3943
import static com.github.tomakehurst.wiremock.stubbing.Scenario.STARTED;
4044

4145
public class HttpTransportTests extends BaseIntegrationTest{
4246

47+
static {
48+
System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "DEBUG");
49+
}
4350

4451
@Test(groups = {"integration"},dataProvider = "testConnectionTTLProvider")
4552
@SuppressWarnings("java:S2925")
@@ -219,26 +226,24 @@ public void testSecureConnection() {
219226
}
220227
}
221228

222-
@Test(groups = { "integration" }, enabled = true)
223-
public void testNoHttpResponseFailure() {
229+
@Test(groups = { "integration" }, dataProvider = "NoResponseFailureProvider")
230+
public void testInsertAndNoHttpResponseFailure(String body, int maxRetries, ThrowingFunction<Client, Void> function,
231+
boolean shouldFail) {
224232
WireMockServer faultyServer = new WireMockServer( WireMockConfiguration
225233
.options().port(9090).notifier(new ConsoleNotifier(false)));
226234
faultyServer.start();
227235

228-
byte[] requestBody = ("INSERT INTO table01 FORMAT " +
229-
ClickHouseFormat.TSV.name() + " \n1\t2\t3\n").getBytes();
230-
231236
// First request gets no response
232237
faultyServer.addStubMapping(WireMock.post(WireMock.anyUrl())
233-
.withRequestBody(WireMock.binaryEqualTo(requestBody))
238+
.withRequestBody(WireMock.equalTo(body))
234239
.inScenario("Retry")
235240
.whenScenarioStateIs(STARTED)
236241
.willSetStateTo("Failed")
237242
.willReturn(WireMock.aResponse().withFault(Fault.EMPTY_RESPONSE)).build());
238243

239244
// Second request gets a response (retry)
240245
faultyServer.addStubMapping(WireMock.post(WireMock.anyUrl())
241-
.withRequestBody(WireMock.binaryEqualTo(requestBody))
246+
.withRequestBody(WireMock.equalTo(body))
242247
.inScenario("Retry")
243248
.whenScenarioStateIs("Failed")
244249
.willSetStateTo("Done")
@@ -250,20 +255,53 @@ public void testNoHttpResponseFailure() {
250255
.addEndpoint(Protocol.HTTP, "localhost", faultyServer.port(), false)
251256
.setUsername("default")
252257
.setPassword("")
253-
.useNewImplementation(true)
254-
// .useNewImplementation(System.getProperty("client.tests.useNewImplementation", "false").equals("true"))
258+
.useNewImplementation(true) // because of the internal differences
255259
.compressClientRequest(false)
256-
.setOption(ClickHouseClientOption.RETRY.getKey(), "2")
260+
.setMaxRetries(maxRetries)
257261
.build();
258262

259263
try {
260-
InsertResponse insertResponse = mockServerClient.insert("table01",
261-
new ByteArrayInputStream("1\t2\t3\n".getBytes()), ClickHouseFormat.TSV).get(30, TimeUnit.SECONDS);
262-
insertResponse.close();
264+
function.apply(mockServerClient);
265+
} catch (ClientException e) {
266+
e.printStackTrace();
267+
if (!shouldFail) {
268+
Assert.fail("Unexpected exception", e);
269+
}
270+
return;
263271
} catch (Exception e) {
264272
Assert.fail("Unexpected exception", e);
265273
} finally {
266274
faultyServer.stop();
267275
}
276+
277+
if (shouldFail) {
278+
Assert.fail("Expected exception");
279+
}
280+
}
281+
282+
@DataProvider(name = "NoResponseFailureProvider")
283+
public static Object[][] noResponseFailureProvider() {
284+
285+
String insertBody = "INSERT INTO table01 FORMAT " + ClickHouseFormat.TSV.name() + " \n1\t2\t3\n";
286+
ThrowingFunction<Client, Void> insertFunction = (client) -> {
287+
InsertResponse insertResponse = client.insert("table01",
288+
new ByteArrayInputStream("1\t2\t3\n".getBytes()), ClickHouseFormat.TSV).get(30, TimeUnit.SECONDS);
289+
insertResponse.close();
290+
return null;
291+
};
292+
293+
String selectBody = "select timezone()";
294+
ThrowingFunction<Client, Void> queryFunction = (client) -> {
295+
QueryResponse response = client.query("select timezone()").get(30, TimeUnit.SECONDS);
296+
response.close();
297+
return null;
298+
};
299+
300+
return new Object[][]{
301+
{insertBody, 1, insertFunction, false},
302+
{selectBody, 1, queryFunction, false},
303+
{insertBody, 0, insertFunction, true},
304+
{selectBody, 0, queryFunction, true}
305+
};
268306
}
269307
}

client-v2/src/test/java/com/clickhouse/client/insert/InsertTests.java

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -169,51 +169,4 @@ public void insertRawDataSimple(int numberOfRecords) throws Exception {
169169
OperationMetrics metrics = response.getMetrics();
170170
assertEquals((int)response.getWrittenRows(), numberOfRecords );
171171
}
172-
173-
@Test(groups = { "integration" }, enabled = true)
174-
public void testNoHttpResponseFailure() {
175-
WireMockServer faultyServer = new WireMockServer( WireMockConfiguration
176-
.options().port(9090).notifier(new ConsoleNotifier(false)));
177-
faultyServer.start();
178-
179-
byte[] requestBody = ("INSERT INTO table01 FORMAT " +
180-
ClickHouseFormat.TSV.name() + " \n1\t2\t3\n").getBytes();
181-
182-
// First request gets no response
183-
faultyServer.addStubMapping(WireMock.post(WireMock.anyUrl())
184-
.withRequestBody(WireMock.binaryEqualTo(requestBody))
185-
.inScenario("Retry")
186-
.whenScenarioStateIs(STARTED)
187-
.willSetStateTo("Failed")
188-
.willReturn(WireMock.aResponse().withFault(Fault.EMPTY_RESPONSE)).build());
189-
190-
// Second request gets a response (retry)
191-
faultyServer.addStubMapping(WireMock.post(WireMock.anyUrl())
192-
.withRequestBody(WireMock.binaryEqualTo(requestBody))
193-
.inScenario("Retry")
194-
.whenScenarioStateIs("Failed")
195-
.willSetStateTo("Done")
196-
.willReturn(WireMock.aResponse()
197-
.withHeader("X-ClickHouse-Summary",
198-
"{ \"read_bytes\": \"10\", \"read_rows\": \"1\"}")).build());
199-
200-
Client mockServerClient = new Client.Builder()
201-
.addEndpoint(Protocol.HTTP, "localhost", faultyServer.port(), false)
202-
.setUsername("default")
203-
.setPassword("")
204-
.useNewImplementation(true)
205-
// .useNewImplementation(System.getProperty("client.tests.useNewImplementation", "false").equals("true"))
206-
.compressClientRequest(false)
207-
.setOption(ClickHouseClientOption.RETRY.getKey(), "2")
208-
.build();
209-
try {
210-
InsertResponse insertResponse = mockServerClient.insert("table01",
211-
new ByteArrayInputStream("1\t2\t3\n".getBytes()), ClickHouseFormat.TSV, settings).get(30, TimeUnit.SECONDS);
212-
insertResponse.close();
213-
} catch (Exception e) {
214-
Assert.fail("Unexpected exception", e);
215-
} finally {
216-
faultyServer.stop();
217-
}
218-
}
219172
}

0 commit comments

Comments
 (0)