1818import org .testng .annotations .BeforeMethod ;
1919import org .testng .annotations .Test ;
2020
21+ import java .time .temporal .ChronoUnit ;
22+ import java .util .concurrent .ExecutorService ;
23+ import java .util .concurrent .Executors ;
24+ import java .util .concurrent .TimeUnit ;
25+
2126import static org .testng .Assert .assertEquals ;
27+ import static org .testng .Assert .fail ;
2228
2329public class MetricsTest extends BaseIntegrationTest {
2430 private MeterRegistry meterRegistry ;
31+
2532 @ BeforeMethod (groups = {"integration" })
2633 void setUp () {
2734 meterRegistry = new SimpleMeterRegistry ();
@@ -33,8 +40,8 @@ void tearDown() {
3340 meterRegistry .clear ();
3441 Metrics .globalRegistry .clear ();
3542 }
36-
37- @ Test (groups = { "integration" }, enabled = true )
43+
44+ @ Test (groups = {"integration" }, enabled = true )
3845 public void testRegisterMetrics () throws Exception {
3946 ClickHouseNode node = getServer (ClickHouseProtocol .HTTP );
4047 boolean isSecure = isCloud ();
@@ -54,18 +61,39 @@ public void testRegisterMetrics() throws Exception {
5461 Gauge available = meterRegistry .get ("httpcomponents.httpclient.pool.total.connections" ).tags ("state" , "available" ).gauge ();
5562 Gauge leased = meterRegistry .get ("httpcomponents.httpclient.pool.total.connections" ).tags ("state" , "leased" ).gauge ();
5663
57- System .out .println ("totalMax:" + totalMax .value () + ", available: " + available .value () + ", leased: " + leased .value ());
58- Assert .assertEquals ((int )totalMax .value (), Integer .parseInt (ClientConfigProperties .HTTP_MAX_OPEN_CONNECTIONS .getDefaultValue ()));
59- Assert .assertEquals ((int )available .value (), 1 );
60- Assert .assertEquals ((int )leased .value (), 0 );
64+ Assert .assertEquals ((int ) totalMax .value (), Integer .parseInt (ClientConfigProperties .HTTP_MAX_OPEN_CONNECTIONS .getDefaultValue ()));
65+ Assert .assertEquals ((int ) available .value (), 1 );
66+ Assert .assertEquals ((int ) leased .value (), 0 );
67+
68+ Runnable task = () -> {
69+ try (QueryResponse response = client .query ("SELECT 1" ).get ()) {
70+ Assert .assertEquals ((int ) available .value (), 0 );
71+ Assert .assertEquals ((int ) leased .value (), 1 );
72+ } catch (Exception e ) {
73+ e .printStackTrace ();
74+ fail ("Failed to to request" , e );
75+ }
76+ };
77+
78+ ExecutorService executor = Executors .newFixedThreadPool (3 );
79+ executor .submit (task );
80+ executor .submit (task );
81+ executor .shutdown ();
82+ executor .awaitTermination (10 , TimeUnit .SECONDS );
83+
84+ Assert .assertEquals ((int ) available .value (), 2 );
85+ Assert .assertEquals ((int ) leased .value (), 0 );
86+
87+ Thread .sleep (15_000 );
88+
89+ Assert .assertEquals ((int ) available .value (), 2 );
90+ Assert .assertEquals ((int ) leased .value (), 0 );
91+
92+ task .run ();
6193
62- try (QueryResponse response = client .query ("SELECT 1" ).get ()) {
63- Assert .assertEquals ((int )available .value (), 0 );
64- Assert .assertEquals ((int )leased .value (), 1 );
65- }
94+ Assert .assertEquals ((int ) available .value (), 1 );
95+ Assert .assertEquals ((int ) leased .value (), 0 );
6696
67- Assert .assertEquals ((int )available .value (), 1 );
68- Assert .assertEquals ((int )leased .value (), 0 );
6997 }
7098 // currently there are only 5 metrics that are monitored by micrometer (out of the box)
7199 assertEquals (meterRegistry .getMeters ().size (), 5 );
0 commit comments