diff --git a/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java b/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java index 5f24838b97067eda3f3ecc29246b715223ecf47d..56382217f9eea7f397440c10bbde524ccc1da7f0 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/ClosableStub.java @@ -7,13 +7,11 @@ import de.ozgcloud.eingang.common.errorhandling.TechnicalException; import io.grpc.ManagedChannel; import io.grpc.stub.AbstractStub; import lombok.Builder; -import lombok.Getter; @Builder -@Getter class ClosableStub<T extends AbstractStub<?>> implements ManagableStub<T> { - private static final int SHUTDOWM_TIME = 10; + private static final int SHUTDOWM_TIME_IN_SEC = 3; private T stub; private ManagedChannel channel; @@ -32,7 +30,7 @@ class ClosableStub<T extends AbstractStub<?>> implements ManagableStub<T> { private void shutdownChannel() { try { - channel.shutdown().awaitTermination(ClosableStub.SHUTDOWM_TIME, TimeUnit.SECONDS); + channel.shutdown().awaitTermination(ClosableStub.SHUTDOWM_TIME_IN_SEC, TimeUnit.SECONDS); } catch (InterruptedException e) { Thread.currentThread().interrupt(); throw new TechnicalException("Error shutting down grpc channel.", e); diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java index c90fc428df04c7805a5d58a7ad8618a21e67f39e..38aaa1d273ff80880b8546053bed6ca169a54dcc 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangManagerServerResolver.java @@ -140,11 +140,10 @@ public class VorgangManagerServerResolver { } private Optional<String> getChannelTarget(Optional<String> organisationsEinheitId) { - if (isSingleRoutingStrategy()) { - return properties.getTargetVorgangManagerName(); - } else { - return organisationsEinheitId.map(properties.getOrganisationseinheiten()::get); - } + return isSingleRoutingStrategy() + ? properties.getTargetVorgangManagerName() + : organisationsEinheitId.map(properties.getOrganisationseinheiten()::get); + } private boolean isSingleRoutingStrategy() { diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java index 7bf32236907b9e50f81f1138bda9ff1c3c60cf4c..24008c1011eb6f604216cf5fb2ad51577dd9dea6 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java @@ -72,11 +72,11 @@ public class VorgangRemoteService { logConnection(organisationsEinheitenId, vorgangServiceStub.get()); - var vorgangId = createVorgang(formData, eingang, vorgangServiceStub.get(), binaryFileServiceStub.get()); - - finishStubConnections(List.of(vorgangServiceStub, binaryFileServiceStub)); - - return vorgangId; + try { + return createVorgang(formData, eingang, vorgangServiceStub.get(), binaryFileServiceStub.get()); + } finally { + finishStubConnections(List.of(vorgangServiceStub, binaryFileServiceStub)); + } } void logConnection(Optional<String> organisationsEinheitenId, VorgangServiceBlockingStub vorgangStub) { @@ -143,14 +143,17 @@ public class VorgangRemoteService { } private IncomingFileGroup uploadAttachment(IncomingFileGroup attachment) { - var filesWithId = attachment.getFiles().stream().map(file -> file.toBuilder().id(uploadIncomingFile(file)).build()).toList(); + var filesWithId = attachment.getFiles().stream().map(this::addIncomingFileId).toList(); return IncomingFileGroup.builder().name(attachment.getName()).files(filesWithId).build(); } List<IncomingFile> uploadRepresentations() { - return formData.getRepresentations().stream() - .map(representation -> representation.toBuilder().id(uploadIncomingFile(representation)).build()).toList(); + return formData.getRepresentations().stream().map(this::addIncomingFileId).toList(); + } + + private IncomingFile addIncomingFileId(IncomingFile file) { + return file.toBuilder().id(uploadIncomingFile(file)).build(); } String uploadIncomingFile(IncomingFile incomingFile) { diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java index 08a24dcd900e53769136009f84bc3b3a1bd4a22e..c47a52154f7130f84c427ac090c3b20cb3245fe3 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangManagerServerResolverTest.java @@ -287,8 +287,7 @@ class VorgangManagerServerResolverTest { var createdStub = (ClosableStub) createCloseableStub(); assertThat(createdStub).isNotNull(); - assertThat(createdStub.getStub()).isEqualTo(stub); - assertThat(createdStub.getChannel()).isEqualTo(managedChannel); + assertThat(createdStub.get()).isEqualTo(stub); } private <T extends AbstractStub<T>> ManagableStub<T> createCloseableStub() { diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java index a5d7ad6c3d15c320a7149e30355ebd1bec06029b..465b61fcdbe88fc611f3990c2a6ec00d5073ab96 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java @@ -106,10 +106,9 @@ class VorgangRemoteServiceTest { private final Optional<String> organisationsEinheitId = Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + @SneakyThrows @BeforeEach void mock() { - doReturn(vorgangId).when(remoteService).createVorgang(any(), any(), any(), any()); - when(resolver.resolveVorgangServiceBlockingStubByOrganisationseinheitenId(any())).thenReturn(managableVorgangServiceStub); when(managableVorgangServiceStub.get()).thenReturn(vorgangServiceStub); @@ -120,42 +119,78 @@ class VorgangRemoteServiceTest { doNothing().when(remoteService).finishStubConnections(any()); } - @Test - void shouldGetVorgangService() { - createVorgang(); + @DisplayName("with no exception occuring") + @Nested + class TestWithNoException { - verify(resolver).resolveVorgangServiceBlockingStubByOrganisationseinheitenId(organisationsEinheitId); - } + @SneakyThrows + @BeforeEach + void mock() { + doReturn(vorgangId).when(remoteService).createVorgang(any(), any(), any(), any()); + } - @Test - void shouldGetBinaryFileService() { - createVorgang(); + @Test + void shouldGetVorgangService() { + createVorgang(); - verify(resolver).resolveBinaryFileServiceStubByOrganisationsEinheitId(organisationsEinheitId); - } + verify(resolver).resolveVorgangServiceBlockingStubByOrganisationseinheitenId(organisationsEinheitId); + } - @Test - void shouldCreateVorgang() { - createVorgang(); + @Test + void shouldGetBinaryFileService() { + createVorgang(); - verify(remoteService).createVorgang(formData, eingang, vorgangServiceStub, binaryFileServiceStub); - } + verify(resolver).resolveBinaryFileServiceStubByOrganisationsEinheitId(organisationsEinheitId); + } - @Test - void shouldFinishStubConnection() { - createVorgang(); + @SneakyThrows + @Test + void shouldCreateVorgang() { + createVorgang(); + + verify(remoteService).createVorgang(formData, eingang, vorgangServiceStub, binaryFileServiceStub); + } - verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub)); + @Test + void shouldFinishStubConnection() { + createVorgang(); + + verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub)); + } + + @Test + void shouldReturnVorgangId() { + var created = createVorgang(); + + assertThat(created).isEqualTo(vorgangId); + + } } - @Test - void shouldReturnVorgangId() { - var created = createVorgang(); + @DisplayName("on exception") + @Nested + class TestOnException { - assertThat(created).isEqualTo(vorgangId); + @SneakyThrows + @BeforeEach + void mock() { + doThrow(RuntimeException.class).when(remoteService).createVorgang(any(), any(), any(), any()); + } + + @SneakyThrows + @Test + void shouldFinishStubConnections() { + try { + createVorgang(); + } catch (Exception e) { + // Do nothing + } + verify(remoteService).finishStubConnections(List.of(managableVorgangServiceStub, managableBinaryFileServiceStub)); + } } + @SneakyThrows private String createVorgang() { return remoteService.createVorgang(formData, eingang, organisationsEinheitId); } @@ -278,6 +313,7 @@ class VorgangRemoteServiceTest { assertThat(result).isEqualTo(vorgangId); } + @SneakyThrows private String createVorgang() { return vorgangCreator.create(); }