1 package com.github.jonasrutishauser.transactional.event.liberty;
2
3 import static java.util.concurrent.TimeUnit.MINUTES;
4 import static org.awaitility.Awaitility.await;
5 import static org.hamcrest.Matchers.contains;
6 import static org.hamcrest.Matchers.hasItem;
7
8 import java.util.Collection;
9
10 import org.junit.jupiter.api.Test;
11 import org.junit.jupiter.api.extension.ExtendWith;
12
13 import com.github.jonasrutishauser.cdi.test.core.junit.CdiTestJunitExtension;
14
15 import jakarta.enterprise.context.control.RequestContextController;
16 import jakarta.inject.Inject;
17
18 @ExtendWith(CdiTestJunitExtension.class)
19 class TestResourceTest {
20
21 @Inject
22 private TestResource testResource;
23
24 @Inject
25 private RequestContextController requestContextController;
26
27 @Test
28 void testRoundTrip() {
29 testResource.publish("test message");
30
31 await().until(this::getMessages, contains("test message"));
32 }
33
34 @Test
35 void testFailure() {
36 testResource.publish("test failure");
37 for (int i = 10; i < 50; i++) {
38 testResource.publish("failure " + i);
39 }
40
41 await().atMost(1, MINUTES).until(this::getMessages, hasItem("test failure"));
42 for (int i = 10; i < 50; i++) {
43 await().until(this::getMessages, hasItem("failure " + i));
44 }
45 }
46
47 private Collection<String> getMessages() {
48 requestContextController.activate();
49 try {
50 return testResource.getMessages();
51 } finally {
52 requestContextController.deactivate();
53 }
54 }
55
56 }