diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java index 454d8a94e..a5ba16000 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/async/ExecutorBeanPostProcessorTests.java @@ -176,4 +176,28 @@ public class ExecutorBeanPostProcessorTests { } } + @Test + public void should_throw_real_exception_when_using_proxy() throws Exception { + // for LazyTraceExecutor + Mockito.when(this.beanFactory.getBean(Tracing.class)) + .thenReturn(Tracing.newBuilder().build()); + Mockito.when(this.beanFactory.getBean(SpanNamer.class)) + .thenReturn(new DefaultSpanNamer()); + + Object o = new ExecutorBeanPostProcessor(this.beanFactory) + .postProcessAfterInitialization(new RejectedExecutionExecutor(), "fooExecutor"); + + then(o).isInstanceOf(RejectedExecutionExecutor.class); + then(ClassUtils.isCglibProxy(o)).isTrue(); + thenThrownBy(() -> ((RejectedExecutionExecutor) o).execute(() -> {})) + .isInstanceOf(RejectedExecutionException.class) + .hasMessage("rejected"); + } + + class RejectedExecutionExecutor implements Executor { + @Override public void execute(Runnable task) { + throw new RejectedExecutionException("rejected"); + } + } + } \ No newline at end of file