Skip to content
Snippets Groups Projects
Commit 462e5e40 authored by Krzysztof Witukiewicz's avatar Krzysztof Witukiewicz
Browse files

OZG-7573 OZG-7991 Make EingangForwarder a managed bean

parent cb433faf
Branches
Tags
1 merge request!27OZG-7573 Dateien Weiterleiten
...@@ -31,6 +31,10 @@ import java.util.concurrent.atomic.AtomicReference; ...@@ -31,6 +31,10 @@ import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function; import java.util.function.Function;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils; import de.ozgcloud.common.binaryfile.GrpcFileUploadUtils;
...@@ -49,18 +53,20 @@ import de.ozgcloud.vorgang.vorgang.IncomingFileGroup; ...@@ -49,18 +53,20 @@ import de.ozgcloud.vorgang.vorgang.IncomingFileGroup;
import de.ozgcloud.vorgang.vorgang.IncomingFileMapper; import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
import io.grpc.stub.ClientCallStreamObserver; import io.grpc.stub.ClientCallStreamObserver;
import io.grpc.stub.ClientResponseObserver; import io.grpc.stub.ClientResponseObserver;
import lombok.AccessLevel;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import net.devh.boot.grpc.client.inject.GrpcClient;
@RequiredArgsConstructor(access = AccessLevel.PRIVATE) @Component
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
@RequiredArgsConstructor
@Log4j2 @Log4j2
class EingangForwarder { class EingangForwarder {
@GrpcClient("forwarder")
private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub; private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
private final FileService fileService; private final FileService fileService;
private final IncomingFileMapper incomingFileMapper; private final IncomingFileMapper incomingFileMapper;
private ForwardingResponseObserver responseObserver; private ForwardingResponseObserver responseObserver;
...@@ -69,11 +75,6 @@ class EingangForwarder { ...@@ -69,11 +75,6 @@ class EingangForwarder {
@Getter @Getter
private CompletableFuture<Void> forwardFuture; private CompletableFuture<Void> forwardFuture;
public static EingangForwarder create(RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub, FileService fileService,
IncomingFileMapper incomingFileMapper) {
return new EingangForwarder(serviceStub, fileService, incomingFileMapper);
}
public EingangForwarder forward(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments, public EingangForwarder forward(GrpcRouteForwarding grpcRouteForwarding, List<IncomingFileGroup> attachments,
List<IncomingFile> representations) { List<IncomingFile> representations) {
......
...@@ -28,15 +28,12 @@ import java.util.concurrent.ExecutionException; ...@@ -28,15 +28,12 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import org.springframework.beans.factory.annotation.Lookup;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc;
import de.ozgcloud.vorgang.files.FileService;
import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
import de.ozgcloud.vorgang.vorgang.VorgangService; import de.ozgcloud.vorgang.vorgang.VorgangService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import net.devh.boot.grpc.client.inject.GrpcClient;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
...@@ -45,19 +42,20 @@ class ForwardingRemoteService { ...@@ -45,19 +42,20 @@ class ForwardingRemoteService {
static final int TIMEOUT_MINUTES = 10; static final int TIMEOUT_MINUTES = 10;
private final VorgangService vorgangService; private final VorgangService vorgangService;
private final ForwardingRequestMapper forwardingRequestMapper; private final ForwardingRequestMapper forwardingRequestMapper;
@GrpcClient("forwarder")
private final RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
private final FileService fileService;
private final IncomingFileMapper incomingFileMapper;
public void forward(ForwardingRequest request) { public void forward(ForwardingRequest request) {
var eingang = vorgangService.getById(request.getVorgangId()).getEingangs().getFirst(); var eingang = vorgangService.getById(request.getVorgangId()).getEingangs().getFirst();
var grpcRouteForwarding = forwardingRequestMapper.toGrpcRouteForwarding(request, eingang); var grpcRouteForwarding = forwardingRequestMapper.toGrpcRouteForwarding(request, eingang);
var responseFuture = EingangForwarder.create(serviceStub, fileService, incomingFileMapper).forward(grpcRouteForwarding, eingang.getAttachments(), var responseFuture = getEingangForwarder().forward(grpcRouteForwarding, eingang.getAttachments(),
eingang.getRepresentations()).getForwardFuture(); eingang.getRepresentations()).getForwardFuture();
waitForCompletion(responseFuture); waitForCompletion(responseFuture);
} }
@Lookup
EingangForwarder getEingangForwarder() {
return null; // provided by Spring
}
<T> void waitForCompletion(CompletableFuture<T> responseFuture) { <T> void waitForCompletion(CompletableFuture<T> responseFuture) {
try { try {
responseFuture.get(TIMEOUT_MINUTES, TimeUnit.MINUTES); responseFuture.get(TIMEOUT_MINUTES, TimeUnit.MINUTES);
......
...@@ -34,21 +34,16 @@ import java.util.concurrent.ExecutionException; ...@@ -34,21 +34,16 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException; import java.util.concurrent.TimeoutException;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks; import org.mockito.InjectMocks;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockedStatic;
import org.mockito.Spy; import org.mockito.Spy;
import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.common.errorhandling.TechnicalException;
import de.ozgcloud.eingang.forwarder.RouteForwardingServiceGrpc;
import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding; import de.ozgcloud.eingang.forwarding.GrpcRouteForwarding;
import de.ozgcloud.vorgang.files.FileService;
import de.ozgcloud.vorgang.vorgang.EingangTestFactory; import de.ozgcloud.vorgang.vorgang.EingangTestFactory;
import de.ozgcloud.vorgang.vorgang.IncomingFileMapper;
import de.ozgcloud.vorgang.vorgang.VorgangService; import de.ozgcloud.vorgang.vorgang.VorgangService;
import de.ozgcloud.vorgang.vorgang.VorgangTestFactory; import de.ozgcloud.vorgang.vorgang.VorgangTestFactory;
import lombok.SneakyThrows; import lombok.SneakyThrows;
...@@ -59,12 +54,6 @@ class ForwardingRemoteServiceTest { ...@@ -59,12 +54,6 @@ class ForwardingRemoteServiceTest {
private VorgangService vorgangService; private VorgangService vorgangService;
@Mock @Mock
private ForwardingRequestMapper forwardingRequestMapper; private ForwardingRequestMapper forwardingRequestMapper;
@Mock
private RouteForwardingServiceGrpc.RouteForwardingServiceStub serviceStub;
@Mock
private FileService fileService;
@Mock
private IncomingFileMapper incomingFileMapper;
@InjectMocks @InjectMocks
@Spy @Spy
private ForwardingRemoteService service; private ForwardingRemoteService service;
...@@ -75,26 +64,19 @@ class ForwardingRemoteServiceTest { ...@@ -75,26 +64,19 @@ class ForwardingRemoteServiceTest {
private final ForwardingRequest request = ForwardingRequestTestFactory.create(); private final ForwardingRequest request = ForwardingRequestTestFactory.create();
private final GrpcRouteForwarding grpcRouteForwarding = GrpcRouteForwardingTestFactory.create(); private final GrpcRouteForwarding grpcRouteForwarding = GrpcRouteForwardingTestFactory.create();
private final CompletableFuture<Void> responseFuture = new CompletableFuture<>(); private final CompletableFuture<Void> responseFuture = new CompletableFuture<>();
private MockedStatic<EingangForwarder> eingangForwarderMockedStatic;
@Mock @Mock
private EingangForwarder eingangForwarder; private EingangForwarder eingangForwarder;
@BeforeEach @BeforeEach
void init() { void init() {
doReturn(eingangForwarder).when(service).getEingangForwarder();
when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create()); when(vorgangService.getById(any())).thenReturn(VorgangTestFactory.create());
eingangForwarderMockedStatic = mockStatic(EingangForwarder.class);
eingangForwarderMockedStatic.when(() -> EingangForwarder.create(any(), any(), any())).thenReturn(eingangForwarder);
when(eingangForwarder.forward(any(), any(), any())).thenReturn(eingangForwarder); when(eingangForwarder.forward(any(), any(), any())).thenReturn(eingangForwarder);
when(eingangForwarder.getForwardFuture()).thenReturn(responseFuture); when(eingangForwarder.getForwardFuture()).thenReturn(responseFuture);
when(forwardingRequestMapper.toGrpcRouteForwarding(any(), any())).thenReturn(grpcRouteForwarding); when(forwardingRequestMapper.toGrpcRouteForwarding(any(), any())).thenReturn(grpcRouteForwarding);
doNothing().when(service).waitForCompletion(any()); doNothing().when(service).waitForCompletion(any());
} }
@AfterEach
void teardown() {
eingangForwarderMockedStatic.close();
}
@Test @Test
void shouldGetVorgang() { void shouldGetVorgang() {
service.forward(request); service.forward(request);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment