From a0d677b3bff35dd101f28016fad733737f338a7c Mon Sep 17 00:00:00 2001 From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com> Date: Tue, 1 Apr 2025 17:59:15 +0200 Subject: [PATCH] OZG-7573 OZG-7991 Move cancelOnTimeout() and cancelOnError() to StreamingFileSender --- .../binaryfile/StreamExclusiveFileSender.java | 8 +-- .../binaryfile/StreamingFileSender.java | 12 ++++ .../StreamExclusiveFileSenderTest.java | 6 +- .../binaryfile/StreamingFileSenderTest.java | 55 +++++++++++++++++++ 4 files changed, 72 insertions(+), 9 deletions(-) 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 8bcf0b3..92f9170 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 926ca00..f70efbc 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 04b347c..880ac38 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 711461a..47ddd15 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 { -- GitLab