Search in sources :

Example 1 with PutHeadChunkRunnable

use of io.crate.blob.pending_transfer.PutHeadChunkRunnable 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();
}
Also used : BlobTransferTarget(io.crate.blob.BlobTransferTarget) DigestBlob(io.crate.blob.DigestBlob) DiscoveryNode(org.elasticsearch.cluster.node.DiscoveryNode) PutHeadChunkRunnable(io.crate.blob.pending_transfer.PutHeadChunkRunnable) FileOutputStream(java.io.FileOutputStream) UUID(java.util.UUID) File(java.io.File) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Example 2 with PutHeadChunkRunnable

use of io.crate.blob.pending_transfer.PutHeadChunkRunnable 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();
        }
    }
}
Also used : BlobTransferTarget(io.crate.blob.BlobTransferTarget) DigestBlob(io.crate.blob.DigestBlob) DiscoveryNode(org.elasticsearch.cluster.node.DiscoveryNode) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) PutHeadChunkRunnable(io.crate.blob.pending_transfer.PutHeadChunkRunnable) IOException(java.io.IOException) FileOutputStream(java.io.FileOutputStream) PutHeadChunkRunnable(io.crate.blob.pending_transfer.PutHeadChunkRunnable) UUID(java.util.UUID) File(java.io.File) Test(org.junit.Test) CrateUnitTest(io.crate.test.integration.CrateUnitTest)

Aggregations

BlobTransferTarget (io.crate.blob.BlobTransferTarget)2 DigestBlob (io.crate.blob.DigestBlob)2 PutHeadChunkRunnable (io.crate.blob.pending_transfer.PutHeadChunkRunnable)2 CrateUnitTest (io.crate.test.integration.CrateUnitTest)2 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 UUID (java.util.UUID)2 DiscoveryNode (org.elasticsearch.cluster.node.DiscoveryNode)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 ScheduledExecutorService (java.util.concurrent.ScheduledExecutorService)1