diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSender.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSender.java index 8bcf0b31d155859990bba1a99d34fc2cbc830db5..92f9170cc4193a9372d91b7ce59e8f51b45c2215 100644 --- a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSender.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSender.java @@ -66,16 +66,12 @@ class StreamExclusiveFileSender<Q, S> extends StreamingFileSender<Q, S> { } public void cancelOnTimeout() { - LOG.warn("File transfer canceled on timeout"); - getResultFuture().cancel(true); + super.cancelOnTimeout(); requestObserver.onError(new TechnicalException("Timeout on waiting for upload.")); - closeStreams(); } public void cancelOnError(Throwable t) { - LOG.error("File tranfer canceled on error.", t); - getResultFuture().cancel(true); + super.cancelOnError(t); requestObserver.onError(t); - closeStreams(); } } diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamingFileSender.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamingFileSender.java index 926ca009320f38977b2f7d367ab29f48f533a4c9..f70efbc3d13be6e0a4c75164a2b6d05c4f2237fe 100644 --- a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamingFileSender.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/StreamingFileSender.java @@ -72,6 +72,18 @@ public abstract class StreamingFileSender<Q, S> { public abstract StreamingFileSender<Q, S> send(); + public void cancelOnTimeout() { + LOG.warn("File transfer canceled on timeout"); + resultFuture.cancel(true); + closeStreams(); + } + + public void cancelOnError(Throwable t) { + LOG.error("File tranfer canceled on error.", t); + resultFuture.cancel(true); + closeStreams(); + } + void sendNext() { if (!done.get()) { waitForOberver(); diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSenderTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSenderTest.java index 04b347c7d7d6acaca996cb23df37d451225175db..880ac38f3f969b7b582f152ad194383169584ed2 100644 --- a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSenderTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamExclusiveFileSenderTest.java @@ -39,11 +39,11 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.Spy; +import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType; import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType; import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.common.test.ReflectionTestUtils; import io.grpc.stub.CallStreamObserver; import io.grpc.stub.StreamObserver; @@ -130,7 +130,7 @@ class StreamExclusiveFileSenderTest { @BeforeEach void init() { - doReturn(resultFuture).when(fileSender).getResultFuture(); + ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture); ReflectionTestUtils.setField(fileSender, "requestObserver", requestObserver); } @@ -167,7 +167,7 @@ class StreamExclusiveFileSenderTest { @BeforeEach void init() { - doReturn(resultFuture).when(fileSender).getResultFuture(); + ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture); ReflectionTestUtils.setField(fileSender, "requestObserver", requestObserver); } diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamingFileSenderTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamingFileSenderTest.java index 711461a5f95569be2eed80a80f05b1651f336d8c..47ddd152eefb8aff27109d6187ca59470f1369d5 100644 --- a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamingFileSenderTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/StreamingFileSenderTest.java @@ -28,6 +28,7 @@ import static org.mockito.Mockito.*; import java.io.ByteArrayInputStream; import java.io.InputStream; +import java.util.concurrent.CompletableFuture; import java.util.function.BiFunction; import org.apache.commons.lang3.RandomUtils; @@ -37,6 +38,7 @@ import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; +import org.springframework.test.util.ReflectionTestUtils; import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestRequestType; import de.ozgcloud.common.binaryfile.BinaryFileTestFactory.TestResponseType; @@ -61,6 +63,59 @@ class StreamingFileSenderTest { fileSender = spy(new TestFileSender(chunkBuilder, inputStream, requestObserver)); } + @Nested + class TestCancelOnTimeout { + + @Mock + private CompletableFuture<TestResponseType> resultFuture; + + @BeforeEach + void init() { + ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture); + } + + @Test + void shouldCancelResultFuture() { + fileSender.cancelOnTimeout(); + + verify(resultFuture).cancel(true); + } + + @Test + void shouldCloseStreams() { + fileSender.cancelOnTimeout(); + + verify(fileSender).closeStreams(); + } + } + + @Nested + class TestCancelOnError { + + @Mock + private CompletableFuture<TestResponseType> resultFuture; + private final Throwable error = new Throwable(); + + @BeforeEach + void init() { + ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture); + } + + @Test + void shouldCancelResultFuture() { + fileSender.cancelOnError(error); + + verify(resultFuture).cancel(true); + } + + @Test + void shouldCloseStreams() { + fileSender.cancelOnError(error); + + verify(fileSender).closeStreams(); + } + } + @Nested class TestSendNext {