diff --git a/README.md b/README.md index e28c961c2f25ffeb170a0b88db7a0a7b0ff114d1..277d86d22e76df0cfe5f166903f1fc3a69eae299 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ ## Changelog -### 4.6.0-SNAPSHOT +### 4.7.0-SNAPSHOT + +### 4.6.0 * Update [OZGCloud License Generator](ozgcloud-common-license/readme.md) ### 4.5.0 diff --git a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java index 84c34d902fdafa5b98e80f55fa78862d7072ad0c..49f72606a3afc7f0534f98405406fb1be1f0668f 100644 --- a/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java +++ b/ozgcloud-common-lib/src/main/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloader.java @@ -123,11 +123,15 @@ public class GrpcBinaryFileServerDownloader<T> { } void tryCompleteRequest() { - if (downloadFinished.get()) { + if (shouldCompleteRequest()) { completeRequest(); } } + boolean shouldCompleteRequest() { + return downloadFinished.get() && requestFinished.compareAndSet(false, true); + } + void completeRequest() { if (requestFinished.getAndSet(true)) { return; diff --git a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java index 3da066494a2a2effbe89fa32bfbcb37702d74f48..215303f04a0d8312d085725a0506ca20cae35ca1 100644 --- a/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java +++ b/ozgcloud-common-lib/src/test/java/de/ozgcloud/common/binaryfile/GrpcBinaryFileServerDownloaderTest.java @@ -318,9 +318,16 @@ class GrpcBinaryFileServerDownloaderTest { @Nested class TestTryCompleteRequest { + @Test + void shouldCallShouldCompleteRequest() { + downloader.tryCompleteRequest(); + + verify(downloader).shouldCompleteRequest(); + } + @Test void shouldCallCompleteRequest() { - setDownloadFinishedField(true); + doReturn(true).when(downloader).shouldCompleteRequest(); downloader.tryCompleteRequest(); @@ -329,7 +336,7 @@ class GrpcBinaryFileServerDownloaderTest { @Test void shouldNotCallCompleteRequest() { - setDownloadFinishedField(false); + doReturn(false).when(downloader).shouldCompleteRequest(); downloader.tryCompleteRequest(); @@ -337,6 +344,65 @@ class GrpcBinaryFileServerDownloaderTest { } } + @Nested + class TestShouldCompleteRequest { + + @Nested + class TestWhenDownloadFinished { + + @BeforeEach + void init() { + setDownloadFinishedField(true); + } + + @Test + void shouldReturnTrue() { + var result = downloader.shouldCompleteRequest(); + + assertThat(result).isTrue(); + } + + @Test + void shouldReturnFalseIfRequestFinished() { + setRequestFinishedField(true); + + var result = downloader.shouldCompleteRequest(); + + assertThat(result).isFalse(); + } + + @Test + void shouldUpdateRequestFinished() { + downloader.shouldCompleteRequest(); + + assertThat(getRequestFinished()).isTrue(); + } + } + + @Nested + class TestWhenDownloadRunning { + + @BeforeEach + void init() { + setDownloadFinishedField(false); + } + + @Test + void shouldReturnFalse() { + var result = downloader.shouldCompleteRequest(); + + assertThat(result).isFalse(); + } + + @Test + void shouldNotUpdateRequestFinished() { + downloader.shouldCompleteRequest(); + + assertThat(getRequestFinished()).isFalse(); + } + } + } + @Nested class TestCompleteRequest { @@ -345,7 +411,7 @@ class GrpcBinaryFileServerDownloaderTest { @BeforeEach void mock() { - setSendingFinishedField(false); + setRequestFinishedField(false); setDownloadFinishedField(true); setInputStreamField(inputStream); } @@ -441,26 +507,26 @@ class GrpcBinaryFileServerDownloaderTest { } - @SneakyThrows private void setOutputStreamField(OutputStream outputStream) { ReflectionTestUtils.setField(downloader, "outputStream", outputStream); } - @SneakyThrows private void setInputStreamField(InputStream inputStream) { ReflectionTestUtils.setField(downloader, "inputStream", inputStream); } - @SneakyThrows private void setDownloadFinishedField(boolean downloadFinished) { ReflectionTestUtils.setField(downloader, "downloadFinished", new AtomicBoolean(downloadFinished)); } - @SneakyThrows - private void setSendingFinishedField(boolean requestFinished) { + private void setRequestFinishedField(boolean requestFinished) { ReflectionTestUtils.setField(downloader, "requestFinished", new AtomicBoolean(requestFinished)); } + private boolean getRequestFinished() { + return ReflectionTestUtils.getField(downloader, "requestFinished", AtomicBoolean.class).get(); + } + static class GrpcResponseDummy { } } \ No newline at end of file