use of io.crate.blob.BlobTransferTarget in project crate by crate.
the class BlobHeadRequestHandlerTests method testPutHeadChunkRunnableFileDoesntGrow.
@Test
public void testPutHeadChunkRunnableFileDoesntGrow() throws Exception {
// this test is rather slow, tune wait time in PutHeadChunkRunnable?
expectedException.expect(HeadChunkFileTooSmallException.class);
File file = File.createTempFile("test", "");
File notExisting = new File("./does/not/exist");
try (final FileOutputStream outputStream = new FileOutputStream(file)) {
outputStream.write(new byte[] { 0x65 });
}
UUID transferId = UUID.randomUUID();
BlobTransferTarget transferTarget = mock(BlobTransferTarget.class);
TransportService transportService = mock(TransportService.class);
DiscoveryNode discoveryNode = mock(DiscoveryNode.class);
DigestBlob digestBlob = mock(DigestBlob.class);
when(digestBlob.file()).thenReturn(notExisting);
when(digestBlob.getContainerFile()).thenReturn(file);
PutHeadChunkRunnable runnable = new PutHeadChunkRunnable(digestBlob, 5, transportService, transferTarget, discoveryNode, transferId);
@SuppressWarnings("unchecked") TransportFuture<TransportResponse.Empty> result = mock(TransportFuture.class);
when(transportService.submitRequest(eq(discoveryNode), eq(BlobHeadRequestHandler.Actions.PUT_BLOB_HEAD_CHUNK), any(TransportRequest.class), any(TransportRequestOptions.class), eq(EmptyTransportResponseHandler.INSTANCE_SAME))).thenReturn(result);
runnable.run();
verify(digestBlob).getContainerFile();
}
use of io.crate.blob.BlobTransferTarget in project crate by crate.
the class BlobHttpIntegrationTest method assertNoActiveTransfersRemaining.
@After
public void assertNoActiveTransfersRemaining() throws Exception {
Iterable<BlobTransferTarget> transferTargets = internalCluster().getInstances(BlobTransferTarget.class);
final Field activeTransfersField = BlobTransferTarget.class.getDeclaredField("activeTransfers");
activeTransfersField.setAccessible(true);
assertBusy(() -> {
for (BlobTransferTarget transferTarget : transferTargets) {
Map<UUID, BlobTransferStatus> activeTransfers = null;
try {
activeTransfers = (Map<UUID, BlobTransferStatus>) activeTransfersField.get(transferTarget);
assertThat(activeTransfers.keySet(), empty());
} catch (IllegalAccessException e) {
throw Throwables.propagate(e);
}
}
});
}
use of io.crate.blob.BlobTransferTarget in project crate by crate.
the class BlobHeadRequestHandlerTests method testPutHeadChunkRunnableFileGrowth.
@Test
public void testPutHeadChunkRunnableFileGrowth() throws Exception {
File file = File.createTempFile("test", "");
try (final FileOutputStream outputStream = new FileOutputStream(file)) {
outputStream.write(new byte[] { 0x65 });
UUID transferId = UUID.randomUUID();
BlobTransferTarget blobTransferTarget = mock(BlobTransferTarget.class);
TransportService transportService = mock(TransportService.class);
DiscoveryNode discoveryNode = mock(DiscoveryNode.class);
DigestBlob digestBlob = mock(DigestBlob.class);
when(digestBlob.file()).thenReturn(file);
ScheduledExecutorService scheduledExecutor = Executors.newSingleThreadScheduledExecutor(EsExecutors.daemonThreadFactory("blob-head"));
try {
scheduledExecutor.schedule(new Runnable() {
@Override
public void run() {
try {
outputStream.write(new byte[] { 0x66, 0x67, 0x68, 0x69 });
} catch (IOException ex) {
//pass
}
}
}, 800, TimeUnit.MILLISECONDS);
PutHeadChunkRunnable runnable = new PutHeadChunkRunnable(digestBlob, 5, transportService, blobTransferTarget, discoveryNode, transferId);
@SuppressWarnings("unchecked") TransportFuture<TransportResponse.Empty> result = mock(TransportFuture.class);
when(transportService.submitRequest(eq(discoveryNode), eq(BlobHeadRequestHandler.Actions.PUT_BLOB_HEAD_CHUNK), any(TransportRequest.class), any(TransportRequestOptions.class), eq(EmptyTransportResponseHandler.INSTANCE_SAME))).thenReturn(result);
runnable.run();
verify(blobTransferTarget).putHeadChunkTransferFinished(transferId);
verify(transportService, times(2)).submitRequest(eq(discoveryNode), eq(BlobHeadRequestHandler.Actions.PUT_BLOB_HEAD_CHUNK), any(TransportRequest.class), any(TransportRequestOptions.class), eq(EmptyTransportResponseHandler.INSTANCE_SAME));
} finally {
scheduledExecutor.awaitTermination(1, TimeUnit.SECONDS);
scheduledExecutor.shutdownNow();
}
}
}
Aggregations