View Javadoc
1   package com.github.jonasrutishauser.transactional.event.quarkus.deployment.it;
2   
3   import static java.util.concurrent.TimeUnit.MILLISECONDS;
4   
5   import static org.awaitility.Awaitility.await;
6   
7   import java.util.concurrent.Callable;
8   
9   import org.jboss.shrinkwrap.api.asset.EmptyAsset;
10  import org.junit.jupiter.api.Test;
11  import org.junit.jupiter.api.extension.RegisterExtension;
12  
13  import io.quarkus.test.QuarkusUnitTest;
14  
15  import jakarta.inject.Inject;
16  
17  class TransactionalEventIT {
18  
19      @RegisterExtension
20      static final QuarkusUnitTest config = new QuarkusUnitTest() //
21              .setFlatClassPath(true) // needed for invoker
22              .withApplicationRoot(archive -> archive //
23                      .addClasses(Messages.class, RequestContextProbe.class, TestEvent.class, TestEventHandler.class, TestPublisher.class, TestHandlerMethod.class, //
24                              TestEventWithCustomSerialization.class, TestEventWithCustomSerializationHandler.class, TestEventWithCustomSerializationSerialization.class) //
25                      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") //
26              ).overrideRuntimeConfigKey("quarkus.transactional.event.initial-dispatch-interval", "1");
27  
28      @Inject
29      TestPublisher publisher;
30  
31      @Test
32      void testRoundTrip() {
33          publisher.publish("test message");
34  
35          await().until(processedMessagesContains("test message"));
36      }
37  
38      @Test
39      void testCustomSerializer() {
40          publisher.publishCustom("custom serialized message");
41  
42          await().until(processedMessagesContains("custom serialized message" + TestEventWithCustomSerializationSerialization.SERIALIZATION_SUFFIX));
43      }
44  
45      @Test
46      void testDirectMethodRoundTrip() {
47          publisher.publishString("some message");
48  
49          await().until(processedMessagesContains("some message"));
50      }
51  
52      @Test
53      void testClearsRequestContextBeforeHandling() {
54          publisher.publishWithRequestContext("request context");
55  
56          await().until(processedMessagesContains("request context missing"));
57      }
58  
59      @Test
60      void testFailure() {
61          publisher.publish("test failure");
62          for (int i = 10; i < 50; i++) {
63              publisher.publish("failure " + i);
64          }
65  
66          await().pollInterval(10, MILLISECONDS).until(processedMessagesContains("test failure"));
67          for (int i = 10; i < 50; i++) {
68              await().pollInterval(10, MILLISECONDS).until(processedMessagesContains("failure " + i));
69          }
70      }
71  
72      private Callable<Boolean> processedMessagesContains(String content) {
73          return () -> publisher.getMessages().contains(content);
74      }
75  }