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