use of org.apache.kafka.common.network.Send in project kafka by apache.
the class SendBuilderTest method testWriteByteBufferRespectsPosition.
@Test
public void testWriteByteBufferRespectsPosition() {
byte[] data = Utils.utf8("yolo");
assertEquals(4, data.length);
ByteBuffer buffer = ByteBuffer.wrap(data);
SendBuilder builder = new SendBuilder(0);
buffer.limit(2);
builder.writeByteBuffer(buffer);
assertEquals(0, buffer.position());
buffer.position(2);
buffer.limit(4);
builder.writeByteBuffer(buffer);
assertEquals(2, buffer.position());
Send send = builder.build();
ByteBuffer readBuffer = TestUtils.toBuffer(send);
assertEquals("yolo", getString(readBuffer, 4));
}
use of org.apache.kafka.common.network.Send in project kafka by apache.
the class RequestContextTest method testSerdeUnsupportedApiVersionRequest.
@Test
public void testSerdeUnsupportedApiVersionRequest() throws Exception {
int correlationId = 23423;
RequestHeader header = new RequestHeader(ApiKeys.API_VERSIONS, Short.MAX_VALUE, "", correlationId);
RequestContext context = new RequestContext(header, "0", InetAddress.getLocalHost(), KafkaPrincipal.ANONYMOUS, new ListenerName("ssl"), SecurityProtocol.SASL_SSL, ClientInformation.EMPTY, false);
assertEquals(0, context.apiVersion());
// Write some garbage to the request buffer. This should be ignored since we will treat
// the unknown version type as v0 which has an empty request body.
ByteBuffer requestBuffer = ByteBuffer.allocate(8);
requestBuffer.putInt(3709234);
requestBuffer.putInt(29034);
requestBuffer.flip();
RequestAndSize requestAndSize = context.parseRequest(requestBuffer);
assertTrue(requestAndSize.request instanceof ApiVersionsRequest);
ApiVersionsRequest request = (ApiVersionsRequest) requestAndSize.request;
assertTrue(request.hasUnsupportedRequestVersion());
Send send = context.buildResponseSend(new ApiVersionsResponse(new ApiVersionsResponseData().setThrottleTimeMs(0).setErrorCode(Errors.UNSUPPORTED_VERSION.code()).setApiKeys(new ApiVersionCollection())));
ByteBufferChannel channel = new ByteBufferChannel(256);
send.writeTo(channel);
ByteBuffer responseBuffer = channel.buffer();
responseBuffer.flip();
// strip off the size
responseBuffer.getInt();
ResponseHeader responseHeader = ResponseHeader.parse(responseBuffer, ApiKeys.API_VERSIONS.responseHeaderVersion(header.apiVersion()));
assertEquals(correlationId, responseHeader.correlationId());
ApiVersionsResponse response = (ApiVersionsResponse) AbstractResponse.parseResponse(ApiKeys.API_VERSIONS, responseBuffer, (short) 0);
assertEquals(Errors.UNSUPPORTED_VERSION.code(), response.data().errorCode());
assertTrue(response.data().apiKeys().isEmpty());
}
use of org.apache.kafka.common.network.Send in project kafka by apache.
the class RequestResponseTest method verifyFetchResponseFullWrite.
private void verifyFetchResponseFullWrite(short version, FetchResponse fetchResponse) throws Exception {
int correlationId = 15;
short responseHeaderVersion = FETCH.responseHeaderVersion(version);
Send send = fetchResponse.toSend(new ResponseHeader(correlationId, responseHeaderVersion), version);
ByteBufferChannel channel = new ByteBufferChannel(send.size());
send.writeTo(channel);
channel.close();
ByteBuffer buf = channel.buffer();
// read the size
int size = buf.getInt();
assertTrue(size > 0);
// read the header
ResponseHeader responseHeader = ResponseHeader.parse(channel.buffer(), responseHeaderVersion);
assertEquals(correlationId, responseHeader.correlationId());
assertEquals(fetchResponse.serialize(version), buf);
FetchResponseData deserialized = new FetchResponseData(new ByteBufferAccessor(buf), version);
ObjectSerializationCache serializationCache = new ObjectSerializationCache();
assertEquals(size, responseHeader.size(serializationCache) + deserialized.size(serializationCache, version));
}
use of org.apache.kafka.common.network.Send in project kafka by apache.
the class FetchResponseBenchmark method testSerializeFetchResponse.
@Benchmark
public int testSerializeFetchResponse() throws IOException {
Send send = fetchResponse.toSend(header, ApiKeys.FETCH.latestVersion());
ByteBufferChannel channel = new ByteBufferChannel(send.size());
send.writeTo(channel);
return channel.buffer().limit();
}
use of org.apache.kafka.common.network.Send in project kafka by apache.
the class FetchRequestBenchmark method testSerializeFetchRequestForReplica.
@Benchmark
public int testSerializeFetchRequestForReplica() throws IOException {
Send send = replicaRequest.toSend(header);
ByteBufferChannel channel = new ByteBufferChannel(send.size());
send.writeTo(channel);
return channel.buffer().limit();
}
Aggregations