public static ChannelHandlerContextMocks mockChannelHandlerContextWithTraceInfo() { return mockChannelHandlerContextWithTraceInfo("123"); }
@Test public void executeAsyncCall_shouldReturnCompletableFuture() throws Exception { // given String expectedResult = UUID.randomUUID().toString(); ctxMock = TestUtil.mockChannelHandlerContextWithTraceInfo().mockContext; Span parentSpan = Tracer.getInstance().getCurrentSpan(); AtomicReference<Span> runningSpan = new AtomicReference<>(); // when CompletableFuture<String> completableFuture = AsyncNettyHelper.supplyAsync( () -> { runningSpan.set(Tracer.getInstance().getCurrentSpan()); return expectedResult; }, executor, ctxMock); // then assertThat(completableFuture.isCompletedExceptionally()).isFalse(); assertThat(completableFuture.get()).isEqualTo(expectedResult); // verify new span is not created, but existing span does successfully hop threads assertThat(runningSpan.get()).isEqualTo(parentSpan); }
@Test public void executeAsyncCall_shouldReturnCompletableFutureUsingCircuitBreaker() throws Exception { // given String expectedResult = UUID.randomUUID().toString(); ctxMock = TestUtil.mockChannelHandlerContextWithTraceInfo().mockContext; CircuitBreaker<String> circuitBreaker = spy(new CircuitBreakerImpl<>()); Span parentSpan = Tracer.getInstance().getCurrentSpan(); AtomicReference<Span> runningSpan = new AtomicReference<>(); // when CompletableFuture<String> circuitBreakerCompletableFuture = AsyncNettyHelper.supplyAsync( () -> { runningSpan.set(Tracer.getInstance().getCurrentSpan()); return expectedResult; }, circuitBreaker, executor, ctxMock); // then verify(circuitBreaker).executeAsyncCall(anyObject()); assertThat(circuitBreakerCompletableFuture.isCompletedExceptionally()).isFalse(); assertThat(circuitBreakerCompletableFuture.get()).isEqualTo(expectedResult); // verify new span is not created, but existing span does successfully hop threads assertThat(runningSpan.get()).isEqualTo(parentSpan); }
@Test public void executeAsyncCall_shouldReturnCompletableFutureUsingSpanName() throws Exception { // given String expectedResult = UUID.randomUUID().toString(); String expectedSpanName = "nonCircuitBreakerWithSpan"; ctxMock = TestUtil.mockChannelHandlerContextWithTraceInfo().mockContext; Span parentSpan = Tracer.getInstance().getCurrentSpan(); AtomicReference<Span> runningSpan = new AtomicReference<>(); // when CompletableFuture<String> completableFuture = AsyncNettyHelper.supplyAsync( expectedSpanName, () -> { runningSpan.set(Tracer.getInstance().getCurrentSpan()); return expectedResult; }, executor, ctxMock); // then assertThat(completableFuture.isCompletedExceptionally()).isFalse(); assertThat(completableFuture.get()).isEqualTo(expectedResult); // verify span is as expected assertThat(runningSpan.get().getParentSpanId()).isEqualTo(parentSpan.getSpanId()); assertThat(runningSpan.get().getSpanName()).isEqualTo(expectedSpanName); assertThat(runningSpan.get().getTraceId()).isEqualTo(parentSpan.getTraceId()); }
@Test public void executeAsyncCall_shouldReturnCompletableFutureUsingCircuitBreakerWithSpanName() throws Exception { // given String expectedResult = UUID.randomUUID().toString(); String expectedSpanName = "circuitBreakerWithSpan"; ctxMock = TestUtil.mockChannelHandlerContextWithTraceInfo().mockContext; Span parentSpan = Tracer.getInstance().getCurrentSpan(); CircuitBreaker<String> circuitBreaker = spy(new CircuitBreakerImpl<>()); AtomicReference<Span> runningSpan = new AtomicReference<>(); // when CompletableFuture<String> circuitBreakerFuture = AsyncNettyHelper.supplyAsync( expectedSpanName, () -> { runningSpan.set(Tracer.getInstance().getCurrentSpan()); return expectedResult; }, circuitBreaker, executor, ctxMock); // then assertThat(circuitBreakerFuture.isCompletedExceptionally()).isFalse(); assertThat(circuitBreakerFuture.get()).isEqualTo(expectedResult); verify(circuitBreaker).executeAsyncCall(anyObject()); // verify span is as expected assertThat(runningSpan.get().getParentSpanId()).isEqualTo(parentSpan.getSpanId()); assertThat(runningSpan.get().getSpanName()).isEqualTo(expectedSpanName); assertThat(runningSpan.get().getTraceId()).isEqualTo(parentSpan.getTraceId()); } }