@Test public void doChannelRead_does_nothing_and_returns_CONTINUE_when_msg_is_not_first_or_last_chunk() throws Exception { // given HttpContent contentChunkMsg = mock(HttpContent.class); // when PipelineContinuationBehavior result = handlerSpy.doChannelRead(ctxMock, contentChunkMsg); // then assertThat(result).isEqualTo(CONTINUE); verify(handlerSpy, never()).handleFilterLogic(any(), any(), any(), any(), any()); }
@DataProvider(value = { "CONTINUE", "DO_NOT_FIRE_CONTINUE_EVENT" }, splitBy = "\\|") @Test public void doChannelRead_delegates_to_handleFilterLogic_with_last_chunk_method_references_when_msg_is_LastHttpContent( PipelineContinuationBehavior expectedPipelineContinuationBehavior ) throws Exception { // given doReturn(expectedPipelineContinuationBehavior).when(handlerSpy).handleFilterLogic(any(), any(), any(), any(), any()); // when PipelineContinuationBehavior result = handlerSpy.doChannelRead(ctxMock, lastChunkMsgMock); // then assertThat(result).isEqualTo(expectedPipelineContinuationBehavior); ArgumentCaptor<BiFunction> normalFilterCallCaptor = ArgumentCaptor.forClass(BiFunction.class); ArgumentCaptor<BiFunction> shortCircuitFilterCallCaptor = ArgumentCaptor.forClass(BiFunction.class); verify(handlerSpy).handleFilterLogic(eq(ctxMock), eq(lastChunkMsgMock), eq(state), normalFilterCallCaptor.capture(), shortCircuitFilterCallCaptor.capture()); BiFunction<RequestAndResponseFilter, RequestInfo, RequestInfo> normalFilterCall = normalFilterCallCaptor.getValue(); BiFunction<RequestAndResponseFilter, RequestInfo, Pair<RequestInfo, Optional<ResponseInfo<?>>>> shortCircuitFilterCall = shortCircuitFilterCallCaptor.getValue(); RequestAndResponseFilter filterForNormalCallMock = mock(RequestAndResponseFilter.class); normalFilterCall.apply(filterForNormalCallMock, requestInfoMock); verify(filterForNormalCallMock).filterRequestLastChunkWithFullPayload(requestInfoMock, ctxMock); RequestAndResponseFilter filterForShortCircuitCallMock = mock(RequestAndResponseFilter.class); shortCircuitFilterCall.apply(filterForShortCircuitCallMock, requestInfoMock); verify(filterForShortCircuitCallMock).filterRequestLastChunkWithOptionalShortCircuitResponse(requestInfoMock, ctxMock); }
@DataProvider(value = { "CONTINUE", "DO_NOT_FIRE_CONTINUE_EVENT" }, splitBy = "\\|") @Test public void doChannelRead_delegates_to_handleFilterLogic_with_first_chunk_method_references_when_msg_is_HttpRequest( PipelineContinuationBehavior expectedPipelineContinuationBehavior ) throws Exception { // given doReturn(expectedPipelineContinuationBehavior).when(handlerSpy).handleFilterLogic(any(), any(), any(), any(), any()); // when PipelineContinuationBehavior result = handlerSpy.doChannelRead(ctxMock, firstChunkMsgMock); // then assertThat(result).isEqualTo(expectedPipelineContinuationBehavior); ArgumentCaptor<BiFunction> normalFilterCallCaptor = ArgumentCaptor.forClass(BiFunction.class); ArgumentCaptor<BiFunction> shortCircuitFilterCallCaptor = ArgumentCaptor.forClass(BiFunction.class); verify(handlerSpy).handleFilterLogic(eq(ctxMock), eq(firstChunkMsgMock), eq(state), normalFilterCallCaptor.capture(), shortCircuitFilterCallCaptor.capture()); BiFunction<RequestAndResponseFilter, RequestInfo, RequestInfo> normalFilterCall = normalFilterCallCaptor.getValue(); BiFunction<RequestAndResponseFilter, RequestInfo, Pair<RequestInfo, Optional<ResponseInfo<?>>>> shortCircuitFilterCall = shortCircuitFilterCallCaptor.getValue(); RequestAndResponseFilter filterForNormalCallMock = mock(RequestAndResponseFilter.class); normalFilterCall.apply(filterForNormalCallMock, requestInfoMock); verify(filterForNormalCallMock).filterRequestFirstChunkNoPayload(requestInfoMock, ctxMock); RequestAndResponseFilter filterForShortCircuitCallMock = mock(RequestAndResponseFilter.class); shortCircuitFilterCall.apply(filterForShortCircuitCallMock, requestInfoMock); verify(filterForShortCircuitCallMock).filterRequestFirstChunkWithOptionalShortCircuitResponse(requestInfoMock, ctxMock); }
@Test public void doChannelRead_HttpRequest_throws_exception_when_failed_decoder_result() { // given Throwable decoderFailureCauseMock = mock(Throwable.class); DecoderResult decoderResult = DecoderResult.failure(decoderFailureCauseMock); doReturn(decoderResult).when(firstChunkMsgMock).decoderResult(); state.setRequestInfo(null); // when Throwable thrownException = Assertions.catchThrowable(() -> handlerSpy.doChannelRead(ctxMock, firstChunkMsgMock)); // then assertThat(thrownException).isExactlyInstanceOf(InvalidHttpRequestException.class); assertThat(thrownException.getCause()).isSameAs(decoderFailureCauseMock); }
handlerSpy.doChannelRead(ctxMock, firstChunkMsgMock);