From dbc3503ce2f10ebe48eac77fe11cdf7d20499516 Mon Sep 17 00:00:00 2001
From: Krzysztof <krzysztof.witukiewicz@mgm-tp.com>
Date: Mon, 7 Apr 2025 12:38:43 +0200
Subject: [PATCH] OZG-7573 OZG-7991 Notify requestObserver about error in
 StreamingFileSender

---
 .../binaryfile/StreamExclusiveFileSender.java | 13 ----
 .../binaryfile/StreamingFileSender.java       |  2 +
 .../StreamExclusiveFileSenderTest.java        | 74 -------------------
 .../binaryfile/StreamingFileSenderTest.java   | 15 ++++
 4 files changed, 17 insertions(+), 87 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 4223d4d..0853e33 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
@@ -27,7 +27,6 @@ import java.io.InputStream;
 import java.util.function.BiFunction;
 import java.util.function.Function;
 
-import de.ozgcloud.common.errorhandling.TechnicalException;
 import io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 import lombok.extern.log4j.Log4j2;
@@ -63,16 +62,4 @@ class StreamExclusiveFileSender<Q, S> extends StreamingFileSender<Q, S> {
 	protected CallStreamObserver<Q> getRequestObserver() {
 		return requestObserver;
 	}
-
-	@Override
-	public void cancelOnTimeout() {
-		super.cancelOnTimeout();
-		requestObserver.onError(new TechnicalException("Timeout on waiting for upload."));
-	}
-
-	@Override
-	public void cancelOnError(Throwable t) {
-		super.cancelOnError(t);
-		requestObserver.onError(t);
-	}
 }
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 de78cf1..3907546 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
@@ -75,12 +75,14 @@ public abstract class StreamingFileSender<Q, S> {
 	public void cancelOnTimeout() {
 		LOG.warn("File transfer canceled on timeout");
 		resultFuture.cancel(true);
+		getRequestObserver().onError(new TechnicalException("Timeout on waiting for upload."));
 		closeStreamReader();
 	}
 
 	public void cancelOnError(Throwable t) {
 		LOG.error("File transfer canceled on error.", t);
 		resultFuture.cancel(true);
+		getRequestObserver().onError(t);
 		closeStreamReader();
 	}
 
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 6ac54ef..6656be6 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
@@ -43,7 +43,6 @@ 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 io.grpc.stub.CallStreamObserver;
 import io.grpc.stub.StreamObserver;
 
@@ -119,77 +118,4 @@ class StreamExclusiveFileSenderTest {
 			verify(requestObserver).onCompleted();
 		}
 	}
-
-	@Nested
-	class TestCancelOnTimeout {
-
-		@Mock
-		private CompletableFuture<TestResponseType> resultFuture;
-		@Mock
-		private CallStreamObserver<TestRequestType> requestObserver;
-
-		@BeforeEach
-		void init() {
-			ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture);
-			ReflectionTestUtils.setField(fileSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCancelResultFuture() {
-			fileSender.cancelOnTimeout();
-
-			verify(resultFuture).cancel(true);
-		}
-
-		@Test
-		void shouldCallOnError() {
-			fileSender.cancelOnTimeout();
-
-			verify(requestObserver).onError(any(TechnicalException.class));
-		}
-
-		@Test
-		void shouldCloseStreamReader() {
-			fileSender.cancelOnTimeout();
-
-			verify(fileSender).closeStreamReader();
-		}
-	}
-
-	@Nested
-	class TestCancelOnError {
-
-		@Mock
-		private CompletableFuture<TestResponseType> resultFuture;
-		@Mock
-		private CallStreamObserver<TestRequestType> requestObserver;
-		private final Throwable error = new Throwable();
-
-		@BeforeEach
-		void init() {
-			ReflectionTestUtils.setField(fileSender, "resultFuture", resultFuture);
-			ReflectionTestUtils.setField(fileSender, "requestObserver", requestObserver);
-		}
-
-		@Test
-		void shouldCancelResultFuture() {
-			fileSender.cancelOnError(error);
-
-			verify(resultFuture).cancel(true);
-		}
-
-		@Test
-		void shouldCallOnError() {
-			fileSender.cancelOnError(error);
-
-			verify(requestObserver).onError(error);
-		}
-
-		@Test
-		void shouldCloseStreamReader() {
-			fileSender.cancelOnError(error);
-
-			verify(fileSender).closeStreamReader();
-		}
-	}
 }
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 ce12c67..f92a7a7 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
@@ -43,6 +43,7 @@ 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 io.grpc.stub.CallStreamObserver;
 import lombok.AccessLevel;
 import lombok.Getter;
@@ -82,6 +83,13 @@ class StreamingFileSenderTest {
 			verify(resultFuture).cancel(true);
 		}
 
+		@Test
+		void shouldCallOnError() {
+			fileSender.cancelOnTimeout();
+
+			verify(requestObserver).onError(any(TechnicalException.class));
+		}
+
 		@Test
 		void shouldCloseStreams() {
 			fileSender.cancelOnTimeout();
@@ -109,6 +117,13 @@ class StreamingFileSenderTest {
 			verify(resultFuture).cancel(true);
 		}
 
+		@Test
+		void shouldCallOnError() {
+			fileSender.cancelOnError(error);
+
+			verify(requestObserver).onError(error);
+		}
+
 		@Test
 		void shouldCloseStreams() {
 			fileSender.cancelOnError(error);
-- 
GitLab