From 05943994869e54f16e2617d75a7a7c35a101105a Mon Sep 17 00:00:00 2001 From: BOUHOURS Antoine Date: Tue, 27 Jan 2026 16:46:39 +0100 Subject: [PATCH] Split network conversion service --- .../commons/steps/LoadNetworkStep.java | 2 +- .../adapter}/NetworkConversionService.java | 15 +++----- .../external/client/CaseRestClient.java | 33 ++++++++++++++++ .../commons/steps/LoadNetworkStepTest.java | 2 +- .../NetworkConversionServiceTest.java | 38 +++++++++++++------ .../external/client/CaseRestClientTest.java | 35 +++++++++++++++++ 6 files changed, 102 insertions(+), 23 deletions(-) rename monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/{ => external/adapter}/NetworkConversionService.java (68%) create mode 100644 monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClient.java rename monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/{ => external/adapter}/NetworkConversionServiceTest.java (64%) create mode 100644 monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClientTest.java diff --git a/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStep.java b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStep.java index 0f8e06d..95609d5 100644 --- a/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStep.java +++ b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStep.java @@ -11,7 +11,7 @@ import org.gridsuite.monitor.commons.ProcessConfig; import org.gridsuite.monitor.worker.server.core.AbstractProcessStep; import org.gridsuite.monitor.worker.server.core.ProcessStepExecutionContext; -import org.gridsuite.monitor.worker.server.services.NetworkConversionService; +import org.gridsuite.monitor.worker.server.services.external.adapter.NetworkConversionService; import org.springframework.stereotype.Component; import java.util.UUID; diff --git a/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/NetworkConversionService.java b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionService.java similarity index 68% rename from monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/NetworkConversionService.java rename to monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionService.java index 8f398e1..81352b3 100644 --- a/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/NetworkConversionService.java +++ b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionService.java @@ -4,7 +4,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.monitor.worker.server.services; +package org.gridsuite.monitor.worker.server.services.external.adapter; import com.powsybl.cases.datasource.CaseDataSourceClient; import com.powsybl.commons.PowsyblException; @@ -13,12 +13,10 @@ import com.powsybl.iidm.network.Importer; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.NetworkFactory; +import org.gridsuite.monitor.worker.server.services.external.client.CaseRestClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.stereotype.Service; -import org.springframework.web.client.RestTemplate; import java.util.Properties; import java.util.UUID; @@ -30,17 +28,16 @@ public class NetworkConversionService { private static final Logger LOGGER = LoggerFactory.getLogger(NetworkConversionService.class); - private final RestTemplate caseServerRest; + private final CaseRestClient caseRestClient; - public NetworkConversionService(@Value("${powsybl.services.case-server.base-uri:http://case-server/}") String caseServerBaseUri, - RestTemplateBuilder restTemplateBuilder) { - this.caseServerRest = restTemplateBuilder.rootUri(caseServerBaseUri).build(); + public NetworkConversionService(CaseRestClient caseRestClient) { + this.caseRestClient = caseRestClient; } public Network createNetwork(UUID caseUuid, ReportNode reporter) { LOGGER.info("Creating network"); - CaseDataSourceClient dataSource = new CaseDataSourceClient(caseServerRest, caseUuid); + CaseDataSourceClient dataSource = caseRestClient.getCaseDataSource(caseUuid); Importer importer = Importer.find(dataSource, LocalComputationManager.getDefault()); if (importer == null) { diff --git a/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClient.java b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClient.java new file mode 100644 index 0000000..cc3f155 --- /dev/null +++ b/monitor-worker-server/src/main/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClient.java @@ -0,0 +1,33 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.worker.server.services.external.client; + +import com.powsybl.cases.datasource.CaseDataSourceClient; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import java.util.UUID; + +/** + * @author Antoine Bouhours + */ +@Service +public class CaseRestClient { + + private final RestTemplate caseServerRest; + + public CaseRestClient(@Value("${powsybl.services.case-server.base-uri:http://case-server/}") String caseServerBaseUri, + RestTemplateBuilder restTemplateBuilder) { + this.caseServerRest = restTemplateBuilder.rootUri(caseServerBaseUri).build(); + } + + public CaseDataSourceClient getCaseDataSource(UUID caseUuid) { + return new CaseDataSourceClient(caseServerRest, caseUuid); + } +} diff --git a/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStepTest.java b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStepTest.java index 607f333..89d7209 100644 --- a/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStepTest.java +++ b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/processes/commons/steps/LoadNetworkStepTest.java @@ -12,7 +12,7 @@ import org.gridsuite.monitor.commons.ProcessConfig; import org.gridsuite.monitor.worker.server.core.ProcessStepExecutionContext; import org.gridsuite.monitor.worker.server.dto.ReportInfos; -import org.gridsuite.monitor.worker.server.services.NetworkConversionService; +import org.gridsuite.monitor.worker.server.services.external.adapter.NetworkConversionService; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/NetworkConversionServiceTest.java b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionServiceTest.java similarity index 64% rename from monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/NetworkConversionServiceTest.java rename to monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionServiceTest.java index 40449f3..616c837 100644 --- a/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/NetworkConversionServiceTest.java +++ b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/adapter/NetworkConversionServiceTest.java @@ -4,7 +4,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.gridsuite.monitor.worker.server.services; +package org.gridsuite.monitor.worker.server.services.external.adapter; import com.powsybl.cases.datasource.CaseDataSourceClient; import com.powsybl.commons.PowsyblException; @@ -13,12 +13,14 @@ import com.powsybl.iidm.network.Importer; import com.powsybl.iidm.network.Network; import com.powsybl.iidm.network.NetworkFactory; +import org.gridsuite.monitor.worker.server.services.external.client.CaseRestClient; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockedStatic; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.web.client.RestClientTest; +import org.mockito.junit.jupiter.MockitoExtension; import java.util.Properties; import java.util.UUID; @@ -31,10 +33,14 @@ /** * @author Antoine Bouhours */ -@RestClientTest(NetworkConversionService.class) +@ExtendWith(MockitoExtension.class) class NetworkConversionServiceTest { - @Autowired - private NetworkConversionService service; + + @Mock + private CaseRestClient caseRestClient; + + @Mock + private CaseDataSourceClient caseDataSourceClient; @Mock private Importer importer; @@ -45,6 +51,9 @@ class NetworkConversionServiceTest { @Mock private ReportNode reportNode; + @InjectMocks + private NetworkConversionService networkConversionService; + private UUID caseUuid; @BeforeEach @@ -54,21 +63,24 @@ void setUp() { @Test void createNetworkShouldImportNetworkWhenImporterFound() { + when(caseRestClient.getCaseDataSource(caseUuid)).thenReturn(caseDataSourceClient); + try (MockedStatic importerMock = mockStatic(Importer.class)) { - importerMock.when(() -> Importer.find(any(CaseDataSourceClient.class), any())) + importerMock.when(() -> Importer.find(eq(caseDataSourceClient), any())) .thenReturn(importer); when(importer.importData( - any(CaseDataSourceClient.class), + eq(caseDataSourceClient), any(NetworkFactory.class), any(Properties.class), eq(reportNode) )).thenReturn(network); - Network result = service.createNetwork(caseUuid, reportNode); + Network result = networkConversionService.createNetwork(caseUuid, reportNode); assertThat(result).isSameAs(network); + verify(caseRestClient).getCaseDataSource(caseUuid); verify(importer).importData( - any(CaseDataSourceClient.class), + eq(caseDataSourceClient), any(NetworkFactory.class), any(Properties.class), eq(reportNode) @@ -78,10 +90,12 @@ void createNetworkShouldImportNetworkWhenImporterFound() { @Test void createNetworkShouldThrowExceptionWhenNoImporterFound() { + when(caseRestClient.getCaseDataSource(caseUuid)).thenReturn(caseDataSourceClient); + try (MockedStatic importerMock = mockStatic(Importer.class)) { - importerMock.when(() -> Importer.find(any(CaseDataSourceClient.class), any(ComputationManager.class))).thenReturn(null); + importerMock.when(() -> Importer.find(eq(caseDataSourceClient), any(ComputationManager.class))).thenReturn(null); - assertThatThrownBy(() -> service.createNetwork(caseUuid, reportNode)) + assertThatThrownBy(() -> networkConversionService.createNetwork(caseUuid, reportNode)) .isInstanceOf(PowsyblException.class) .hasMessage("No importer found"); } diff --git a/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClientTest.java b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClientTest.java new file mode 100644 index 0000000..1a1212f --- /dev/null +++ b/monitor-worker-server/src/test/java/org/gridsuite/monitor/worker/server/services/external/client/CaseRestClientTest.java @@ -0,0 +1,35 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.worker.server.services.external.client; + +import com.powsybl.cases.datasource.CaseDataSourceClient; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.autoconfigure.web.client.RestClientTest; + +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; + +/** + * @author Antoine Bouhours + */ +@RestClientTest(CaseRestClient.class) +class CaseRestClientTest { + + @Autowired + private CaseRestClient caseRestClient; + + @Test + void getCaseDataSourceShouldReturnCaseDataSourceClient() { + UUID caseUuid = UUID.randomUUID(); + + CaseDataSourceClient result = caseRestClient.getCaseDataSource(caseUuid); + + assertThat(result).isNotNull().isInstanceOf(CaseDataSourceClient.class); + } +}