in client/src/testFixtures/java/org/apache/cassandra/sidecar/client/SidecarClientTest.java [1134:1224]
void testStreamSSTableComponentFailsMidStream(boolean useLegacyApi) 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()
{
}
@Override
public void onError(Throwable throwable)
{
latch.countDown();
assertThat(throwable).isNotNull();
}
};
InputStream inputStream = resourceInputStream("sstables/nb-1-big-TOC.txt");
Buffer buffer = Okio.buffer(Okio.source(inputStream)).getBuffer();
Okio.use(buffer, buffer1 -> {
try
{
return buffer1.writeAll(Okio.source(inputStream));
}
catch (IOException e)
{
throw new RuntimeException(e);
}
});
SidecarInstanceImpl sidecarInstance = RequestExecutorTest.newSidecarInstance(server);
MockResponse response =
new MockResponse().setResponseCode(OK.code())
.setHeader(HttpHeaderNames.CONTENT_TYPE.toString(),
HttpHeaderValues.APPLICATION_OCTET_STREAM)
.setHeader(HttpHeaderNames.ACCEPT_RANGES.toString(), "bytes")
.setBody(buffer)
.setSocketPolicy(SocketPolicy.DISCONNECT_DURING_RESPONSE_BODY);
server.enqueue(response);
String expectedPath;
if (useLegacyApi)
{
client.streamSSTableComponent(sidecarInstance,
"cycling",
"cyclist_name",
"2023.04.12",
"nb-1-big-TOC.txt",
null,
mockStreamConsumer);
expectedPath = ApiEndpointsV1.COMPONENTS_ROUTE
.replaceAll(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-1-big-TOC.txt");
}
else
{
ListSnapshotFilesResponse.FileInfo fileInfo = new ListSnapshotFilesResponse.FileInfo(2023,
server.getHostName(),
server.getPort(), 0,
"2023.04.12",
"cycling",
"cyclist_name-1234",
"nb-1-big-TOC.txt");
client.streamSSTableComponent(sidecarInstance, fileInfo, null, mockStreamConsumer);
expectedPath = fileInfo.componentDownloadUrl();
}
assertThat(latch.await(1, TimeUnit.MINUTES)).isTrue();
RecordedRequest request = server.takeRequest();
assertThat(request.getPath()).isEqualTo(expectedPath);
assertThat(request.getHeader("User-Agent")).isEqualTo("cassandra-sidecar-test/0.0.1");
assertThat(request.getHeader("range")).isNull();
assertThat(receivedBytes).hasSizeGreaterThan(0);
}
}