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)
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 }