diff --git a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserver.java b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserver.java index d5f1aa22a54acee33d98a9212725616fbae03111..1d355f5fd8d03b77f32b3104564f365a4c81a508 100644 --- a/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserver.java +++ b/forwarder/src/main/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserver.java @@ -156,13 +156,14 @@ public class EingangStubReceiverStreamObserver implements StreamObserver<GrpcRou if (Objects.isNull(currentFile)) { throw new IllegalStateException("File content received before metadata."); } - try { - pipedOutput.write(content.getContent().toByteArray()); - if (content.getIsEndOfFile()) { - handleEndOfFile(); + if (content.getIsEndOfFile()) { + handleEndOfFile(); + } else { + try { + pipedOutput.write(content.getContent().toByteArray()); + } catch (IOException e) { + throw new TechnicalException("Error when writing file content.", e); } - } catch (IOException e) { - throw new TechnicalException("Error when writing file content.", e); } } diff --git a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserverTest.java b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserverTest.java index f4bacd0b2c16dc6db7749bfe7a49e6b20473aebf..d14d99362f0f9d61e80448a4a0a196137607ab55 100644 --- a/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserverTest.java +++ b/forwarder/src/test/java/de/ozgcloud/eingang/forwarder/EingangStubReceiverStreamObserverTest.java @@ -502,42 +502,61 @@ class EingangStubReceiverStreamObserverTest { setCurrentFile(incomingFile); } - @Test - @SneakyThrows - void shouldWriteContentToOutputStream() { - observer.storeFileContent(GrpcFileContentTestFactory.create()); + @Nested + class TestOnEndOfFile { - verify(pipedOutput).write(GrpcFileContentTestFactory.CONTENT); - } + private GrpcFileContent fileContent = GrpcFileContentTestFactory.createBuilder().setIsEndOfFile(true).build(); - @Test - void shouldCallHandleEndOfFile() { - doNothing().when(observer).handleEndOfFile(); - var fileContent = GrpcFileContentTestFactory.createBuilder().setIsEndOfFile(true).build(); + @BeforeEach + void setUp() { + doNothing().when(observer).handleEndOfFile(); + } + + @Test + void shouldCallHandleEndOfFile() { + observer.storeFileContent(fileContent); + + verify(observer).handleEndOfFile(); + } - observer.storeFileContent(fileContent); + @Test + @SneakyThrows + void shouldNotWriteContentToOutputStream() { + observer.storeFileContent(fileContent); - verify(observer).handleEndOfFile(); + verify(pipedOutput, never()).write(any()); + } } - @Test - void shouldNotCallHandleEndOfFile() { - var fileContent = GrpcFileContentTestFactory.createBuilder().setIsEndOfFile(false).build(); + @Nested + class TestOnNotEndOfFile { - observer.storeFileContent(fileContent); + private GrpcFileContent fileContent = GrpcFileContentTestFactory.createBuilder().setIsEndOfFile(false).build(); - verify(observer, never()).handleEndOfFile(); - } + @Test + @SneakyThrows + void shouldWriteContentToOutputStream() { + observer.storeFileContent(fileContent); - @Test - @SneakyThrows - void shouldThrowTechnicalExceptionOnIOException() { - doThrow(new IOException()).when(pipedOutput).write(any()); - var fileContent = GrpcFileContentTestFactory.create(); + verify(pipedOutput).write(GrpcFileContentTestFactory.CONTENT); + } - assertThrows(TechnicalException.class, () -> { + @Test + void shouldNotCallHandleEndOfFile() { observer.storeFileContent(fileContent); - }); + + verify(observer, never()).handleEndOfFile(); + } + + @Test + @SneakyThrows + void shouldThrowTechnicalExceptionOnIOException() { + doThrow(new IOException()).when(pipedOutput).write(any()); + + assertThrows(TechnicalException.class, () -> { + observer.storeFileContent(fileContent); + }); + } } } }