18
18
import org .testng .annotations .BeforeMethod ;
19
19
import org .testng .annotations .Test ;
20
20
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
+
21
26
import static org .testng .Assert .assertEquals ;
27
+ import static org .testng .Assert .fail ;
22
28
23
29
public class MetricsTest extends BaseIntegrationTest {
24
30
private MeterRegistry meterRegistry ;
31
+
25
32
@ BeforeMethod (groups = {"integration" })
26
33
void setUp () {
27
34
meterRegistry = new SimpleMeterRegistry ();
@@ -33,8 +40,8 @@ void tearDown() {
33
40
meterRegistry .clear ();
34
41
Metrics .globalRegistry .clear ();
35
42
}
36
-
37
- @ Test (groups = { "integration" }, enabled = true )
43
+
44
+ @ Test (groups = {"integration" }, enabled = true )
38
45
public void testRegisterMetrics () throws Exception {
39
46
ClickHouseNode node = getServer (ClickHouseProtocol .HTTP );
40
47
boolean isSecure = isCloud ();
@@ -54,18 +61,39 @@ public void testRegisterMetrics() throws Exception {
54
61
Gauge available = meterRegistry .get ("httpcomponents.httpclient.pool.total.connections" ).tags ("state" , "available" ).gauge ();
55
62
Gauge leased = meterRegistry .get ("httpcomponents.httpclient.pool.total.connections" ).tags ("state" , "leased" ).gauge ();
56
63
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 ();
61
93
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 );
66
96
67
- Assert .assertEquals ((int )available .value (), 1 );
68
- Assert .assertEquals ((int )leased .value (), 0 );
69
97
}
70
98
// currently there are only 5 metrics that are monitored by micrometer (out of the box)
71
99
assertEquals (meterRegistry .getMeters ().size (), 5 );
0 commit comments