O responseInfo = responseHandlerFunction.handleResponse(response); completableFutureResponse.complete(responseInfo);
@Test public void getAwsRegion_makes_async_request_to_aws_and_returns_the_resulting_region() throws Throwable { // when Pair<CompletableFuture<String>, AsyncResponseHandler<String>> resultAndHandler = executeGetAwsRegionAndExtractHandler(); // then assertThat(resultAndHandler.getLeft()).isCompleted(); String regionResult = resultAndHandler.getLeft().join(); assertThat(regionResult).isEqualTo(CUSTOM_REGION); assertThat(resultAndHandler.getRight().handleResponse(responseMockForAwsMetadataDoc)).isEqualTo(CUSTOM_REGION); }
@Test public void getAwsInstanceId_makes_async_request_to_aws_and_returns_the_resulting_instance_id() throws Throwable { // when Pair<CompletableFuture<String>, AsyncResponseHandler<String>> resultAndHandler = executeGetAwsInstanceIdAndExtractHandler(); // then assertThat(resultAndHandler.getLeft()).isCompleted(); String instanceIdResult = resultAndHandler.getLeft().join(); assertThat(instanceIdResult).isEqualTo(EXAMPLE_AWS_INSTANCE_ID_RESULT); assertThat(resultAndHandler.getRight().handleResponse(responseMockForAwsInstanceId)) .isEqualTo(EXAMPLE_AWS_INSTANCE_ID_RESULT); }
@DataProvider(value = { "true", "false" }) @Test public void onCompleted_completes_completableFutureResponse_with_result_of_responseHandlerFunction( boolean throwException ) throws Throwable { // given Exception ex = new Exception("kaboom"); if (throwException) doThrow(ex).when(responseHandlerFunctionMock).handleResponse(responseMock); // when Response ignoredResult = handlerSpy.onCompleted(responseMock); // then verify(responseHandlerFunctionMock).handleResponse(responseMock); if (throwException) { assertThat(completableFutureResponse).isCompletedExceptionally(); assertThat(completableFutureResponse).hasFailedWithThrowableThat().isEqualTo(ex); } else { assertThat(completableFutureResponse).isCompleted(); assertThat(completableFutureResponse.get()).isEqualTo(responseHandlerResult); } assertThat(ignoredResult).isEqualTo(responseMock); verifyZeroInteractions(responseMock); }
AsyncResponseHandler<String> handler = (AsyncResponseHandler<String>) invocation.getArguments()[1]; try { regionCoreFuture.complete(handler.handleResponse(responseMockForAwsMetadataDoc)); AsyncResponseHandler<String> handler = (AsyncResponseHandler<String>) invocation.getArguments()[1]; try { awsInstanceIdCoreFuture.complete(handler.handleResponse(responseMockForAwsInstanceId));
@DataProvider(value = { "true", "false" }) @Test public void getAwsRegion_returns_AppInfo_UNKNOWN_VALUE_if_response_from_aws_does_not_contain_region_value( boolean useJunkJson ) throws Throwable { // given String result = (useJunkJson) ? "i am not parseable as json" : "{\"notregion\":\"stillnotregion\"}"; doReturn(result).when(responseMockForAwsMetadataDoc).getResponseBody(); // when Pair<CompletableFuture<String>, AsyncResponseHandler<String>> resultAndHandler = executeGetAwsRegionAndExtractHandler(); // then assertThat(resultAndHandler.getLeft()).isCompleted(); String regionResult = resultAndHandler.getLeft().join(); assertThat(regionResult).isEqualTo(AppInfo.UNKNOWN_VALUE); assertThat(resultAndHandler.getRight().handleResponse(responseMockForAwsMetadataDoc)) .isEqualTo(AppInfo.UNKNOWN_VALUE); }
doReturn(responseHandlerResult).when(responseHandlerFunctionMock).handleResponse(responseMock);
private Pair<ObjectHolder<Span>, ObjectHolder<Span>> setupBeforeAndAfterSpanCaptureForOnCompleted() throws Throwable { ObjectHolder<Span> before = new ObjectHolder<>(); ObjectHolder<Span> after = new ObjectHolder<>(); doAnswer(invocation -> { before.setObj(Tracer.getInstance().getCurrentSpan()); return null; }).when(circuitBreakerManualTaskMock).handleEvent(responseMock); doAnswer(invocation -> { after.setObj(Tracer.getInstance().getCurrentSpan()); return responseHandlerResult; }).when(responseHandlerFunctionMock).handleResponse(responseMock); return Pair.of(before, after); }
verify(responseHandlerFunctionMock).handleResponse(responseMock);
@DataProvider(value = { "null", "false", "true" }) @Test public void onCompleted_does_nothing_to_trace_info_if_performSubSpanAroundDownstreamCalls_is_false( Boolean setupForSubspan) throws Throwable { // given Pair<Deque<Span>, Map<String, String>> traceInfo = generateTraceInfo(setupForSubspan); Whitebox.setInternalState(handlerSpy, "distributedTraceStackToUse", traceInfo.getLeft()); Whitebox.setInternalState(handlerSpy, "mdcContextToUse", traceInfo.getRight()); Whitebox.setInternalState(handlerSpy, "performSubSpanAroundDownstreamCalls", false); Pair<ObjectHolder<Span>, ObjectHolder<Span>> actualBeforeAndAfterSpanHolders = setupBeforeAndAfterSpanCaptureForOnCompleted(); // when handlerSpy.onCompleted(responseMock); // then verify(circuitBreakerManualTaskMock).handleEvent(responseMock); verify(responseHandlerFunctionMock).handleResponse(responseMock); assertThat(actualBeforeAndAfterSpanHolders.getLeft().objSet).isTrue(); assertThat(actualBeforeAndAfterSpanHolders.getRight().objSet).isTrue(); assertThat(actualBeforeAndAfterSpanHolders.getLeft().obj) .isEqualTo(actualBeforeAndAfterSpanHolders.getRight().obj); }