View Javadoc
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  }