PageRenderTime 35ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/components/camel-cdi/src/test/java/org/apache/camel/cdi/test/MultiContextEventEndpointTest.java

https://gitlab.com/matticala/apache-camel
Java | 190 lines | 138 code | 33 blank | 19 comment | 0 complexity | d4eb2429bc1661594d81bb043f8aa2dc MD5 | raw file
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package org.apache.camel.cdi.test;
  18. import java.util.ArrayList;
  19. import java.util.List;
  20. import java.util.concurrent.TimeUnit;
  21. import javax.enterprise.context.ApplicationScoped;
  22. import javax.enterprise.event.Event;
  23. import javax.enterprise.event.Observes;
  24. import javax.inject.Inject;
  25. import org.apache.camel.CamelContext;
  26. import org.apache.camel.ProducerTemplate;
  27. import org.apache.camel.cdi.CdiCamelExtension;
  28. import org.apache.camel.cdi.ContextName;
  29. import org.apache.camel.cdi.Uri;
  30. import org.apache.camel.cdi.bean.FirstCamelContextBean;
  31. import org.apache.camel.cdi.bean.FirstCamelContextEventConsumingRoute;
  32. import org.apache.camel.cdi.bean.FirstCamelContextEventProducingRoute;
  33. import org.apache.camel.cdi.bean.SecondCamelContextBean;
  34. import org.apache.camel.cdi.bean.SecondCamelContextEventConsumingRoute;
  35. import org.apache.camel.cdi.bean.SecondCamelContextEventProducingRoute;
  36. import org.apache.camel.component.mock.MockEndpoint;
  37. import org.hamcrest.Matchers;
  38. import org.jboss.arquillian.container.test.api.Deployment;
  39. import org.jboss.arquillian.junit.Arquillian;
  40. import org.jboss.arquillian.junit.InSequence;
  41. import org.jboss.shrinkwrap.api.Archive;
  42. import org.jboss.shrinkwrap.api.ShrinkWrap;
  43. import org.jboss.shrinkwrap.api.asset.EmptyAsset;
  44. import org.jboss.shrinkwrap.api.spec.JavaArchive;
  45. import org.junit.Before;
  46. import org.junit.Test;
  47. import org.junit.runner.RunWith;
  48. import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
  49. import static org.hamcrest.Matchers.contains;
  50. import static org.junit.Assert.assertThat;
  51. @RunWith(Arquillian.class)
  52. public class MultiContextEventEndpointTest {
  53. @Inject
  54. @ContextName("first")
  55. @Uri("mock:consumeString")
  56. private MockEndpoint firstConsumeString;
  57. @Inject
  58. @ContextName("second")
  59. @Uri("mock:consumeString")
  60. private MockEndpoint secondConsumeString;
  61. @Inject
  62. @ContextName("first")
  63. @Uri("direct:produceString")
  64. private ProducerTemplate firstProduceString;
  65. @Inject
  66. @ContextName("second")
  67. @Uri("direct:produceString")
  68. private ProducerTemplate secondProduceString;
  69. @Inject
  70. private Event<Object> objectEvent;
  71. @Inject
  72. private EventObserver observer;
  73. @Deployment
  74. public static Archive<?> deployment() {
  75. return ShrinkWrap.create(JavaArchive.class)
  76. // Camel CDI
  77. .addPackage(CdiCamelExtension.class.getPackage())
  78. // Test classes
  79. .addClasses(
  80. FirstCamelContextBean.class,
  81. FirstCamelContextEventConsumingRoute.class,
  82. FirstCamelContextEventProducingRoute.class,
  83. SecondCamelContextBean.class,
  84. SecondCamelContextEventConsumingRoute.class,
  85. SecondCamelContextEventProducingRoute.class)
  86. // Bean archive deployment descriptor
  87. .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  88. }
  89. @Test
  90. @InSequence(1)
  91. public void configureCamelContexts(@ContextName("second") CamelContext secondContext) throws Exception {
  92. secondContext.startAllRoutes();
  93. }
  94. @Test
  95. @InSequence(2)
  96. public void sendEventsToConsumers() throws InterruptedException {
  97. firstConsumeString.expectedMessageCount(1);
  98. firstConsumeString.expectedBodiesReceived("testFirst");
  99. secondConsumeString.expectedMessageCount(2);
  100. secondConsumeString.expectedBodiesReceived("testSecond1", "testSecond2");
  101. objectEvent.select(String.class, ContextName.Literal.of("first")).fire("testFirst");
  102. objectEvent.select(String.class, ContextName.Literal.of("second")).fire("testSecond1");
  103. objectEvent.select(String.class, ContextName.Literal.of("second")).fire("testSecond2");
  104. assertIsSatisfied(2L, TimeUnit.SECONDS, firstConsumeString, secondConsumeString);
  105. }
  106. @Test
  107. @InSequence(3)
  108. public void sendMessagesToProducers() {
  109. firstProduceString.sendBody("testFirst");
  110. secondProduceString.sendBody("testSecond");
  111. assertThat(observer.getObjectEvents(), Matchers.<Object>contains("testFirst", "testSecond"));
  112. assertThat(observer.getStringEvents(), contains("testFirst", "testSecond"));
  113. assertThat(observer.getFirstStringEvents(), contains("testFirst"));
  114. assertThat(observer.secondStringEvents(), contains("testSecond"));
  115. }
  116. @Before
  117. public void resetCollectedEvents() {
  118. observer.reset();
  119. }
  120. @ApplicationScoped
  121. static class EventObserver {
  122. private final List<Object> objectEvents = new ArrayList<>();
  123. private final List<String> stringEvents = new ArrayList<>();
  124. private final List<String> firstStringEvents = new ArrayList<>();
  125. private final List<String> secondStringEvents = new ArrayList<>();
  126. void collectObjectEvents(@Observes Object event) {
  127. objectEvents.add(event);
  128. }
  129. void collectStringEvents(@Observes String event) {
  130. stringEvents.add(event);
  131. }
  132. void collectFirstStringEvents(@Observes @ContextName("first") String event) {
  133. firstStringEvents.add(event);
  134. }
  135. void collectSecondStringEvents(@Observes @ContextName("second") String event) {
  136. secondStringEvents.add(event);
  137. }
  138. List<Object> getObjectEvents() {
  139. return objectEvents;
  140. }
  141. List<String> getStringEvents() {
  142. return stringEvents;
  143. }
  144. List<String> getFirstStringEvents() {
  145. return firstStringEvents;
  146. }
  147. List<String> secondStringEvents() {
  148. return secondStringEvents;
  149. }
  150. void reset() {
  151. objectEvents.clear();
  152. stringEvents.clear();
  153. firstStringEvents.clear();
  154. secondStringEvents.clear();
  155. }
  156. }
  157. }