|
25 | 25 | import io.micrometer.core.instrument.MeterRegistry; |
26 | 26 | import jakarta.inject.Inject; |
27 | 27 | import jakarta.ws.rs.core.Response; |
| 28 | +import java.time.Duration; |
28 | 29 | import java.util.Map; |
| 30 | +import java.util.concurrent.atomic.AtomicReference; |
29 | 31 | import org.apache.polaris.service.quarkus.test.PolarisIntegrationTestFixture; |
30 | 32 | import org.apache.polaris.service.quarkus.test.PolarisIntegrationTestHelper; |
31 | 33 | import org.apache.polaris.service.quarkus.test.TestEnvironment; |
|
41 | 43 | import org.junit.jupiter.api.extension.ExtendWith; |
42 | 44 | import org.junit.jupiter.params.ParameterizedTest; |
43 | 45 | import org.junit.jupiter.params.provider.ValueSource; |
| 46 | +import org.testcontainers.shaded.org.awaitility.Awaitility; |
44 | 47 |
|
45 | 48 | @TestInstance(TestInstance.Lifecycle.PER_CLASS) |
46 | 49 | @ExtendWith(TestEnvironmentExtension.class) |
@@ -69,12 +72,26 @@ public void clearMetrics() { |
69 | 72 | registry.clear(); |
70 | 73 | } |
71 | 74 |
|
| 75 | + private Map<String, MetricFamily> fetchMetrics(String endpoint) { |
| 76 | + AtomicReference<Map<String, MetricFamily>> value = new AtomicReference<>(); |
| 77 | + Awaitility.await() |
| 78 | + .atMost(Duration.ofMinutes(2)) |
| 79 | + .untilAsserted( |
| 80 | + () -> { |
| 81 | + value.set( |
| 82 | + TestMetricsUtil.fetchMetrics( |
| 83 | + fixture.client, testEnv.baseManagementUri(), endpoint)); |
| 84 | + assertThat(value.get()).containsKey(API_METRIC_NAME); |
| 85 | + assertThat(value.get()).containsKey(HTTP_METRIC_NAME); |
| 86 | + }); |
| 87 | + return value.get(); |
| 88 | + } |
| 89 | + |
72 | 90 | @ParameterizedTest |
73 | 91 | @ValueSource(strings = {"%s/metrics", "%s/q/metrics"}) |
74 | 92 | public void testMetricsEmittedOnSuccessfulRequest(String endpoint) { |
75 | 93 | sendSuccessfulRequest(); |
76 | | - Map<String, MetricFamily> allMetrics = |
77 | | - TestMetricsUtil.fetchMetrics(fixture.client, testEnv.baseManagementUri(), endpoint); |
| 94 | + Map<String, MetricFamily> allMetrics = fetchMetrics(endpoint); |
78 | 95 | assertThat(allMetrics).containsKey(API_METRIC_NAME); |
79 | 96 | assertThat(allMetrics.get(API_METRIC_NAME).getMetrics()) |
80 | 97 | .satisfiesOnlyOnce( |
@@ -125,8 +142,7 @@ public void testMetricsEmittedOnSuccessfulRequest(String endpoint) { |
125 | 142 | @ValueSource(strings = {"%s/metrics", "%s/q/metrics"}) |
126 | 143 | public void testMetricsEmittedOnFailedRequest(String endpoint) { |
127 | 144 | sendFailingRequest(); |
128 | | - Map<String, MetricFamily> allMetrics = |
129 | | - TestMetricsUtil.fetchMetrics(fixture.client, testEnv.baseManagementUri(), endpoint); |
| 145 | + Map<String, MetricFamily> allMetrics = fetchMetrics(endpoint); |
130 | 146 | assertThat(allMetrics).containsKey(API_METRIC_NAME); |
131 | 147 | assertThat(allMetrics.get(API_METRIC_NAME).getMetrics()) |
132 | 148 | .satisfiesOnlyOnce( |
|
0 commit comments