in client/src/testFixtures/java/org/apache/cassandra/sidecar/client/SidecarClientTest.java [634:703]
void testStreamSSTableComponentWithRange() throws Exception
{
try (MockWebServer server = new MockWebServer())
{
CountDownLatch latch = new CountDownLatch(1);
List<byte[]> receivedBytes = new ArrayList<>();
StreamConsumer mockStreamConsumer = new StreamConsumer()
{
@Override
public void onRead(StreamBuffer buffer)
{
assertThat(buffer.readableBytes()).isGreaterThan(0);
byte[] dst = new byte[buffer.readableBytes()];
buffer.copyBytes(0, dst, 0, buffer.readableBytes());
receivedBytes.add(dst);
}
@Override
public void onComplete()
{
latch.countDown();
}
@Override
public void onError(Throwable throwable)
{
latch.countDown();
fail("Should not encounter an error", throwable);
}
};
SidecarInstanceImpl sidecarInstance = RequestExecutorTest.newSidecarInstance(server);
MockResponse response =
new MockResponse().setResponseCode(PARTIAL_CONTENT.code())
.setHeader(HttpHeaderNames.CONTENT_TYPE.toString(),
HttpHeaderValues.APPLICATION_OCTET_STREAM)
.setHeader(HttpHeaderNames.ACCEPT_RANGES.toString(), "bytes")
.setHeader(HttpHeaderNames.CONTENT_RANGE.toString(), "bytes 10-20/80")
.setBody("TOC.txt\nSt");
server.enqueue(response);
client.streamSSTableComponent(sidecarInstance,
"cycling",
"cyclist_name",
"2023.04.12",
"nb-203-big-Data.db",
HttpRange.of(10, 20),
mockStreamConsumer);
assertThat(latch.await(1, TimeUnit.MINUTES)).isTrue();
RecordedRequest request = server.takeRequest();
assertThat(request.getPath())
.isEqualTo(ApiEndpointsV1.COMPONENTS_ROUTE
.replaceAll(ApiEndpointsV1.KEYSPACE_PATH_PARAM, "cycling")
.replaceAll(ApiEndpointsV1.TABLE_PATH_PARAM, "cyclist_name")
.replaceAll(ApiEndpointsV1.SNAPSHOT_PATH_PARAM, "2023.04.12")
.replaceAll(ApiEndpointsV1.COMPONENT_PATH_PARAM, "nb-203-big-Data.db"));
assertThat(request.getHeader("User-Agent")).isEqualTo("cassandra-sidecar-test/0.0.1");
assertThat(request.getHeader("range")).isEqualTo("bytes=10-20");
byte[] bytes = receivedBytes.stream()
.collect(ByteArrayOutputStream::new,
(outputStream, src) -> outputStream.write(src, 0, src.length),
(outputStream, src) -> {
})
.toByteArray();
assertThat(new String(bytes, StandardCharsets.UTF_8)).isEqualTo("TOC.txt\nSt");
}
}