diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java index 5d4e591bf082e99a9c911dd187deb9673e1d6a11..7d876064b1ae2e92f20f037f7a6a9fa94d4bf1f3 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamer.java @@ -67,6 +67,7 @@ public class GrpcResponseBatchStreamer<ElemType, ResType> { if (!batchIsEmpty()) { sendResponse(); } + responseObserver.onCompleted(); } private boolean batchIsEmpty() { diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java index 245a1bcd97155f7661d45cc32fe0e5c46783e1a2..7a7d74628f38a4ab041e412ad67135975f29426f 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcService.java @@ -146,6 +146,5 @@ class VorgangGrpcService extends VorgangServiceGrpc.VorgangServiceImplBase { var responseStreamer = GrpcResponseBatchStreamer.create(GrpcFindVorgangResponseBuilder::new, responseObserver); vorgangService.findDeleted().map(vorgangStubMapper::toGrpcVorgangHeader).forEach(responseStreamer::send); responseStreamer.finish(); - responseObserver.onCompleted(); } } \ No newline at end of file diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java index 44bb51f29a497bd9aa89f77de3237c3edd87cf11..e984c0a13f9e782db23a674ca8ea4039e47eb703 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/common/grpc/GrpcResponseBatchStreamerTest.java @@ -30,6 +30,8 @@ import java.util.function.Supplier; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; import org.mockito.Mock; import io.grpc.stub.StreamObserver; @@ -157,7 +159,7 @@ class GrpcResponseBatchStreamerTest { batchStreamer.finish(); - verifyNoInteractions(responseObserver); + verify(responseObserver, never()).onNext(any()); } @Test @@ -169,6 +171,16 @@ class GrpcResponseBatchStreamerTest { verify(responseObserver).onNext(response); } + + @ParameterizedTest + @ValueSource(ints = {0, 1}) + void shouldCallOnCompleted(int batchSize) { + when(responseBuilder.getElementCount()).thenReturn(batchSize); + + batchStreamer.finish(); + + verify(responseObserver).onCompleted(); + } } private static class DummyResponse { diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java index d3a0f206e00fd7bb5d14bac9ad508afe4765a0ee..6b96a0a161f57135da73f0609d68bef90cfbf967 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/VorgangGrpcServiceTest.java @@ -573,10 +573,10 @@ class VorgangGrpcServiceTest { } @Test - void shouldCallOnCompleted() { + void shouldNotCallStreamObserverDirectly() { findDeletedVorgang(); - verify(responseObserver).onCompleted(); + verifyNoInteractions(responseObserver); } @Test