From 42e78a24cee4a70168d993ad8b5c1ab258a45a43 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Wed, 20 Mar 2024 21:04:39 +0100 Subject: [PATCH 1/2] Cherry-Pick: migrate tests to junit5 --- pom.xml | 15 ---- .../server/SupervisionControllerTest.java | 15 ++-- .../server/VoltageInitControllerTest.java | 69 ++++++++----------- .../server/VoltageInitParametersTest.java | 48 +++++-------- .../service/ReportServiceTest.java | 38 +++++----- 5 files changed, 68 insertions(+), 117 deletions(-) diff --git a/pom.xml b/pom.xml index b9d89f5..bd0ba57 100644 --- a/pom.xml +++ b/pom.xml @@ -189,31 +189,16 @@ powsybl-iidm-test test - - com.squareup.okhttp3 - okhttp - test - com.squareup.okhttp3 mockwebserver test - - junit - junit - test - org.assertj assertj-guava test - - org.junit.vintage - junit-vintage-engine - test - org.mockito mockito-core diff --git a/src/test/java/org/gridsuite/voltageinit/server/SupervisionControllerTest.java b/src/test/java/org/gridsuite/voltageinit/server/SupervisionControllerTest.java index b5beb59..f51e389 100644 --- a/src/test/java/org/gridsuite/voltageinit/server/SupervisionControllerTest.java +++ b/src/test/java/org/gridsuite/voltageinit/server/SupervisionControllerTest.java @@ -6,35 +6,31 @@ */ package org.gridsuite.voltageinit.server; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.junit.Assert.assertEquals; - /** * @author Hugo Marcellin */ -@RunWith(SpringRunner.class) @AutoConfigureMockMvc @SpringBootTest -public class SupervisionControllerTest { +class SupervisionControllerTest { @Autowired private MockMvc mockMvc; @Test - public void testResultCount() throws Exception { + void testResultCount() throws Exception { //get the result timeline uuid of the calculation MvcResult mvcResult = mockMvc.perform(get("/v1/supervision/results-count")) .andExpect(status().isOk()) @@ -43,7 +39,6 @@ public void testResultCount() throws Exception { String resultCount = mvcResult.getResponse().getContentAsString(); assertEquals("0", resultCount); - } } diff --git a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java index a9c2401..8b881b2 100644 --- a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java +++ b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java @@ -27,7 +27,6 @@ import com.powsybl.openreac.parameters.input.OpenReacParameters; import com.powsybl.openreac.parameters.output.OpenReacResult; import com.powsybl.openreac.parameters.output.OpenReacStatus; -import lombok.SneakyThrows; import okhttp3.HttpUrl; import okhttp3.mockwebserver.Dispatcher; import okhttp3.mockwebserver.MockResponse; @@ -44,13 +43,13 @@ import org.gridsuite.voltageinit.server.service.UuidGeneratorService; import org.gridsuite.voltageinit.server.service.parameters.FilterService; import org.gridsuite.voltageinit.server.util.annotations.PostCompletionAdapter; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.MockedStatic; import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; +import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; @@ -61,7 +60,6 @@ import org.springframework.messaging.Message; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextHierarchy; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -75,8 +73,8 @@ import static com.powsybl.network.store.model.NetworkStoreApi.VERSION; import static org.gridsuite.voltageinit.server.service.NotificationService.CANCEL_MESSAGE; import static org.gridsuite.voltageinit.server.service.NotificationService.HEADER_USER_ID; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; @@ -87,12 +85,11 @@ /** * @author Etienne Homer */ -@RunWith(SpringRunner.class) +@ExtendWith({ MockitoExtension.class }) @AutoConfigureMockMvc @SpringBootTest @ContextHierarchy({@ContextConfiguration(classes = {VoltageInitApplication.class, TestChannelBinderConfiguration.class})}) -public class VoltageInitControllerTest { - +class VoltageInitControllerTest { private static final UUID NETWORK_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final UUID OTHER_NETWORK_UUID = UUID.fromString("06824085-db85-4883-9458-8c5c9f1585d6"); private static final UUID RESULT_UUID = UUID.fromString("0c8de370-3e6c-4d72-b292-d355a97e0d5d"); @@ -130,18 +127,15 @@ public class VoltageInitControllerTest { @MockBean private UuidGeneratorService uuidGeneratorService; - private final RestTemplateConfig restTemplateConfig = new RestTemplateConfig(); - private final ObjectMapper mapper = restTemplateConfig.objectMapper(); + @Autowired + private ObjectMapper mapper; private Network network; - private Network network1; - private Network networkForMergingView; - private Network otherNetworkForMergingView; - OpenReacParameters openReacParameters; - OpenReacResult openReacResult; - CompletableFutureTask completableFutureResultsTask; + private OpenReacParameters openReacParameters; + private OpenReacResult openReacResult; + private CompletableFutureTask completableFutureResultsTask; - private MockWebServer server; + public MockWebServer server; private OpenReacResult buildOpenReacResult() { OpenReacAmplIOFiles openReacAmplIOFiles = new OpenReacAmplIOFiles(openReacParameters, network, false); @@ -199,10 +193,8 @@ private VoltageInitParametersEntity buildVoltageInitParametersEntity() { .build().toEntity(); } - @Before + @BeforeEach public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - server = new MockWebServer(); server.start(); @@ -221,9 +213,6 @@ public void setUp() throws Exception { given(networkStoreService.getNetwork(NETWORK_UUID, PreloadingStrategy.COLLECTION)).willReturn(network); given(networkStoreService.getNetwork(OTHER_NETWORK_UUID, PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW)).willThrow(new PowsyblException("Not found")); - network1 = EurostagTutorialExample1Factory.createWithMoreGenerators(new NetworkFactoryImpl()); - network1.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, VARIANT_2_ID); - // OpenReac run mocking openReacParameters = new OpenReacParameters(); openReacResult = buildOpenReacResult(); @@ -234,15 +223,13 @@ public void setUp() throws Exception { given(uuidGeneratorService.generate()).willReturn(RESULT_UUID); final Dispatcher dispatcher = new Dispatcher() { - @SneakyThrows @Override public MockResponse dispatch(RecordedRequest request) { String path = Objects.requireNonNull(request.getPath()); - - if (path.matches("/v1/groups/.*") && request.getMethod().equals("DELETE")) { + if (path.matches("/v1/groups/.*") && "DELETE".equals(request.getMethod())) { return new MockResponse().setResponseCode(200) .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/groups/modification") && request.getMethod().equals("POST")) { + } else if (path.matches("/v1/groups/modification") && "POST".equals(request.getMethod())) { return new MockResponse().setResponseCode(200).setBody("\"" + MODIFICATIONS_GROUP_UUID + "\"") .addHeader("Content-Type", "application/json; charset=utf-8"); } else if (path.matches("/v1/filters/export\\?networkUuid=" + NETWORK_UUID + "&variantId=" + VARIANT_2_ID + "&ids=.*")) { @@ -268,15 +255,15 @@ public MockResponse dispatch(RecordedRequest request) { } } - @SneakyThrows - @After - public void tearDown() { + @AfterEach + public void tearDown() throws Exception { mockMvc.perform(delete("/" + VERSION + "/results")) .andExpect(status().isOk()); + server.shutdown(); } @Test - public void runTest() throws Exception { + void runTest() throws Exception { try (MockedStatic openReacRunnerMockedStatic = Mockito.mockStatic(OpenReacRunner.class)) { openReacRunnerMockedStatic.when(() -> OpenReacRunner.runAsync(eq(network), eq(VARIANT_2_ID), any(OpenReacParameters.class), any(OpenReacConfig.class), any(ComputationManager.class))) .thenReturn(completableFutureResultsTask); @@ -339,7 +326,7 @@ public void runTest() throws Exception { } @Test - public void runWrongNetworkTest() throws Exception { + void runWrongNetworkTest() throws Exception { MvcResult result = mockMvc.perform(post( "/" + VERSION + "/networks/{networkUuid}/run-and-save?receiver=me&variantId=" + VARIANT_2_ID, OTHER_NETWORK_UUID) .header(HEADER_USER_ID, "userId")) @@ -360,7 +347,7 @@ public void runWrongNetworkTest() throws Exception { } @Test - public void runWithReportTest() throws Exception { + void runWithReportTest() throws Exception { MvcResult result = mockMvc.perform(post( "/" + VERSION + "/networks/{networkUuid}/run-and-save?receiver=me&variantId={variantId}&reportType=VoltageInit&reportUuid=" + REPORT_UUID + "&reporterId=" + UUID.randomUUID(), NETWORK_UUID, VARIANT_2_ID) .header(HEADER_USER_ID, "userId")) @@ -370,7 +357,7 @@ public void runWithReportTest() throws Exception { } @Test - public void stopTest() throws Exception { + void stopTest() throws Exception { try (MockedStatic openReacRunnerMockedStatic = Mockito.mockStatic(OpenReacRunner.class)) { openReacRunnerMockedStatic.when(() -> OpenReacRunner.runAsync(eq(network), eq(VARIANT_2_ID), any(OpenReacParameters.class), any(OpenReacConfig.class), any(ComputationManager.class))) .thenReturn(completableFutureResultsTask); @@ -396,9 +383,8 @@ public void stopTest() throws Exception { } } - @SneakyThrows @Test - public void getStatusTest() { + void getStatusTest() throws Exception { MvcResult result = mockMvc.perform(get( "/" + VERSION + "/results/{resultUuid}/status", RESULT_UUID)) .andExpect(status().isOk()) @@ -416,9 +402,8 @@ public void getStatusTest() { assertEquals(VoltageInitStatus.NOT_DONE.name(), result.getResponse().getContentAsString()); } - @SneakyThrows @Test - public void postCompletionAdapterTest() { + void postCompletionAdapterTest() { CompletableFutureTask task = CompletableFutureTask.runAsync(() -> openReacResult, ForkJoinPool.commonPool()); PostCompletionAdapter adapter = new PostCompletionAdapter(); adapter.execute(task); diff --git a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitParametersTest.java b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitParametersTest.java index a7542ce..0edd68b 100644 --- a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitParametersTest.java +++ b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitParametersTest.java @@ -30,21 +30,18 @@ import org.gridsuite.voltageinit.server.entities.parameters.VoltageLimitEntity; import org.gridsuite.voltageinit.server.repository.parameters.VoltageInitParametersRepository; import org.gridsuite.voltageinit.server.service.VoltageInitRunContext; -import org.gridsuite.voltageinit.server.service.VoltageInitService; import org.gridsuite.voltageinit.server.service.VoltageInitWorkerService; import org.gridsuite.voltageinit.server.service.parameters.FilterService; import org.gridsuite.voltageinit.server.service.parameters.VoltageInitParametersService; import org.gridsuite.voltageinit.server.util.VoltageLimitParameterType; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.transaction.annotation.Transactional; @@ -60,14 +57,11 @@ /** * @author Ayoub LABIDI */ -@RunWith(SpringRunner.class) @SpringBootTest @AutoConfigureMockMvc @Transactional -public class VoltageInitParametersTest { - +class VoltageInitParametersTest { private static final String URI_PARAMETERS_BASE = "/v1/parameters"; - private static final String URI_PARAMETERS_GET_PUT = URI_PARAMETERS_BASE + "/"; private static final UUID NETWORK_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); @@ -80,16 +74,13 @@ public class VoltageInitParametersTest { private Network network; @Autowired - VoltageInitService voltageInitService; + private VoltageInitParametersService voltageInitParametersService; @Autowired - VoltageInitParametersService voltageInitParametersService; + private MockMvc mockMvc; @Autowired - protected MockMvc mockMvc; - - @Autowired - protected ObjectMapper mapper; + private ObjectMapper mapper; @Autowired private VoltageInitParametersRepository parametersRepository; @@ -100,7 +91,7 @@ public class VoltageInitParametersTest { @MockBean private FilterService filterService; - @Before + @BeforeEach public void setup() { network = EurostagTutorialExample1Factory.create(new NetworkFactoryImpl()); network.getVariantManager().cloneVariant(VariantManagerConstants.INITIAL_VARIANT_ID, VARIANT_ID_1); @@ -130,13 +121,13 @@ public void setup() { parametersRepository.deleteAll(); } - @After + @AfterEach public void tearOff() { parametersRepository.deleteAll(); } @Test - public void testCreate() throws Exception { + void testCreate() throws Exception { VoltageInitParametersInfos parametersToCreate = buildParameters(); String parametersToCreateJson = mapper.writeValueAsString(parametersToCreate); @@ -150,7 +141,7 @@ public void testCreate() throws Exception { } @Test - public void testRead() throws Exception { + void testRead() throws Exception { VoltageInitParametersInfos parametersToRead = buildParameters(); @@ -166,7 +157,7 @@ public void testRead() throws Exception { } @Test - public void testUpdate() throws Exception { + void testUpdate() throws Exception { VoltageInitParametersInfos parametersToUpdate = buildParameters(); @@ -185,7 +176,7 @@ public void testUpdate() throws Exception { } @Test - public void testDelete() throws Exception { + void testDelete() throws Exception { VoltageInitParametersInfos parametersToDelete = buildParameters(); @@ -199,7 +190,7 @@ public void testDelete() throws Exception { } @Test - public void testGetAll() throws Exception { + void testGetAll() throws Exception { VoltageInitParametersInfos parameters1 = buildParameters(); VoltageInitParametersInfos parameters2 = buildParametersUpdate(); @@ -218,7 +209,7 @@ public void testGetAll() throws Exception { } @Test - public void testDuplicate() throws Exception { + void testDuplicate() throws Exception { VoltageInitParametersInfos parametersToCreate = buildParameters(); String parametersToCreateJson = mapper.writeValueAsString(parametersToCreate); @@ -300,7 +291,7 @@ protected VoltageInitParametersInfos buildParametersUpdate() { } @Test - public void testBuildSpecificVoltageLimits() { + void testBuildSpecificVoltageLimits() { VoltageLimitEntity voltageLimit = new VoltageLimitEntity(UUID.randomUUID(), 5., 10., 0, VoltageLimitParameterType.DEFAULT, List.of(new FilterEquipmentsEmbeddable(FILTER_UUID_1, FILTER_1))); VoltageLimitEntity voltageLimit2 = new VoltageLimitEntity(UUID.randomUUID(), 44., 88., 1, VoltageLimitParameterType.DEFAULT, List.of(new FilterEquipmentsEmbeddable(FILTER_UUID_2, FILTER_2))); @@ -310,7 +301,7 @@ public void testBuildSpecificVoltageLimits() { OpenReacParameters openReacParameters = voltageInitParametersService.buildOpenReacParameters(context, network); assertEquals(4, openReacParameters.getSpecificVoltageLimits().size()); //No override should be relative since there are no voltage limit modification - assertThat(openReacParameters.getSpecificVoltageLimits().stream().allMatch(voltageLimitOverride -> !voltageLimitOverride.isRelative())).isTrue(); + assertThat(openReacParameters.getSpecificVoltageLimits().stream().noneMatch(VoltageLimitOverride::isRelative)).isTrue(); //VLHV1, VLHV2 and VLLOAD should be applied default voltage limits since those are missing one or both limits assertThat(openReacParameters.getSpecificVoltageLimits().stream().anyMatch(voltageLimitOverride -> "VLHV1".equals(voltageLimitOverride.getVoltageLevelId()))).isTrue(); assertEquals(1, openReacParameters.getSpecificVoltageLimits().stream().filter(voltageLimitOverride -> "VLHV1".equals(voltageLimitOverride.getVoltageLevelId()) && VoltageLimitOverride.VoltageLimitType.LOW_VOLTAGE_LIMIT.equals(voltageLimitOverride.getVoltageLimitType())).count()); @@ -330,7 +321,7 @@ public void testBuildSpecificVoltageLimits() { context = new VoltageInitRunContext(NETWORK_UUID, VARIANT_ID_1, null, null, null, "", "", parametersRepository.findAll().get(1).getId(), new HashMap<>()); openReacParameters = voltageInitParametersService.buildOpenReacParameters(context, network); //There should nox be relative overrides since voltage limit modification are applied - assertThat(openReacParameters.getSpecificVoltageLimits().stream().allMatch(voltageLimitOverride -> !voltageLimitOverride.isRelative())).isFalse(); + assertThat(openReacParameters.getSpecificVoltageLimits().stream().noneMatch(VoltageLimitOverride::isRelative)).isFalse(); //Limits that weren't impacted by default settings are now impacted by modification settings assertEquals(8, openReacParameters.getSpecificVoltageLimits().size()); //VLGEN has both it limits set so it should now be impacted by modifications override @@ -365,7 +356,7 @@ public void testBuildSpecificVoltageLimits() { } @Test - public void testAddRestrictedVoltageLevelReport() { + void testAddRestrictedVoltageLevelReport() { Map restrictedVoltageLevel = new HashMap<>(); restrictedVoltageLevel.put("vl", 10.0); ReporterModel reporter = new ReporterModel("test", "test"); @@ -381,4 +372,3 @@ public void testAddRestrictedVoltageLevelReport() { assertEquals("WARN", typedValues.map(value -> value.getValue().getValue()).get()); } } - diff --git a/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java b/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java index ab1f996..3c62d0a 100644 --- a/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java +++ b/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java @@ -7,42 +7,38 @@ package org.gridsuite.voltageinit.service; import com.github.tomakehurst.wiremock.WireMockServer; -import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import com.github.tomakehurst.wiremock.client.WireMock; - -import static com.github.tomakehurst.wiremock.client.WireMock.*; - +import com.github.tomakehurst.wiremock.core.WireMockConfiguration; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import org.gridsuite.voltageinit.server.service.ReportService; import org.gridsuite.voltageinit.utils.ContextConfigurationWithTestChannel; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.*; -import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import static org.gridsuite.voltageinit.utils.TestUtils.resourceToString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.*; - import java.io.IOException; import java.net.URI; import java.util.UUID; +import static com.github.tomakehurst.wiremock.client.WireMock.*; +import static org.gridsuite.voltageinit.utils.TestUtils.resourceToString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + /** * @author Anis TOURI */ @SpringBootTest -@RunWith(SpringRunner.class) @ContextConfigurationWithTestChannel -public class ReportServiceTest { +class ReportServiceTest { private static final UUID REPORT_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final String BASE_URI = "http://localhost:"; @@ -64,7 +60,7 @@ private void configureWireMockServer(String reportJson) { } - @Before + @BeforeEach public void setUp() throws IOException { String reportJson = resourceToString("/report.json"); server = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort()); @@ -76,23 +72,23 @@ public void setUp() throws IOException { reportService.setReportServiceBaseUri("http://localhost:" + server.port()); } - @After + @AfterEach public void tearDown() { server.stop(); } @Test - public void testSendReport() { + void testSendReport() { Reporter reporter = new ReporterModel("test", "test"); URI expectedUri = UriComponentsBuilder .fromPath(DELIMITER + REPORT_API_VERSION + "/reports/{reportUuid}") .build(REPORT_UUID); reportService.sendReport(REPORT_UUID, reporter); - verify(restTemplate, times(1)).put(eq(BASE_URI + server.port() + expectedUri), eq(reporter)); + verify(restTemplate, times(1)).put(BASE_URI + server.port() + expectedUri, reporter); } @Test - public void testDeleteReport() { + void testDeleteReport() { reportService.deleteReport(REPORT_UUID, "VoltageInit"); URI expectedUri = UriComponentsBuilder .fromPath(DELIMITER + REPORT_API_VERSION + "/reports/{reportUuid}") @@ -101,6 +97,6 @@ public void testDeleteReport() { .build(REPORT_UUID); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - verify(restTemplate, times(1)).exchange(eq(BASE_URI + server.port() + expectedUri), eq(HttpMethod.DELETE), eq(new HttpEntity<>(headers)), eq(Void.class)); + verify(restTemplate, times(1)).exchange(BASE_URI + server.port() + expectedUri, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } } From 4d637d6ad758d494e7b5acde4b06bfa15510c321 Mon Sep 17 00:00:00 2001 From: Tristan Chuine Date: Thu, 21 Mar 2024 16:40:25 +0100 Subject: [PATCH 2/2] Use only one mock server library --- pom.xml | 5 -- .../server/VoltageInitControllerTest.java | 71 ++++++------------- .../service/ReportServiceTest.java | 53 +++++--------- 3 files changed, 42 insertions(+), 87 deletions(-) diff --git a/pom.xml b/pom.xml index bd0ba57..30ed14d 100644 --- a/pom.xml +++ b/pom.xml @@ -189,11 +189,6 @@ powsybl-iidm-test test - - com.squareup.okhttp3 - mockwebserver - test - org.assertj assertj-guava diff --git a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java index 8b881b2..65cb554 100644 --- a/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java +++ b/src/test/java/org/gridsuite/voltageinit/server/VoltageInitControllerTest.java @@ -7,6 +7,9 @@ package org.gridsuite.voltageinit.server; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.tomakehurst.wiremock.client.WireMock; +import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; +import com.github.tomakehurst.wiremock.junit5.WireMockTest; import com.powsybl.commons.PowsyblException; import com.powsybl.computation.CompletableFutureTask; import com.powsybl.computation.ComputationManager; @@ -27,11 +30,6 @@ import com.powsybl.openreac.parameters.input.OpenReacParameters; import com.powsybl.openreac.parameters.output.OpenReacResult; import com.powsybl.openreac.parameters.output.OpenReacStatus; -import okhttp3.HttpUrl; -import okhttp3.mockwebserver.Dispatcher; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; -import okhttp3.mockwebserver.RecordedRequest; import org.gridsuite.voltageinit.server.dto.VoltageInitResult; import org.gridsuite.voltageinit.server.dto.VoltageInitStatus; import org.gridsuite.voltageinit.server.dto.parameters.FilterEquipments; @@ -43,6 +41,7 @@ import org.gridsuite.voltageinit.server.service.UuidGeneratorService; import org.gridsuite.voltageinit.server.service.parameters.FilterService; import org.gridsuite.voltageinit.server.util.annotations.PostCompletionAdapter; +import org.gridsuite.voltageinit.utils.ContextConfigurationWithTestChannel; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -55,21 +54,18 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.cloud.stream.binder.test.OutputDestination; -import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration; import org.springframework.http.MediaType; import org.springframework.messaging.Message; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.ContextHierarchy; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; import org.springframework.transaction.support.TransactionSynchronizationManager; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.UUID; import java.util.concurrent.ForkJoinPool; +import static com.github.tomakehurst.wiremock.client.WireMock.*; import static com.powsybl.network.store.model.NetworkStoreApi.VERSION; import static org.gridsuite.voltageinit.server.service.NotificationService.CANCEL_MESSAGE; import static org.gridsuite.voltageinit.server.service.NotificationService.HEADER_USER_ID; @@ -78,7 +74,10 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.BDDMockito.given; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -86,9 +85,10 @@ * @author Etienne Homer */ @ExtendWith({ MockitoExtension.class }) +@WireMockTest @AutoConfigureMockMvc +@ContextConfigurationWithTestChannel @SpringBootTest -@ContextHierarchy({@ContextConfiguration(classes = {VoltageInitApplication.class, TestChannelBinderConfiguration.class})}) class VoltageInitControllerTest { private static final UUID NETWORK_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); private static final UUID OTHER_NETWORK_UUID = UUID.fromString("06824085-db85-4883-9458-8c5c9f1585d6"); @@ -131,14 +131,11 @@ class VoltageInitControllerTest { private ObjectMapper mapper; private Network network; - private OpenReacParameters openReacParameters; private OpenReacResult openReacResult; private CompletableFutureTask completableFutureResultsTask; - public MockWebServer server; - - private OpenReacResult buildOpenReacResult() { - OpenReacAmplIOFiles openReacAmplIOFiles = new OpenReacAmplIOFiles(openReacParameters, network, false); + private void buildOpenReacResult() { + OpenReacAmplIOFiles openReacAmplIOFiles = new OpenReacAmplIOFiles(new OpenReacParameters(), network, false); GeneratorModification.Modifs m1 = new GeneratorModification.Modifs(); m1.setTargetV(228.); @@ -155,10 +152,9 @@ private OpenReacResult buildOpenReacResult() { openReacAmplIOFiles.getNetworkModifications().getShuntModifications().add(new ShuntCompensatorModification("SHUNT_1", true, 1)); openReacResult = new OpenReacResult(OpenReacStatus.OK, openReacAmplIOFiles, INDICATORS); - return openReacResult; } - private VoltageInitParametersEntity buildVoltageInitParametersEntity() { + private static VoltageInitParametersEntity buildVoltageInitParametersEntity() { return VoltageInitParametersInfos.builder() .voltageLimitsModification(List.of(VoltageLimitInfos.builder() .priority(0) @@ -194,14 +190,9 @@ private VoltageInitParametersEntity buildVoltageInitParametersEntity() { } @BeforeEach - public void setUp() throws Exception { - server = new MockWebServer(); - server.start(); - - HttpUrl baseHttpUrl = server.url(""); - String baseUrl = baseHttpUrl.toString().substring(0, baseHttpUrl.toString().length() - 1); - networkModificationService.setNetworkModificationServerBaseUri(baseUrl); - filterService.setFilterServerBaseUri(baseUrl); + public void setUp(final WireMockRuntimeInfo wmRuntimeInfo) { + networkModificationService.setNetworkModificationServerBaseUri(wmRuntimeInfo.getHttpBaseUrl()); + filterService.setFilterServerBaseUri(wmRuntimeInfo.getHttpBaseUrl()); // network store service mocking network = EurostagTutorialExample1Factory.createWithMoreGenerators(new NetworkFactoryImpl()); @@ -214,32 +205,17 @@ public void setUp() throws Exception { given(networkStoreService.getNetwork(OTHER_NETWORK_UUID, PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW)).willThrow(new PowsyblException("Not found")); // OpenReac run mocking - openReacParameters = new OpenReacParameters(); - openReacResult = buildOpenReacResult(); - + buildOpenReacResult(); completableFutureResultsTask = CompletableFutureTask.runAsync(() -> openReacResult, ForkJoinPool.commonPool()); // UUID service mocking to always generate the same result UUID given(uuidGeneratorService.generate()).willReturn(RESULT_UUID); - final Dispatcher dispatcher = new Dispatcher() { - @Override - public MockResponse dispatch(RecordedRequest request) { - String path = Objects.requireNonNull(request.getPath()); - if (path.matches("/v1/groups/.*") && "DELETE".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/groups/modification") && "POST".equals(request.getMethod())) { - return new MockResponse().setResponseCode(200).setBody("\"" + MODIFICATIONS_GROUP_UUID + "\"") - .addHeader("Content-Type", "application/json; charset=utf-8"); - } else if (path.matches("/v1/filters/export\\?networkUuid=" + NETWORK_UUID + "&variantId=" + VARIANT_2_ID + "&ids=.*")) { - return new MockResponse().setResponseCode(200).setBody(FILTER_EQUIPMENT_JSON) - .addHeader("Content-Type", "application/json; charset=utf-8"); - } - return new MockResponse().setResponseCode(418); - } - }; - server.setDispatcher(dispatcher); + final WireMock server = wmRuntimeInfo.getWireMock(); + server.register(WireMock.delete(urlPathMatching("/v1/groups/.+")).willReturn(okJson(""))); + server.register(WireMock.post(urlPathEqualTo("/v1/groups/modification")).willReturn(okJson("\"" + MODIFICATIONS_GROUP_UUID + "\""))); + server.register(WireMock.any(urlMatching("/v1/filters/export\\?networkUuid=" + NETWORK_UUID + "&variantId=" + VARIANT_2_ID + "&ids=.+")).willReturn(okJson(FILTER_EQUIPMENT_JSON))); + server.register(WireMock.any(WireMock.anyUrl()).atPriority(Integer.MAX_VALUE).willReturn(WireMock.serviceUnavailable())); // purge messages while (output.receive(1000, "voltageinit.result") != null) { @@ -259,7 +235,6 @@ public MockResponse dispatch(RecordedRequest request) { public void tearDown() throws Exception { mockMvc.perform(delete("/" + VERSION + "/results")) .andExpect(status().isOk()); - server.shutdown(); } @Test diff --git a/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java b/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java index 3c62d0a..fa31bf3 100644 --- a/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java +++ b/src/test/java/org/gridsuite/voltageinit/service/ReportServiceTest.java @@ -6,14 +6,13 @@ */ package org.gridsuite.voltageinit.service; -import com.github.tomakehurst.wiremock.WireMockServer; import com.github.tomakehurst.wiremock.client.WireMock; -import com.github.tomakehurst.wiremock.core.WireMockConfiguration; +import com.github.tomakehurst.wiremock.junit5.WireMockRuntimeInfo; +import com.github.tomakehurst.wiremock.junit5.WireMockTest; import com.powsybl.commons.reporter.Reporter; import com.powsybl.commons.reporter.ReporterModel; import org.gridsuite.voltageinit.server.service.ReportService; import org.gridsuite.voltageinit.utils.ContextConfigurationWithTestChannel; -import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -23,80 +22,66 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; -import java.io.IOException; import java.net.URI; import java.util.UUID; import static com.github.tomakehurst.wiremock.client.WireMock.*; import static org.gridsuite.voltageinit.utils.TestUtils.resourceToString; -import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; /** * @author Anis TOURI */ +@WireMockTest @SpringBootTest @ContextConfigurationWithTestChannel class ReportServiceTest { - private static final UUID REPORT_UUID = UUID.fromString("7928181c-7977-4592-ba19-88027e4254e4"); - private static final String BASE_URI = "http://localhost:"; - private static final String REPORT_API_VERSION = "/v1"; - private static final String DELIMITER = "/"; - - private WireMockServer server; + private static final String REPORT_API_VERSION = "v1"; @Autowired private ReportService reportService; @MockBean private RestTemplate restTemplate; + private URI baseUrl; - private void configureWireMockServer(String reportJson) { + private void configureStubReports(final WireMock server) throws Exception { server.stubFor(get(urlEqualTo("/v1/reports/" + REPORT_UUID)) .willReturn(aResponse() .withStatus(HttpStatus.OK.value()) - .withBody(reportJson))); - + .withBody(resourceToString("/report.json")))); } @BeforeEach - public void setUp() throws IOException { - String reportJson = resourceToString("/report.json"); - server = new WireMockServer(WireMockConfiguration.wireMockConfig().dynamicPort()); - server.start(); - WireMock.configureFor("localhost", server.port()); - - configureWireMockServer(reportJson); - - reportService.setReportServiceBaseUri("http://localhost:" + server.port()); - } - - @AfterEach - public void tearDown() { - server.stop(); + public void setUp(final WireMockRuntimeInfo wmRuntimeInfo) throws Exception { + configureStubReports(wmRuntimeInfo.getWireMock()); + reportService.setReportServiceBaseUri(wmRuntimeInfo.getHttpBaseUrl()); + this.baseUrl = URI.create(wmRuntimeInfo.getHttpBaseUrl()); } @Test void testSendReport() { Reporter reporter = new ReporterModel("test", "test"); - URI expectedUri = UriComponentsBuilder - .fromPath(DELIMITER + REPORT_API_VERSION + "/reports/{reportUuid}") + URI expectedUri = UriComponentsBuilder.fromUri(baseUrl) + .pathSegment(REPORT_API_VERSION) + .path("/reports/{reportUuid}") .build(REPORT_UUID); reportService.sendReport(REPORT_UUID, reporter); - verify(restTemplate, times(1)).put(BASE_URI + server.port() + expectedUri, reporter); + verify(restTemplate, times(1)).put(expectedUri.toString(), reporter); } @Test void testDeleteReport() { reportService.deleteReport(REPORT_UUID, "VoltageInit"); - URI expectedUri = UriComponentsBuilder - .fromPath(DELIMITER + REPORT_API_VERSION + "/reports/{reportUuid}") + URI expectedUri = UriComponentsBuilder.fromUri(baseUrl) + .pathSegment(REPORT_API_VERSION) + .path("/reports/{reportUuid}") .queryParam("reportTypeFilter", "VoltageInit") .queryParam("errorOnReportNotFound", false) .build(REPORT_UUID); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); - verify(restTemplate, times(1)).exchange(BASE_URI + server.port() + expectedUri, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); + verify(restTemplate, times(1)).exchange(expectedUri.toString(), HttpMethod.DELETE, new HttpEntity<>(headers), Void.class); } }