use of org.mule.runtime.api.interception.ProcessorParameterValue in project mule by mulesoft.
the class ReactiveInterceptorAdapterTestCase method threadForBeforeAfter.
@Test
public void threadForBeforeAfter() throws Exception {
AtomicReference<Thread> threadBefore = new AtomicReference<>();
AtomicReference<Thread> threadAfter = new AtomicReference<>();
ProcessorInterceptor interceptor = prepareInterceptor(new ProcessorInterceptor() {
@Override
public void before(ComponentLocation location, Map<String, ProcessorParameterValue> parameters, InterceptionEvent event) {
threadBefore.set(currentThread());
}
@Override
public void after(ComponentLocation location, InterceptionEvent event, java.util.Optional<Throwable> thrown) {
threadAfter.set(currentThread());
}
});
startFlowWithInterceptors(interceptor);
process(flow, eventBuilder(muleContext).message(Message.of("")).build());
assertThat(threadAfter.get().getName(), threadAfter.get().getName(), not(is(NonBlockingProcessorInApp.SELECTOR_EMULATOR_SCHEDULER_NAME)));
assertThat(threadAfter.get().getName(), threadAfter.get().getThreadGroup().getName(), is(threadBefore.get().getThreadGroup().getName()));
}
use of org.mule.runtime.api.interception.ProcessorParameterValue in project mule by mulesoft.
the class ReactiveInterceptorAdapterTestCase method interceptorSkipsProcessor.
@Test
public void interceptorSkipsProcessor() throws Exception {
ProcessorInterceptor interceptor = prepareInterceptor(new ProcessorInterceptor() {
@Override
public CompletableFuture<InterceptionEvent> around(ComponentLocation location, Map<String, ProcessorParameterValue> parameters, InterceptionEvent event, InterceptionAction action) {
return action.skip();
}
});
startFlowWithInterceptors(interceptor);
CoreEvent result = process(flow, eventBuilder(muleContext).message(Message.of("")).build());
assertThat(result.getMessage().getPayload().getValue(), is(""));
assertThat(result.getError().isPresent(), is(false));
if (useMockInterceptor) {
InOrder inOrder = inOrder(processor, interceptor);
inOrder.verify(interceptor).before(any(), any(), any());
inOrder.verify(interceptor).around(any(), any(), any(), any());
inOrder.verify(processor, never()).process(any());
inOrder.verify(interceptor).after(any(), any(), eq(empty()));
assertThat(((InternalEvent) result).getInternalParameters().entrySet(), hasSize(0));
verifyParametersResolvedAndDisposed(times(1));
}
}
use of org.mule.runtime.api.interception.ProcessorParameterValue 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.api.interception.ProcessorParameterValue 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.api.interception.ProcessorParameterValue in project mule by mulesoft.
the class ReactiveInterceptorAdapterTestCase method interceptorThrowsExceptionBefore.
@Test
public void interceptorThrowsExceptionBefore() throws Exception {
RuntimeException expectedException = new RuntimeException("Some Error");
ProcessorInterceptor interceptor = prepareInterceptor(new ProcessorInterceptor() {
@Override
public void before(ComponentLocation location, Map<String, ProcessorParameterValue> parameters, InterceptionEvent event) {
throw expectedException;
}
});
startFlowWithInterceptors(interceptor);
expected.expectCause(sameInstance(expectedException));
try {
process(flow, eventBuilder(muleContext).message(Message.of("")).build());
} finally {
if (useMockInterceptor) {
InOrder inOrder = inOrder(processor, interceptor);
inOrder.verify(interceptor).before(any(), any(), any());
inOrder.verify(interceptor, never()).around(any(), any(), any(), any());
inOrder.verify(processor, never()).process(any());
inOrder.verify(interceptor).after(any(), any(), eq(of(expectedException)));
verifyParametersResolvedAndDisposed(times(1));
}
}
}
Aggregations