use of org.mule.runtime.core.api.construct.Flow in project mule by mulesoft.
the class ReactiveInterceptorAdapterTestCase method secondInterceptorMutatesEventAroundAfterProceedChained.
@Test
public void secondInterceptorMutatesEventAroundAfterProceedChained() throws Exception {
ProcessorInterceptor interceptor1 = prepareInterceptor(new TestProcessorInterceptor("outer") {
});
ProcessorInterceptor interceptor2 = prepareInterceptor(new TestProcessorInterceptor("inner") {
@Override
public CompletableFuture<InterceptionEvent> around(ComponentLocation location, Map<String, ProcessorParameterValue> parameters, InterceptionEvent event, InterceptionAction action) {
return action.proceed().thenApplyAsync(e -> {
e.message(Message.of(TEST_PAYLOAD));
return e;
});
}
});
startFlowWithInterceptors(interceptor1, interceptor2);
CoreEvent result = process(flow, eventBuilder(muleContext).message(Message.of("")).build());
assertThat(result.getMessage().getPayload().getValue(), is(TEST_PAYLOAD));
assertThat(result.getError().isPresent(), is(false));
if (useMockInterceptor) {
InOrder inOrder = inOrder(processor, interceptor1, interceptor2);
inOrder.verify(interceptor1).before(any(), mapArgWithEntry("param", ""), any());
inOrder.verify(interceptor2).before(any(), mapArgWithEntry("param", ""), any());
inOrder.verify(interceptor1).around(any(), mapArgWithEntry("param", ""), any(), any());
inOrder.verify(interceptor2).around(any(), mapArgWithEntry("param", ""), any(), any());
inOrder.verify(processor).process(argThat(hasPayloadValue("")));
inOrder.verify(interceptor2).after(any(), argThat(interceptionHasPayloadValue(TEST_PAYLOAD)), eq(empty()));
inOrder.verify(interceptor1).after(any(), argThat(interceptionHasPayloadValue(TEST_PAYLOAD)), eq(empty()));
assertThat(((InternalEvent) result).getInternalParameters().entrySet(), hasSize(0));
verifyParametersResolvedAndDisposed(times(1));
}
}
use of org.mule.runtime.core.api.construct.Flow in project mule by mulesoft.
the class ReactiveInterceptorAdapterTestCase method firstInterceptorMutatesEventAroundAfterProceedChained.
@Test
public void firstInterceptorMutatesEventAroundAfterProceedChained() throws Exception {
ProcessorInterceptor interceptor1 = prepareInterceptor(new TestProcessorInterceptor("outer") {
@Override
public CompletableFuture<InterceptionEvent> around(ComponentLocation location, Map<String, ProcessorParameterValue> parameters, InterceptionEvent event, InterceptionAction action) {
return action.proceed().thenApplyAsync(e -> {
e.message(Message.of(TEST_PAYLOAD));
return e;
});
}
});
ProcessorInterceptor interceptor2 = prepareInterceptor(new TestProcessorInterceptor("inner") {
});
startFlowWithInterceptors(interceptor1, interceptor2);
CoreEvent result = process(flow, eventBuilder(muleContext).message(Message.of("")).build());
assertThat(result.getMessage().getPayload().getValue(), is(TEST_PAYLOAD));
assertThat(result.getError().isPresent(), is(false));
if (useMockInterceptor) {
InOrder inOrder = inOrder(processor, interceptor1, interceptor2);
inOrder.verify(interceptor1).before(any(), mapArgWithEntry("param", ""), any());
inOrder.verify(interceptor2).before(any(), mapArgWithEntry("param", ""), any());
inOrder.verify(interceptor1).around(any(), mapArgWithEntry("param", ""), any(), any());
inOrder.verify(interceptor2).around(any(), mapArgWithEntry("param", ""), any(), any());
inOrder.verify(processor).process(argThat(hasPayloadValue("")));
inOrder.verify(interceptor2).after(any(), any(), eq(empty()));
inOrder.verify(interceptor1).after(any(), argThat(interceptionHasPayloadValue(TEST_PAYLOAD)), eq(empty()));
assertThat(((InternalEvent) result).getInternalParameters().entrySet(), hasSize(0));
verifyParametersResolvedAndDisposed(times(1));
}
}
use of org.mule.runtime.core.api.construct.Flow in project mule by mulesoft.
the class MessageChunkAggregatorTestCase method testMessageProcessor.
@Test
public void testMessageProcessor() throws Exception {
MuleSession session = new DefaultMuleSession();
Flow flow = createAndRegisterFlow(muleContext, APPLE_FLOW, componentLocator);
assertNotNull(flow);
MessageChunkAggregator router = new MessageChunkAggregator();
router.setAnnotations(getAppleFlowComponentLocationAnnotations());
initialiseIfNeeded(router, true, muleContext);
Message message1 = of("test event A");
Message message2 = of("test event B");
Message message3 = of("test event C");
EventContext context = create(flow, TEST_CONNECTOR_LOCATION, "foo");
CoreEvent event1 = InternalEvent.builder(context).message(message1).groupCorrelation(Optional.of(GroupCorrelation.of(0, 3))).session(session).build();
CoreEvent event2 = InternalEvent.builder(context).message(message2).session(session).build();
CoreEvent event3 = InternalEvent.builder(context).message(message3).session(session).build();
assertNull(router.process(event1));
assertNull(router.process(event2));
CoreEvent resultEvent = router.process(event3);
assertNotNull(resultEvent);
Message resultMessage = resultEvent.getMessage();
assertNotNull(resultMessage);
String payload = getPayloadAsString(resultMessage);
assertTrue(payload.contains("test event A"));
assertTrue(payload.contains("test event B"));
assertTrue(payload.contains("test event C"));
assertTrue(payload.matches("test event [A,B,C]test event [A,B,C]test event [A,B,C]"));
}
use of org.mule.runtime.core.api.construct.Flow in project mule by mulesoft.
the class ResequencerTestCase method testMessageResequencerWithComparator.
@Test
public void testMessageResequencerWithComparator() throws Exception {
MuleSession session = new DefaultMuleSession();
Flow flow = createFlow(muleContext, "test");
assertNotNull(flow);
when(componentLocator.find(any(Location.class))).thenReturn(of(flow));
TestEventResequencer router = new TestEventResequencer(3);
Map<QName, Object> fakeComponentLocationAnnotations = ImmutableMap.<QName, Object>builder().put(LOCATION_KEY, fromSingleComponent("test")).build();
router.setAnnotations(fakeComponentLocationAnnotations);
initialiseIfNeeded(router, true, muleContext);
EventContext context = create(flow, TEST_CONNECTOR_LOCATION, "foo");
Message message1 = Message.of("test event A");
Message message2 = Message.of("test event B");
Message message3 = Message.of("test event C");
CoreEvent event1 = InternalEvent.builder(context).message(message1).session(session).build();
CoreEvent event2 = InternalEvent.builder(context).message(message2).session(session).build();
CoreEvent event3 = InternalEvent.builder(context).message(message3).session(session).build();
// set a resequencing comparator. We need to reset the router since it will
// not process the same event group
// twice
router = new TestEventResequencer(3);
router.setMuleContext(muleContext);
router.setEventComparator(new EventPayloadComparator());
router.setAnnotations(getAppleFlowComponentLocationAnnotations());
initialiseIfNeeded(router, true, muleContext);
assertNull(router.process(event2));
assertNull(router.process(event3));
CoreEvent resultEvent = router.process(event1);
assertNotNull(resultEvent);
Message resultMessage = resultEvent.getMessage();
assertNotNull(resultMessage);
assertEquals("test event C", getPayloadAsString(resultMessage));
}
use of org.mule.runtime.core.api.construct.Flow in project mule by mulesoft.
the class SimpleCollectionAggregatorTestCase method testAggregateMultipleEvents.
@Test
public void testAggregateMultipleEvents() throws Exception {
Flow flow = createAndRegisterFlow(muleContext, APPLE_FLOW, componentLocator);
assertNotNull(flow);
SimpleCollectionAggregator router = new SimpleCollectionAggregator();
SensingNullMessageProcessor sensingMessageProcessor = getSensingNullMessageProcessor();
router.setListener(sensingMessageProcessor);
router.setAnnotations(getAppleFlowComponentLocationAnnotations());
initialiseIfNeeded(router, true, muleContext);
EventContext executionContext = create(flow, TEST_CONNECTOR_LOCATION, "foo");
Message message1 = Message.of("test event A");
Message message2 = Message.of("test event B");
Message message3 = Message.of("test event C");
CoreEvent event1 = InternalEvent.builder(executionContext).message(message1).groupCorrelation(Optional.of(GroupCorrelation.of(0, 3))).build();
CoreEvent event2 = InternalEvent.builder(executionContext).message(message2).build();
CoreEvent event3 = InternalEvent.builder(executionContext).message(message3).build();
assertNull(router.process(event1));
assertNull(router.process(event2));
CoreEvent resultEvent = router.process(event3);
assertNotNull(sensingMessageProcessor.event);
assertThat(resultEvent, equalTo(sensingMessageProcessor.event));
Message nextMessage = sensingMessageProcessor.event.getMessage();
assertNotNull(nextMessage);
assertTrue(nextMessage.getPayload().getValue() instanceof List<?>);
List<InternalMessage> list = (List<InternalMessage>) nextMessage.getPayload().getValue();
assertEquals(3, list.size());
String[] results = new String[3];
list.stream().map(msg -> msg.getPayload().getValue()).collect(toList()).toArray(results);
// Need to sort result because of MULE-5998
Arrays.sort(results);
assertEquals("test event A", results[0]);
assertEquals("test event B", results[1]);
assertEquals("test event C", results[2]);
}
Aggregations