View Javadoc
1   package com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.metrics;
2   
3   import static java.util.concurrent.TimeUnit.MILLISECONDS;
4   import static org.awaitility.Awaitility.await;
5   import static org.hamcrest.Matchers.containsString;
6   
7   import org.jboss.shrinkwrap.api.asset.EmptyAsset;
8   import org.junit.jupiter.api.Test;
9   
10  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.Messages;
11  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.RequestContextProbe;
12  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestEvent;
13  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestEventHandler;
14  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestEventWithCustomSerialization;
15  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestEventWithCustomSerializationHandler;
16  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestEventWithCustomSerializationSerialization;
17  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestHandlerMethod;
18  import com.github.jonasrutishauser.transactional.event.quarkus.deployment.it.TestPublisher;
19  
20  import io.quarkus.test.QuarkusUnitTest;
21  import io.restassured.RestAssured;
22  import jakarta.inject.Inject;
23  
24  abstract class AbstractMetricsIT {
25  
26      static QuarkusUnitTest config() {
27          return new QuarkusUnitTest() //
28                  .setFlatClassPath(true) // needed for invoker
29                  .withApplicationRoot(archive -> archive //
30                          .addClasses(Messages.class, RequestContextProbe.class, TestEvent.class, TestEventHandler.class, TestPublisher.class,
31                                  TestHandlerMethod.class, //
32                                  TestEventWithCustomSerialization.class, TestEventWithCustomSerializationHandler.class,
33                                  TestEventWithCustomSerializationSerialization.class) //
34                          .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") //
35                  ).overrideRuntimeConfigKey("quarkus.transactional.event.initial-dispatch-interval", "1");
36      }
37  
38      @Inject
39      TestPublisher publisher;
40  
41      @Test
42      void testMetrics() {
43          publisher.publish("test failure");
44  
45          await().pollInterval(10, MILLISECONDS).until(() -> publisher.getMessages().contains("test failure"));
46  
47          RestAssured.when().get("/q/metrics").then().statusCode(200).body(
48                  containsString("com_github_jonasrutishauser_transaction_event_max_concurrent_dispatching 10.0"),
49                  containsString("com_github_jonasrutishauser_transaction_event_failedattempts_total 1"),
50                  containsString("com_github_jonasrutishauser_transaction_event_dispatched_processing 0"),
51                  containsString("com_github_jonasrutishauser_transaction_event_processing_current 0"));
52      }
53  
54  }