@Override public void onComplete(AsyncEvent event) { completeRequestSpan(event); }
@Test public void completeRequestSpan_does_nothing_if_listener_is_already_marked_completed() { // given implSpy.alreadyCompleted.set(true); assertThat(tracingStateSpan.isCompleted()).isFalse(); // when implSpy.completeRequestSpan(asyncEventMock); // then assertThat(tracingStateSpan.isCompleted()).isFalse(); assertThat(implSpy.alreadyCompleted.get()).isTrue(); }
@Test public void onComplete_calls_completeRequestSpan_and_does_nothing_else() { // when implSpy.onComplete(asyncEventMock); // then verify(implSpy).onComplete(asyncEventMock); verify(implSpy).completeRequestSpan(asyncEventMock); verifyNoMoreInteractions(implSpy); }
@Test public void completeRequestSpan_marks_listener_as_completed_even_if_unexpected_exception_occurs() { // given Tracer.getInstance().startRequestWithRootSpan("someOtherUnrelatedSpan"); TracingState unrelatedThreadTracingState = TracingState.getCurrentThreadTracingState(); final RuntimeException expectedExplosion = new RuntimeException("kaboom"); SpanRecorder explodingSpanRecorder = new SpanRecorder() { @Override public void spanCompleted(Span span) { throw expectedExplosion; } }; Tracer.getInstance().addSpanLifecycleListener(explodingSpanRecorder); assertThat(implSpy.alreadyCompleted.get()).isFalse(); // when Throwable actualEx = catchThrowable(() -> implSpy.completeRequestSpan(asyncEventMock)); // then assertThat(actualEx).isSameAs(expectedExplosion); assertThat(explodingSpanRecorder.completedSpans).hasSize(0); assertThat(implSpy.alreadyCompleted.get()).isTrue(); // Tracing state got reset back to original from when the method was called. assertThat(TracingState.getCurrentThreadTracingState()).isEqualTo(unrelatedThreadTracingState); }
implSpy.completeRequestSpan(asyncEventMock);