public ErrorCode getErrorCode() { return bodyDecoder.errorCode(); }
public ErrorCode getErrorCode() { return decoder.errorCode(); }
public ErrorCode getErrorCode() { return bodyDecoder.errorCode(); }
builder.append(errorCode()); builder.append('|');
builder.append(errorCode()); builder.append('|');
@Test public void shouldSendErrorMessageOnRequestWithNewerProtocolVersion() { // given final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, Short.MAX_VALUE, ValueType.JOB, JobIntent.CREATE); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.INVALID_CLIENT_VERSION); }
@Test public void shouldSendErrorMessageIfPartitionNotFound() { // given final int writtenLength = writeCommandRequestToBuffer(buffer, 99, null, ValueType.JOB, JobIntent.CREATE); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); final List<DirectBuffer> sentResponses = serverOutput.getSentResponses(); assertThat(sentResponses).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); }
@Test public void shouldSendErrorMessageIfPartitionNotFound() { // given final int writtenLength = writeCommandRequestToBuffer(buffer, 99, null, ValueType.JOB, JobIntent.CREATE); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); final List<DirectBuffer> sentResponses = serverOutput.getSentResponses(); assertThat(sentResponses).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); }
@Test public void shouldSendErrorMessageOnUnsupportedRequest() { // given final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, null, ValueType.SBE_UNKNOWN, Intent.UNKNOWN); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.UNSUPPORTED_MESSAGE); }
@Test public void shouldSendErrorMessageOnRequestWithNewerProtocolVersion() { // given final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, Short.MAX_VALUE, ValueType.JOB, JobIntent.CREATE); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.INVALID_CLIENT_VERSION); }
@Test public void shouldSendErrorMessageOnUnsupportedRequest() { // given final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, null, ValueType.SBE_UNKNOWN, Intent.UNKNOWN); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.UNSUPPORTED_MESSAGE); }
@Test public void shouldSendErrorMessageOnInvalidRequest() { // given // request is invalid because Value type DEPLOYMENT does not match getValue contents, i.e. // required // values are not present final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, null, ValueType.MESSAGE, MessageIntent.PUBLISH); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.MALFORMED_REQUEST); }
@Test public void shouldSendErrorMessageOnInvalidRequest() { // given // request is invalid because Value type DEPLOYMENT does not match getValue contents, i.e. // required // values are not present final int writtenLength = writeCommandRequestToBuffer( buffer, LOG_STREAM_PARTITION_ID, null, ValueType.MESSAGE, MessageIntent.PUBLISH); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, writtenLength, REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.MALFORMED_REQUEST); }
@Test public void shouldNotHandleUnknownRequest() { // given headerEncoder .wrap(buffer, 0) .blockLength(commandRequestEncoder.sbeBlockLength()) .schemaId(commandRequestEncoder.sbeSchemaId()) .templateId(999) .version(1); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, headerEncoder.encodedLength(), REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.INVALID_MESSAGE_TEMPLATE); }
@Test public void shouldNotHandleUnknownRequest() { // given headerEncoder .wrap(buffer, 0) .blockLength(commandRequestEncoder.sbeBlockLength()) .schemaId(commandRequestEncoder.sbeSchemaId()) .templateId(999) .version(1); // when final boolean isHandled = messageHandler.onRequest( serverOutput, DEFAULT_ADDRESS, buffer, 0, headerEncoder.encodedLength(), REQUEST_ID); // then assertThat(isHandled).isTrue(); assertThat(serverOutput.getSentResponses()).hasSize(1); final ErrorResponseDecoder errorDecoder = serverOutput.getAsErrorResponse(0); assertThat(errorDecoder.errorCode()).isEqualTo(ErrorCode.INVALID_MESSAGE_TEMPLATE); }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@Test public void shouldWriteResponse() { responseWriter.errorCode(ErrorCode.PARTITION_LEADER_MISMATCH).errorMessage("error message"); final UnsafeBuffer buf = new UnsafeBuffer(new byte[responseWriter.getLength()]); // when responseWriter.write(buf, 0); // then int offset = 0; messageHeaderDecoder.wrap(buf, offset); assertThat(messageHeaderDecoder.schemaId()).isEqualTo(responseDecoder.sbeSchemaId()); assertThat(messageHeaderDecoder.version()).isEqualTo(responseDecoder.sbeSchemaVersion()); assertThat(messageHeaderDecoder.templateId()).isEqualTo(responseDecoder.sbeTemplateId()); assertThat(messageHeaderDecoder.blockLength()).isEqualTo(responseDecoder.sbeBlockLength()); offset += messageHeaderDecoder.encodedLength(); responseDecoder.wrap( buf, offset, responseDecoder.sbeBlockLength(), responseDecoder.sbeSchemaVersion()); assertThat(responseDecoder.errorCode()).isEqualTo(ErrorCode.PARTITION_LEADER_MISMATCH); assertThat(responseDecoder.errorData()).isEqualTo("error message"); } }
@Override public void wrap(DirectBuffer buffer, int offset, int length) { reset(); final int frameEnd = offset + length; headerDecoder.wrap(buffer, offset); offset += headerDecoder.encodedLength(); bodyDecoder.wrap(buffer, offset, headerDecoder.blockLength(), headerDecoder.version()); errorCode = bodyDecoder.errorCode(); offset += bodyDecoder.sbeBlockLength(); final int errorDataLength = bodyDecoder.errorDataLength(); offset += ErrorResponseDecoder.errorDataHeaderLength(); errorData.wrap(buffer, offset, errorDataLength); offset += errorDataLength; bodyDecoder.limit(offset); assert bodyDecoder.limit() == frameEnd : "Decoder read only to position " + bodyDecoder.limit() + " but expected " + frameEnd + " as final position"; }