diff --git a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java index 1e12a3b6c91fae8df146896fd5b4d355f4ab5023..20cbfb80bb55043fc45d650886d0d40a771d6176 100644 --- a/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java +++ b/vorgang-manager-server/src/main/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarder.java @@ -80,11 +80,15 @@ class EingangForwarder { public void forward(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments, List<IncomingFile> representations) { var future = performGrpcCall(); + sendEingang(grpcRouteForwarding, attachments, representations); + requestObserver.onCompleted(); + waitForCompletion(future); + } + + private void sendEingang(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments, List<IncomingFile> representations) { sendRouteForwarding(grpcRouteForwarding); sendAttachments(attachments); sendRepresentations(representations); - requestObserver.onCompleted(); - waitForCompletion(future); } Future<GrpcRouteForwardingResponse> performGrpcCall() { @@ -268,11 +272,11 @@ class EingangForwarder { static class DelegatingOnReadyHandler implements Runnable { private final ClientCallStreamObserver<GrpcRouteForwardingRequest> requestStream; - private final AtomicReference<Runnable> delegate = new AtomicReference<>(); + private final AtomicReference<Runnable> delegateRef = new AtomicReference<>(); private final AtomicBoolean done = new AtomicBoolean(false); public void setDelegate(Runnable onReadyHandler) { - this.delegate.set(onReadyHandler); + this.delegateRef.set(onReadyHandler); } public void stop() { @@ -285,7 +289,7 @@ class EingangForwarder { if (Thread.currentThread().isInterrupted()) { break; } - var delegate = this.delegate.get(); + var delegate = delegateRef.get(); if (delegate != null) { delegate.run(); } diff --git a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java index 49798fe14b7f7f464616e5931d222ca970c07df5..aacedd3854bd7071ae24829070cf1ffeca71b4de 100644 --- a/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java +++ b/vorgang-manager-server/src/test/java/de/ozgcloud/vorgang/vorgang/redirect/EingangForwarderTest.java @@ -183,6 +183,14 @@ class EingangForwarderTest { verify(serviceStub).routeForwarding(getResponseObserverFromForwarder()); } + + @Test + void shouldReturnFutureOfResponseObserver() { + var result = forwarder.performGrpcCall(); + + var expectedFuture = ReflectionTestUtils.getField(getResponseObserverFromForwarder(), "future", CompletableFuture.class); + assertThat(result).isSameAs(expectedFuture); + } } @Nested @@ -1194,7 +1202,7 @@ class EingangForwarderTest { } private Runnable getDelegateFromOnReadyHandler() { - return (Runnable) ReflectionTestUtils.getField(onReadyHandler, "delegate", AtomicReference.class).get(); + return (Runnable) ReflectionTestUtils.getField(onReadyHandler, "delegateRef", AtomicReference.class).get(); } } @@ -1209,8 +1217,4 @@ class EingangForwarderTest { private void setRequestObserverInForwarder(ClientCallStreamObserver<GrpcRouteForwardingRequest> requestObserver) { ReflectionTestUtils.setField(forwarder, "requestObserver", requestObserver); } - - private void setForwardFutureInForwarder(CompletableFuture<Void> future) { - ReflectionTestUtils.setField(forwarder, "forwardFuture", future); - } }