PageRenderTime 56ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 1ms

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

https://github.com/gnodet/camel
Java | 284 lines | 207 code | 56 blank | 21 comment | 0 complexity | f3041c434c410916cbf5c4497472a1cc 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.enterprise.inject.Default;
  25. import javax.inject.Inject;
  26. import org.apache.camel.ProducerTemplate;
  27. import org.apache.camel.cdi.CdiCamelExtension;
  28. import org.apache.camel.cdi.Uri;
  29. import org.apache.camel.cdi.bean.EventConsumingRouteCdi10;
  30. import org.apache.camel.cdi.bean.EventProducingRouteCdi10;
  31. import org.apache.camel.cdi.pojo.EventPayload;
  32. import org.apache.camel.cdi.pojo.EventPayloadInteger;
  33. import org.apache.camel.cdi.pojo.EventPayloadString;
  34. import org.apache.camel.cdi.qualifier.BarQualifier;
  35. import org.apache.camel.cdi.qualifier.FooQualifier;
  36. import org.apache.camel.component.mock.MockEndpoint;
  37. import org.jboss.arquillian.container.test.api.Deployment;
  38. import org.jboss.arquillian.junit.Arquillian;
  39. import org.jboss.shrinkwrap.api.Archive;
  40. import org.jboss.shrinkwrap.api.ShrinkWrap;
  41. import org.jboss.shrinkwrap.api.asset.EmptyAsset;
  42. import org.jboss.shrinkwrap.api.spec.JavaArchive;
  43. import org.junit.Before;
  44. import org.junit.Test;
  45. import org.junit.runner.RunWith;
  46. import static org.apache.camel.component.mock.MockEndpoint.assertIsSatisfied;
  47. import static org.hamcrest.MatcherAssert.assertThat;
  48. import static org.hamcrest.Matchers.contains;
  49. @RunWith(Arquillian.class)
  50. public class EventEndpointTest {
  51. @Inject
  52. @Uri("mock:consumeObject")
  53. private MockEndpoint consumeObject;
  54. @Inject
  55. @Uri("mock:consumeString")
  56. private MockEndpoint consumeString;
  57. @Inject
  58. @Uri("mock:consumeStringPayload")
  59. private MockEndpoint consumeStringPayload;
  60. @Inject
  61. @Uri("mock:consumeIntegerPayload")
  62. private MockEndpoint consumeIntegerPayload;
  63. @Inject
  64. @Uri("mock:consumeFooQualifier")
  65. private MockEndpoint consumeFooQualifier;
  66. @Inject
  67. @Uri("mock:consumeBarQualifier")
  68. private MockEndpoint consumeBarQualifier;
  69. @Inject
  70. @Uri("direct:produceObject")
  71. private ProducerTemplate produceObject;
  72. @Inject
  73. @Uri("direct:produceString")
  74. private ProducerTemplate produceString;
  75. @Inject
  76. @Uri("direct:produceStringPayload")
  77. private ProducerTemplate produceStringPayload;
  78. @Inject
  79. @Uri("direct:produceIntegerPayload")
  80. private ProducerTemplate produceIntegerPayload;
  81. @Inject
  82. @Uri("direct:produceFooQualifier")
  83. private ProducerTemplate produceFooQualifier;
  84. @Inject
  85. @Uri("direct:produceBarQualifier")
  86. private ProducerTemplate produceBarQualifier;
  87. @Inject
  88. private Event<Object> objectEvent;
  89. @Inject
  90. private Event<EventPayload<String>> stringPayloadEvent;
  91. @Inject
  92. private Event<EventPayload<Integer>> integerPayloadEvent;
  93. @Inject
  94. private EventObserver observer;
  95. @Deployment
  96. public static Archive<?> deployment() {
  97. return ShrinkWrap.create(JavaArchive.class)
  98. // Camel CDI
  99. .addPackage(CdiCamelExtension.class.getPackage())
  100. // Test classes
  101. .addClasses(
  102. EventConsumingRouteCdi10.class,
  103. EventProducingRouteCdi10.class,
  104. EventPayloadString.class,
  105. EventPayloadInteger.class)
  106. // Bean archive deployment descriptor
  107. .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  108. }
  109. @Before
  110. public void resetCollectedEventsAndMockEndpoints() {
  111. observer.reset();
  112. consumeObject.reset();
  113. consumeString.reset();
  114. consumeStringPayload.reset();
  115. consumeIntegerPayload.reset();
  116. consumeFooQualifier.reset();
  117. consumeBarQualifier.reset();
  118. }
  119. @Test
  120. public void sendEventsToConsumers() throws InterruptedException {
  121. consumeObject.expectedMessageCount(8);
  122. consumeObject.expectedBodiesReceived(1234, new EventPayloadString("foo"), new EventPayloadString("bar"), "test",
  123. new EventPayloadInteger(1), new EventPayloadInteger(2), 123L, 987L);
  124. consumeString.expectedMessageCount(1);
  125. consumeString.expectedBodiesReceived("test");
  126. consumeStringPayload.expectedMessageCount(2);
  127. consumeStringPayload.expectedBodiesReceived(new EventPayloadString("foo"), new EventPayloadString("bar"));
  128. consumeIntegerPayload.expectedMessageCount(2);
  129. consumeIntegerPayload.expectedBodiesReceived(new EventPayloadInteger(1), new EventPayloadInteger(2));
  130. consumeFooQualifier.expectedMessageCount(1);
  131. consumeFooQualifier.expectedBodiesReceived(123L);
  132. consumeBarQualifier.expectedMessageCount(1);
  133. consumeBarQualifier.expectedBodiesReceived(987L);
  134. objectEvent.select(Integer.class).fire(1234);
  135. objectEvent.select(EventPayloadString.class).fire(new EventPayloadString("foo"));
  136. stringPayloadEvent.select(new BarQualifier.Literal()).fire(new EventPayloadString("bar"));
  137. objectEvent.select(String.class).fire("test");
  138. integerPayloadEvent.fire(new EventPayloadInteger(1));
  139. integerPayloadEvent.fire(new EventPayloadInteger(2));
  140. objectEvent.select(Long.class, new FooQualifier.Literal()).fire(123L);
  141. objectEvent.select(Long.class, new BarQualifier.Literal()).fire(987L);
  142. //assertIsSatisfied(2L, TimeUnit.SECONDS, consumeObject, consumeString, consumeStringPayload, consumeIntegerPayload, consumeFooQualifier, consumeBarQualifier);
  143. assertIsSatisfied(2L, TimeUnit.SECONDS, consumeObject, consumeString, consumeFooQualifier, consumeBarQualifier);
  144. }
  145. @Test
  146. public void sendMessagesToProducers() {
  147. produceObject.sendBody("string");
  148. EventPayload foo = new EventPayloadString("foo");
  149. produceStringPayload.sendBody(foo);
  150. produceObject.sendBody(1234);
  151. produceString.sendBody("test");
  152. EventPayload<Integer> bar = new EventPayloadInteger(2);
  153. produceIntegerPayload.sendBody(bar);
  154. EventPayload<Integer> baz = new EventPayloadInteger(12);
  155. produceIntegerPayload.sendBody(baz);
  156. produceFooQualifier.sendBody(456L);
  157. produceBarQualifier.sendBody(495L);
  158. produceObject.sendBody(777L);
  159. assertThat(observer.getObjectEvents(), contains("string", foo, 1234, "test", bar, baz, 456L, 495L, 777L));
  160. // assertThat(observer.getStringEvents(), contains("string", "test"));
  161. assertThat(observer.getStringPayloadEvents(), contains(foo));
  162. assertThat(observer.getIntegerPayloadEvents(), contains(bar, baz));
  163. assertThat(observer.getDefaultQualifierEvents(), contains("string", foo, 1234, "test", bar, baz, 777L));
  164. assertThat(observer.getFooQualifierEvents(), contains(456L));
  165. assertThat(observer.getBarQualifierEvents(), contains(495L));
  166. }
  167. @ApplicationScoped
  168. static class EventObserver {
  169. private final List<Object> objectEvents = new ArrayList<>();
  170. private final List<Object> defaultQualifierEvents = new ArrayList<>();
  171. private final List<String> stringEvents = new ArrayList<>();
  172. private final List<EventPayloadString> stringPayloadEvents = new ArrayList<>();
  173. private final List<EventPayloadInteger> integerPayloadEvents = new ArrayList<>();
  174. private final List<Long> fooQualifierEvents = new ArrayList<>();
  175. private final List<Long> barQualifierEvents = new ArrayList<>();
  176. void collectObjectEvents(@Observes Object event) {
  177. objectEvents.add(event);
  178. }
  179. void collectStringEvents(@Observes String event) {
  180. stringEvents.add(event);
  181. }
  182. void collectStringPayloadEvents(@Observes EventPayloadString event) {
  183. stringPayloadEvents.add(event);
  184. }
  185. void collectIntegerPayloadEvents(@Observes EventPayloadInteger event) {
  186. integerPayloadEvents.add(event);
  187. }
  188. void collectDefaultQualifierEvents(@Observes @Default Object event) {
  189. defaultQualifierEvents.add(event);
  190. }
  191. void collectFooQualifierEvents(@Observes @FooQualifier Long event) {
  192. fooQualifierEvents.add(event);
  193. }
  194. void collectBarQualifierEvents(@Observes @BarQualifier Long event) {
  195. barQualifierEvents.add(event);
  196. }
  197. List<Object> getObjectEvents() {
  198. return objectEvents;
  199. }
  200. List<String> getStringEvents() {
  201. return stringEvents;
  202. }
  203. List<EventPayloadString> getStringPayloadEvents() {
  204. return stringPayloadEvents;
  205. }
  206. List<EventPayloadInteger> getIntegerPayloadEvents() {
  207. return integerPayloadEvents;
  208. }
  209. List<Object> getDefaultQualifierEvents() {
  210. return defaultQualifierEvents;
  211. }
  212. List<Long> getFooQualifierEvents() {
  213. return fooQualifierEvents;
  214. }
  215. List<Long> getBarQualifierEvents() {
  216. return barQualifierEvents;
  217. }
  218. void reset() {
  219. objectEvents.clear();
  220. stringEvents.clear();
  221. stringPayloadEvents.clear();
  222. integerPayloadEvents.clear();
  223. defaultQualifierEvents.clear();
  224. fooQualifierEvents.clear();
  225. barQualifierEvents.clear();
  226. }
  227. }
  228. }