diff --git a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java index 51fb2ccd9..288be2c01 100644 --- a/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/ProxyTests.java @@ -1,9 +1,9 @@ package com.clickhouse.client; +import com.clickhouse.client.api.ClickHouseException; import com.clickhouse.client.api.Client; import com.clickhouse.client.api.ClientException; import com.clickhouse.client.api.ClientMisconfigurationException; -import com.clickhouse.client.api.ClickHouseException; import com.clickhouse.client.api.enums.Protocol; import com.clickhouse.client.api.enums.ProxyType; import com.clickhouse.client.api.insert.InsertResponse; @@ -222,6 +222,7 @@ private Client.Builder clientBuilder(int proxyPort, boolean onlyNewImplementatio private int initProxy() { WireMockServer wireMock = new WireMockServer(WireMockConfiguration.options() + .dynamicPort() // .notifier(new Slf4jNotifier(true)) ); wireMock.start(); diff --git a/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java b/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java index 401917404..fd36c18eb 100644 --- a/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java +++ b/client-v2/src/test/java/com/clickhouse/client/metrics/MetricsTest.java @@ -19,12 +19,13 @@ import org.testng.annotations.Test; import java.time.temporal.ChronoUnit; +import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import static org.testng.Assert.assertEquals; -import static org.testng.Assert.fail; public class MetricsTest extends BaseIntegrationTest { private MeterRegistry meterRegistry; @@ -67,25 +68,38 @@ public void testRegisterMetrics() throws Exception { Assert.assertEquals((int) available.value(), 1); Assert.assertEquals((int) leased.value(), 0); - final long maxDelay = isCloud() ? 300 : 15; + CountDownLatch responsesReady = new CountDownLatch(2); + CountDownLatch releaseResponses = new CountDownLatch(1); Runnable task = () -> { - long t1 = System.currentTimeMillis(); try (QueryResponse response = client.query("SELECT 1").get()) { - long t = System.currentTimeMillis() - t1; - Assert.assertTrue(t < maxDelay, "Unexpected delay (t = " + t + ", but expected < " + maxDelay + " ms)"); - Assert.assertEquals((int) available.value(), 0); - Assert.assertEquals((int) leased.value(), 1); + responsesReady.countDown(); + Assert.assertTrue(releaseResponses.await(10, TimeUnit.SECONDS), + "Timed out waiting to release query responses"); } catch (Exception e) { - e.printStackTrace(); - fail("Failed to to request", e); + throw new RuntimeException("Failed to execute request", e); } }; - ExecutorService executor = Executors.newFixedThreadPool(3); - executor.submit(task); - executor.submit(task); - executor.shutdown(); - executor.awaitTermination(10, TimeUnit.SECONDS); + ExecutorService executor = Executors.newFixedThreadPool(2); + Future firstQuery = executor.submit(task); + Future secondQuery = executor.submit(task); + try { + try { + Assert.assertTrue(responsesReady.await(10, TimeUnit.SECONDS), + "Timed out waiting for concurrent query responses"); + Assert.assertEquals((int) available.value(), 0); + Assert.assertEquals((int) leased.value(), 2); + } finally { + releaseResponses.countDown(); + } + firstQuery.get(10, TimeUnit.SECONDS); + secondQuery.get(10, TimeUnit.SECONDS); + } finally { + releaseResponses.countDown(); + executor.shutdownNow(); + } + Assert.assertTrue(executor.awaitTermination(10, TimeUnit.SECONDS), + "Timed out waiting for query executor to terminate"); Assert.assertEquals((int) available.value(), 2); Assert.assertEquals((int) leased.value(), 0); @@ -95,7 +109,10 @@ public void testRegisterMetrics() throws Exception { Assert.assertEquals((int) available.value(), 2); Assert.assertEquals((int) leased.value(), 0); - task.run(); + try (QueryResponse response = client.query("SELECT 1").get()) { + Assert.assertEquals((int) available.value(), 0); + Assert.assertEquals((int) leased.value(), 1); + } Assert.assertEquals((int) available.value(), 1); Assert.assertEquals((int) leased.value(), 0); diff --git a/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java b/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java index e8230716c..f3a25feff 100644 --- a/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java +++ b/client-v2/src/test/java/com/clickhouse/client/query/QueryTests.java @@ -11,10 +11,10 @@ import com.clickhouse.client.api.ClientException; import com.clickhouse.client.api.ServerException; import com.clickhouse.client.api.command.CommandSettings; -import com.clickhouse.client.api.http.ClickHouseHttpProto; import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader; import com.clickhouse.client.api.data_formats.internal.BinaryStreamReader; import com.clickhouse.client.api.enums.Protocol; +import com.clickhouse.client.api.http.ClickHouseHttpProto; import com.clickhouse.client.api.insert.InsertResponse; import com.clickhouse.client.api.insert.InsertSettings; import com.clickhouse.client.api.internal.DataTypeConverter; @@ -1029,6 +1029,10 @@ public void testIntegerDataTypes() { @Test(groups = {"integration"}) public void testFloatDataTypes() { + final boolean usesPreciseFloatParsing = isVersionMatch("[26.7,)"); + final float expectedMaxFloat32 = usesPreciseFloatParsing ? Float.MAX_VALUE : 3.4028233E38F; + final double expectedMinFloat64 = usesPreciseFloatParsing ? Double.MIN_VALUE : 0.0D; + final List columns = Arrays.asList( "min_float32 Float32", "max_float32 Float32", @@ -1060,12 +1064,12 @@ public void testFloatDataTypes() { }); verifiers.add(r -> { - Assert.assertEquals(r.getFloat("max_float32"), 3.4028233E38F); // TODO: investigate why it's not Float.MAX_VALUE returned from server - Assert.assertEquals(r.getFloat(2), 3.4028233E38F); + Assert.assertEquals(r.getFloat("max_float32"), expectedMaxFloat32); + Assert.assertEquals(r.getFloat(2), expectedMaxFloat32); }); verifiers.add(r -> { - Assert.assertEquals(r.getDouble("min_float64"), 0.0D); // TODO: investigate why it's not Double.MIN_VALUE returned from server - Assert.assertEquals(r.getDouble(3), 0.0D); + Assert.assertEquals(r.getDouble("min_float64"), expectedMinFloat64); + Assert.assertEquals(r.getDouble(3), expectedMinFloat64); }); verifiers.add(r -> { Assert.assertEquals(r.getDouble("max_float64"), Double.MAX_VALUE); diff --git a/pom.xml b/pom.xml index a2a48964c..7e402d341 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ 4.0.1 0.31.1 3.23.4 - 1.10.4 + 1.11.1 0.9.5 1.0.6 2.0.7