diff --git a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java index f9b4de328..7f8005c2e 100644 --- a/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java +++ b/src/main/java/org/gridsuite/modification/server/NetworkModificationController.java @@ -26,6 +26,7 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.concurrent.CompletableFuture; /** * @author Franck Lecuyer @@ -88,7 +89,7 @@ public ResponseEntity> duplicateGroup(@RequestParam("groupUuid") @PutMapping(value = "/groups/{groupUuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @Operation(summary = "For a list of network modifications passed in body, Move them before another one or at the end of the list, or Duplicate them at the end of the list, or Insert them (composite) at the end of the list") @ApiResponse(responseCode = "200", description = "The modification list of the group has been updated.") - public ResponseEntity handleNetworkModifications(@Parameter(description = "updated group UUID, where modifications are pasted") @PathVariable("groupUuid") UUID targetGroupUuid, + public CompletableFuture> handleNetworkModifications(@Parameter(description = "updated group UUID, where modifications are pasted") @PathVariable("groupUuid") UUID targetGroupUuid, @Parameter(description = "kind of modification", required = true) @RequestParam(value = "action") GroupModificationAction action, @Parameter(description = "the modification Uuid to move before (MOVE option, empty means moving at the end)") @RequestParam(value = "before", required = false) UUID beforeModificationUuid, @Parameter(description = "origin group UUID, where modifications are copied or cut") @RequestParam(value = "originGroupUuid", required = false) UUID originGroupUuid, @@ -96,16 +97,16 @@ public ResponseEntity handleNetworkModifications(@Pa @RequestBody Pair, List> modificationContextInfos) { return switch (action) { case COPY -> - ResponseEntity.ok().body(networkModificationService.duplicateModifications(targetGroupUuid, originGroupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond())); + networkModificationService.duplicateModifications(targetGroupUuid, originGroupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond()).thenApply(ResponseEntity.ok()::body); case INSERT -> - ResponseEntity.ok().body(networkModificationService.insertCompositeModifications(targetGroupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond())); + networkModificationService.insertCompositeModifications(targetGroupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond()).thenApply(ResponseEntity.ok()::body); case MOVE -> { UUID sourceGroupUuid = originGroupUuid == null ? targetGroupUuid : originGroupUuid; boolean applyModifications = canApply; if (sourceGroupUuid.equals(targetGroupUuid)) { applyModifications = false; } - yield ResponseEntity.ok().body(networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, beforeModificationUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond(), applyModifications)); + yield networkModificationService.moveModifications(targetGroupUuid, sourceGroupUuid, beforeModificationUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond(), applyModifications).thenApply(ResponseEntity.ok()::body); } }; } @@ -131,11 +132,11 @@ public ResponseEntity> getModificationGroups() { @ApiResponses(value = { @ApiResponse(responseCode = "200", description = "The network modification was created"), @ApiResponse(responseCode = "404", description = "The network or equipment was not found")}) - public ResponseEntity createNetworkModification( + public CompletableFuture> createNetworkModification( @Parameter(description = "Group UUID") @RequestParam(name = "groupUuid") UUID groupUuid, @RequestBody Pair> modificationContextInfos) { modificationContextInfos.getFirst().check(); - return ResponseEntity.ok().body(networkModificationService.createNetworkModification(groupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond())); + return networkModificationService.createNetworkModification(groupUuid, modificationContextInfos.getFirst(), modificationContextInfos.getSecond()).thenApply(ResponseEntity.ok()::body); } @PutMapping(value = "/network-modifications/{uuid}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) diff --git a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java index a06a6f0b7..c9602642c 100644 --- a/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java +++ b/src/main/java/org/gridsuite/modification/server/modifications/NetworkModificationApplicator.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; @@ -97,7 +98,7 @@ public NetworkModificationApplicator(NetworkStoreService networkStoreService, Eq * medium : preloadingStrategy = COLLECTION * large : preloadingStrategy = ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW */ - public NetworkModificationResult applyModifications(ModificationApplicationGroup modificationInfosGroup, NetworkInfos networkInfos) { + public CompletableFuture applyModifications(ModificationApplicationGroup modificationInfosGroup, NetworkInfos networkInfos) { PreloadingStrategy preloadingStrategy = modificationInfosGroup.modifications().stream() .map(ModificationEntity::getType) .map(ModificationType::valueOf) @@ -108,13 +109,16 @@ public NetworkModificationResult applyModifications(ModificationApplicationGroup NetworkStoreListener listener = NetworkStoreListener.create(networkInfos.getNetwork(), networkInfos.getNetworkUuuid(), networkStoreService, equipmentInfosService, applicationInfosService, collectionThreshold); if (preloadingStrategy == PreloadingStrategy.ALL_COLLECTIONS_NEEDED_FOR_BUS_VIEW) { return largeNetworkModificationExecutionService - .supplyAsync(() -> applyAndFlush(modificationInfosGroup, listener)) - .join(); + .supplyAsync(() -> applyAndFlush(modificationInfosGroup, listener)); } else { - return applyAndFlush(modificationInfosGroup, listener); + return CompletableFuture.completedFuture(applyAndFlush(modificationInfosGroup, listener)); } } + public NetworkModificationResult applyModificationsBlocking(ModificationApplicationGroup modificationInfosGroup, NetworkInfos networkInfos) { + return this.applyModifications(modificationInfosGroup, networkInfos).join(); + } + private NetworkModificationResult applyAndFlush(ModificationApplicationGroup modificationInfosGroup, NetworkStoreListener listener) { return flushModificationApplications(apply(modificationInfosGroup, listener), listener); diff --git a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java index 39f2ce3ba..cb4fbfad8 100644 --- a/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java +++ b/src/main/java/org/gridsuite/modification/server/repositories/NetworkModificationRepository.java @@ -549,11 +549,6 @@ public Integer getModificationsCount(@NonNull UUID groupUuid, boolean stashed) { return modificationRepository.countByGroupIdAndStashed(groupUuid, stashed); } - @Transactional(readOnly = true) - public List getModificationsInfos(@NonNull List uuids) { - return getModificationsInfosNonTransactional(uuids); - } - private List getModificationsInfosNonTransactional(List uuids) { // Spring-data findAllById doc says: the order of elements in the result is not guaranteed Map entities = modificationRepository.findAllById(uuids) diff --git a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java index 0fdf5c86e..d2624ebcd 100644 --- a/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java +++ b/src/main/java/org/gridsuite/modification/server/service/NetworkModificationService.java @@ -39,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -191,26 +192,58 @@ public void restoreNetworkModifications(UUID groupUuid, @NonNull List modi networkModificationRepository.getModificationsCount(groupUuid, false)); } - public NetworkModificationsResult createNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo, @NonNull List applicationContexts) { + public CompletableFuture createNetworkModification(@NonNull UUID groupUuid, @NonNull ModificationInfos modificationInfo, @NonNull List applicationContexts) { List modificationEntities = networkModificationRepository.saveModificationInfos(groupUuid, List.of(modificationInfo)); - - return new NetworkModificationsResult(modificationEntities.stream().map(ModificationEntity::getId).toList(), - applyModifications(groupUuid, modificationEntities, applicationContexts)); + List ids = modificationEntities.stream().map(ModificationEntity::getId).toList(); + return applyModifications(groupUuid, modificationEntities, applicationContexts).thenApply(results -> + new NetworkModificationsResult(ids, results)); } /** * Apply modifications on several networks */ - private List> applyModifications(UUID groupUuid, List modifications, List applicationContexts) { - return applicationContexts.stream().map(modificationApplicationContext -> - applyModifications( - modificationApplicationContext.networkUuid(), - modificationApplicationContext.variantId(), - new ModificationApplicationGroup(groupUuid, - modifications.stream().filter(m -> !modificationApplicationContext.excludedModifications().contains(m.getId())).toList(), - new ReportInfos(modificationApplicationContext.reportUuid(), modificationApplicationContext.reporterId()) - )) - ).toList(); + private CompletableFuture>> applyModifications(UUID groupUuid, List modifications, List applicationContexts) { + // Do we want to do these all in parallel (CompletableFuture.allOf) or sequentially (like in Flux.concatMap) or something in between ? + // sequentially like before for now + List>> results = new ArrayList<>(applicationContexts.size()); + return scheduleApplyModifications( + modificationApplicationContext -> + applyModifications( + modificationApplicationContext.networkUuid(), + modificationApplicationContext.variantId(), + new ModificationApplicationGroup(groupUuid, + modifications.stream().filter(m -> !modificationApplicationContext.excludedModifications().contains(m.getId())).toList(), + new ReportInfos(modificationApplicationContext.reportUuid(), modificationApplicationContext.reporterId()) + ) + ), + applicationContexts, results + ).thenApply(unused -> + results.stream().map(CompletableFuture::resultNow).toList()); + } + + /** + * @param results should pass an empty list to be filled with the results + */ + // The signature of this method is chosen so that we can implement easily sequential or parallel schedule + // If we change it (for example to parallel scheduling), we should keep the exceptional behavior consistent, + // call the apply function inside a thenCompose anyway to wrap its exceptions in exceptional future completions. + private static CompletableFuture scheduleApplyModifications( + Function>> func, + List applicationContexts, + List>> results) { + CompletableFuture chainedFutures = CompletableFuture.completedFuture(null); + for (ModificationApplicationContext applicationContext : applicationContexts) { + chainedFutures = chainedFutures.thenCompose(unused -> { + var cf = func.apply(applicationContext); + // thencompose, this should add the computation result to the list and + // and schedule the next computation in the same thread as the task + // The list is accessed from different threads but not concurrently and + // with happens-before semantics. + results.add(cf); + return cf; + }); + } + return chainedFutures.thenCompose(unused -> CompletableFuture.completedFuture(null)); } public Network cloneNetworkVariant(UUID networkUuid, @@ -284,15 +317,15 @@ public void deleteNetworkModifications(UUID groupUuid, List modificationsU } } - public NetworkModificationsResult moveModifications(@NonNull UUID destinationGroupUuid, @NonNull UUID originGroupUuid, UUID beforeModificationUuid, + public CompletableFuture moveModifications(@NonNull UUID destinationGroupUuid, @NonNull UUID originGroupUuid, UUID beforeModificationUuid, @NonNull List modificationsToMoveUuids, @NonNull List applicationContexts, boolean applyModifications) { // update origin/destinations groups to cut and paste all modificationsToMove // FullDto needed for toModificationInfos() after the modifications have been applied List modificationEntities = networkModificationRepository.moveModifications(destinationGroupUuid, originGroupUuid, modificationsToMoveUuids, beforeModificationUuid); - List> result = applyModifications && !modificationEntities.isEmpty() ? applyModifications(destinationGroupUuid, modificationEntities, applicationContexts) : List.of(); - return new NetworkModificationsResult(modificationEntities.stream().map(ModificationEntity::getId).toList(), result); + CompletableFuture>> futureResult = applyModifications && !modificationEntities.isEmpty() ? applyModifications(destinationGroupUuid, modificationEntities, applicationContexts) : CompletableFuture.completedFuture(List.of()); + return futureResult.thenApply(result -> new NetworkModificationsResult(modificationEntities.stream().map(ModificationEntity::getId).toList(), result)); } public Map duplicateGroup(UUID sourceGroupUuid, UUID groupUuid) { @@ -314,7 +347,7 @@ public Map duplicateGroup(UUID sourceGroupUuid, UUID groupUuid) { } } - private Optional applyModifications(UUID networkUuid, String variantId, ModificationApplicationGroup modificationGroupInfos) { + private CompletableFuture> applyModifications(UUID networkUuid, String variantId, ModificationApplicationGroup modificationGroupInfos) { if (!modificationGroupInfos.modifications().isEmpty()) { PreloadingStrategy preloadingStrategy = modificationGroupInfos.modifications().stream() .map(ModificationEntity::getType) @@ -324,26 +357,27 @@ private Optional applyModifications(UUID networkUuid, // try to apply the duplicated modifications (incremental mode) if (networkInfos.isVariantPresent()) { - return Optional.of(modificationApplicator.applyModifications(modificationGroupInfos, networkInfos)); + return modificationApplicator.applyModifications(modificationGroupInfos, networkInfos).thenApply(Optional::of); } } - return Optional.empty(); + return CompletableFuture.completedFuture(Optional.empty()); } - public NetworkModificationsResult duplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { + public CompletableFuture duplicateModifications(@NonNull UUID targetGroupUuid, UUID originGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { if (originGroupUuid != null && !modificationsUuids.isEmpty()) { // Duplicate modifications from a group or from a list only throw new NetworkModificationServerException(DUPLICATION_ARGUMENT_INVALID); } List duplicateModifications = networkModificationRepository.saveDuplicateModifications(targetGroupUuid, originGroupUuid, modificationsUuids); - return new NetworkModificationsResult( - duplicateModifications.stream().map(ModificationEntity::getId).toList(), - applyModifications(targetGroupUuid, duplicateModifications, applicationContexts) - ); + List ids = duplicateModifications.stream().map(ModificationEntity::getId).toList(); + return applyModifications(targetGroupUuid, duplicateModifications, applicationContexts).thenApply(result -> + new NetworkModificationsResult(ids, result)); } - public NetworkModificationsResult insertCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { + public CompletableFuture insertCompositeModifications(@NonNull UUID targetGroupUuid, @NonNull List modificationsUuids, @NonNull List applicationContexts) { List modificationEntities = networkModificationRepository.saveCompositeModifications(targetGroupUuid, modificationsUuids); - return new NetworkModificationsResult(modificationEntities.stream().map(ModificationEntity::getId).toList(), applyModifications(targetGroupUuid, modificationEntities, applicationContexts)); + List ids = modificationEntities.stream().map(ModificationEntity::getId).toList(); + return applyModifications(targetGroupUuid, modificationEntities, applicationContexts).thenApply(result -> + new NetworkModificationsResult(ids, result)); } @Transactional diff --git a/src/main/resources/config/application.yaml b/src/main/resources/config/application.yaml index d777b549a..a6e750945 100644 --- a/src/main/resources/config/application.yaml +++ b/src/main/resources/config/application.yaml @@ -2,6 +2,12 @@ spring: application: name: network-modification-server + mvc: + async: + # To have the same behavior of no timeouts as regular endpoints for servlet 3.0+ asynccontext endpoints + # Can be removed when set as default in our common ws config + request-timeout: -1 + jpa: properties: hibernate: diff --git a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java index 61804e764..e5d596df0 100644 --- a/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java +++ b/src/test/java/org/gridsuite/modification/server/ModificationControllerTest.java @@ -73,6 +73,7 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.*; import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; +import static org.gridsuite.modification.server.utils.TestUtils.runRequestAsync; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; @@ -219,13 +220,10 @@ void testEquipmentIdNonNull() { @Test void testNetworkNotFound() throws Exception { String body = getJsonBody(LoadCreationInfos.builder().equipmentId("id").build(), NOT_FOUND_NETWORK_ID, NetworkCreation.VARIANT_ID); - mockMvc.perform(post(NETWORK_MODIFICATION_URI) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpectAll( - status().isNotFound(), - content().string(new NetworkModificationException(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage()) - ); + MvcResult mvcResult = runRequestAsync(mockMvc, + post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), + status().isNotFound()); + assertEquals(new NetworkModificationException(NETWORK_NOT_FOUND, NOT_FOUND_NETWORK_ID.toString()).getMessage(), mvcResult.getResponse().getContentAsString()); } @Test @@ -255,7 +253,7 @@ void testModificationGroups() throws Exception { resultAsString = mvcResult.getResponse().getContentAsString(); List bsicListResult = mapper.readValue(resultAsString, new TypeReference<>() { }); assertEquals(bsicListResult, List.of()); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -308,8 +306,7 @@ void testRestoreNetworkModifications() throws Exception { .stashed(true) .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -336,8 +333,7 @@ void testStashNetworkModifications() throws Exception { .stashed(true) .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -364,8 +360,7 @@ void testDisableNetworkModifications() throws Exception { .activated(true) .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -392,7 +387,7 @@ void testDeleteModification() throws Exception { .equipmentId("v1b1") .build(); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); @@ -448,8 +443,7 @@ void testNetworkModificationsWithErrorOnNetworkFlush() throws Exception { .script("network.getGenerator('idGenerator').targetP=10\nnetwork.getGenerator('idGenerator').targetP=20\n") .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_WITH_FLUSH_ERROR_ID, NetworkCreation.VARIANT_ID); - - mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().is5xxServerError()); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().is5xxServerError()); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, false).size()); } @@ -461,8 +455,7 @@ void testMultipleModificationsWithError() throws Exception { .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); // apply groovy script without error - MvcResult mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); assertEquals(1, modificationRepository.getModifications(TEST_GROUP_ID, true, true).size()); @@ -490,9 +483,7 @@ private List createSomeSwitchModifications(UUID groupId, int for (int i = 0; i < number; i++) { switchStatusModificationInfos.setEquipmentAttributeValue(openStates.get(i % 2)); String bodyJson = getJsonBody(switchStatusModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId) - .content(bodyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); } var modificationList = modificationRepository.getModifications(groupId, false, true); @@ -506,9 +497,7 @@ private ModificationInfos createDeletionModification(UUID groupId, IdentifiableT .equipmentId(equipmentName) .build(); String bodyJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - MvcResult mvcResult = mockMvc.perform(post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId) - .content(bodyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(URI_NETWORK_MODIF_BASE + "?groupUuid=" + groupId).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); var modificationList = modificationRepository.getModifications(groupId, true, true); @@ -527,11 +516,7 @@ void testCopyModification() throws Exception { List badModificationUuidList = List.of(UUID.randomUUID(), UUID.randomUUID()); duplicateModificationUuidList.addAll(badModificationUuidList); String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - MvcResult mvcResult = mockMvc.perform( - put("/v1/groups/" + TEST_GROUP_ID + "?action=COPY") - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + TEST_GROUP_ID + "?action=COPY").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); @@ -560,11 +545,7 @@ void testCopyModification() throws Exception { // Duplicate the same modifications, and append them at the end of this new group modification list. duplicateModificationUuidList = new ArrayList<>(modificationUuidList.subList(0, 2)); bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - put("/v1/groups/" + otherGroupId + "?action=COPY") - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); var newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, false, true); @@ -578,11 +559,7 @@ void testCopyModification() throws Exception { // Duplicate all modifications in TEST_GROUP_ID, and append them at the end of otherGroupId bodyJson = getJsonBody(List.of(), NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID) - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, true, true); @@ -621,12 +598,7 @@ void testCopyModificationOld() throws Exception { duplicateModificationUuidList.addAll(badModificationUuidList); String bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=COPY"; - MvcResult mvcResult; - mvcResult = mockMvc.perform( - put(url) - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); var newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); @@ -657,11 +629,7 @@ void testCopyModificationOld() throws Exception { duplicateModificationUuidList = new ArrayList<>(modificationUuidList.subList(0, 2)); String copyUrl = "/v1/groups/" + otherGroupId + "?action=COPY"; bodyJson = getJsonBody(duplicateModificationUuidList, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - put(copyUrl) - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put(copyUrl).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); var newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, false, true); @@ -675,11 +643,7 @@ void testCopyModificationOld() throws Exception { // Duplicate all modifications in TEST_GROUP_ID, and append them at the end of otherGroupId String bodyJson2 = getJsonBody(List.of(), NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID) - .content(bodyJson2) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + otherGroupId + "?action=COPY" + "&originGroupUuid=" + TEST_GROUP_ID).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); newModificationListOtherGroup = modificationRepository.getModifications(otherGroupId, true, true); @@ -718,9 +682,7 @@ void createGeneratorWithStartup() throws Exception { // create and build generator without startup GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult; - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); GeneratorStartup generatorStartup = network.getGenerator("idGenerator1").getExtension(GeneratorStartup.class); @@ -729,9 +691,7 @@ void createGeneratorWithStartup() throws Exception { // same for bus breaker GeneratorCreationInfos generatorCreationInfosBusBreaker = ModificationCreation.getCreationGenerator("v1", "idGenerator2", "nameGenerator2", "bus1", "idGenerator1", "GENERATOR", "v1"); generatorCreationInfosJson = getJsonBody(generatorCreationInfosBusBreaker, TEST_NETWORK_BUS_BREAKER_ID, null); - - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator2").getExtension(GeneratorStartup.class); @@ -741,9 +701,8 @@ void createGeneratorWithStartup() throws Exception { generatorCreationInfos.setEquipmentId("idGenerator21"); generatorCreationInfos.setMarginalCost(8.); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); assertApplicationStatusOK(mvcResult); generatorStartup = network.getGenerator("idGenerator21").getExtension(GeneratorStartup.class); assertNotNull(generatorStartup); @@ -756,8 +715,8 @@ void createGeneratorWithStartup() throws Exception { generatorCreationInfosBusBreaker.setEquipmentId("idGenerator3"); generatorCreationInfosBusBreaker.setPlannedOutageRate(80.); generatorCreationInfosJson = getJsonBody(generatorCreationInfosBusBreaker, TEST_NETWORK_BUS_BREAKER_ID, null); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(mvcResult); generatorStartup = networkStoreService.getNetwork(TEST_NETWORK_BUS_BREAKER_ID, null).getGenerator("idGenerator3").getExtension(GeneratorStartup.class); assertNotNull(generatorStartup); @@ -836,11 +795,8 @@ void testNetworkCompositeModification() throws Exception { // Insert the composite modification in the group String bodyJson = getJsonBody(List.of(compositeModificationUuid), NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - put("/v1/groups/" + TEST_GROUP_ID + "?action=INSERT") - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + TEST_GROUP_ID + "?action=INSERT").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(mvcResult); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); @@ -896,11 +852,8 @@ void testNetworkCompositeModificationOld() throws Exception { assertEquals("v1b1", ((EquipmentAttributeModificationInfos) compositeModificationContent.get(0)).getEquipmentId()); String bodyJson = getJsonBody(List.of(compositeModificationUuid), NetworkCreation.VARIANT_ID); // Insert the composite modification in the group - mvcResult = mockMvc.perform( - put("/v1/groups/" + TEST_GROUP_ID + "?action=INSERT") - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, put("/v1/groups/" + TEST_GROUP_ID + "?action=INSERT").content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); + assertApplicationStatusOK(mvcResult); List newModificationList = modificationRepository.getModifications(TEST_GROUP_ID, false, true); @@ -929,10 +882,7 @@ void testMoveModificationBetweenTwoGroups() throws Exception { List movingModificationUuidList = List.of(originSingleModification); String bodyJson = getJsonBody(movingModificationUuidList, NetworkCreation.VARIANT_ID); String url = "/v1/groups/" + TEST_GROUP_ID + "?action=MOVE" + "&originGroupUuid=" + TEST_GROUP2_ID + "&build=true"; - MvcResult mvcResult = mockMvc.perform(put(url).content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, put(url).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); // incremental build: deletion impacts expected, all related to the moved load deletion (dealing with "s1" substation) NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -988,12 +938,7 @@ void testDuplicateModificationGroup() throws Exception { MvcResult mvcResult; VoltageLevelCreationInfos vl1 = ModificationCreation.getCreationVoltageLevel("s1", "vl1Id", "vl1Name"); String bodyJson = getJsonBody(vl1, TEST_NETWORK_BUS_BREAKER_ID, null); - mockMvc.perform( - post(NETWORK_MODIFICATION_URI) - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn().getResponse().getContentAsString(); + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); // create new line in voltage levels with node/breaker topology // between voltage level "v1" and busbar section "bus1" and @@ -1024,12 +969,7 @@ void testDuplicateModificationGroup() throws Exception { .build(); bodyJson = getJsonBody(lineCreationInfos, TEST_NETWORK_BUS_BREAKER_ID, null); - mvcResult = mockMvc.perform( - post(NETWORK_MODIFICATION_URI) - .content(bodyJson) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()) - .andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); String resultAsString = mvcResult.getResponse().getContentAsString(); testBranchCreationImpacts(mapper, resultAsString, Set.of("s1", "s2")); @@ -1047,11 +987,7 @@ void testDuplicateModificationGroup() throws Exception { 10.0, "AttPointId", "attPointName", null, "v4", "1.A", attachmentLine, "nl1", "NewLine1", "nl2", "NewLine2"); String bodyJson2 = getJsonBody(lineAttachToVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - post(NETWORK_MODIFICATION_URI) - .content(bodyJson2) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testNetworkModificationsCount(TEST_GROUP_ID, 3); @@ -1060,20 +996,12 @@ void testDuplicateModificationGroup() throws Exception { LineSplitWithVoltageLevelInfos lineSplitWoVL = new LineSplitWithVoltageLevelInfos("line1", 10.0, null, "v4", "1.A", "nl11", "NewLine11", "nl12", "NewLine12"); bodyJson2 = getJsonBody(lineSplitWoVL, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - post(NETWORK_MODIFICATION_URI) - .content(bodyJson2) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); //create a generator GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); bodyJson2 = getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform( - post(NETWORK_MODIFICATION_URI) - .content(bodyJson2) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(bodyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testNetworkModificationsCount(TEST_GROUP_ID, 5); @@ -1110,11 +1038,7 @@ void replaceTeePointByVoltageLevelOnLineDuplicateModificationGroupTest() throws LinesAttachToSplitLinesInfos linesAttachToSplitLinesInfos = new LinesAttachToSplitLinesInfos("l1", "l2", "l3", "v4", "bbs4", "nl1", "NewLine1", "nl2", "NewLine2"); String body = getJsonBody(linesAttachToSplitLinesInfos, TEST_NETWORK_WITH_TEE_POINT_ID, null); - - MvcResult mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI) - .content(body) - .contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(body).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testNetworkModificationsCount(TEST_GROUP_ID, 1); @@ -1143,7 +1067,7 @@ void testGroupDuplication() throws Exception { .connectionName("bottom") .build(); String loadCreationInfosJson = getJsonBody(loadCreationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - MvcResult mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); assertNotNull(network.getLoad("idLoad1")); // load was created testNetworkModificationsCount(TEST_GROUP_ID, 1); @@ -1173,9 +1097,9 @@ void testTombstonedEquipmentInfos() throws Exception { String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); // delete load - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); + testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.LOAD, "v1load", "v1b1", "v1d1", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 1); @@ -1184,8 +1108,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.LOAD); equipmentDeletionInfos.setEquipmentId("v3load"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VARIANT_NOT_EXISTING_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); assertFalse(networkModificationsResult.get().modificationResults().isEmpty()); @@ -1198,8 +1121,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.SHUNT_COMPENSATOR); equipmentDeletionInfos.setEquipmentId("v2shunt"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.SHUNT_COMPENSATOR, "v2shunt", "v2bshunt", "v2dshunt", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 3); @@ -1208,8 +1130,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.GENERATOR); equipmentDeletionInfos.setEquipmentId("idGenerator"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.GENERATOR, "idGenerator", "v2bgenerator", "v2dgenerator", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 4); @@ -1218,8 +1139,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.LINE); equipmentDeletionInfos.setEquipmentId("line2"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testBranchDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.LINE, "line2", "v1bl2", "v1dl2", "s1", "v3bl2", "v3dl2", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 5); @@ -1228,8 +1148,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.TWO_WINDINGS_TRANSFORMER); equipmentDeletionInfos.setEquipmentId("trf1"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testBranchDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.TWO_WINDINGS_TRANSFORMER, "trf1", "v1btrf1", "v1dtrf1", "s1", "v2btrf1", "v2dtrf1", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 6); @@ -1238,8 +1157,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.THREE_WINDINGS_TRANSFORMER); equipmentDeletionInfos.setEquipmentId("trf6"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); test3WTDeletionImpacts(mvcResult.getResponse().getContentAsString(), "trf6", "v1btrf6", "v1dtrf6", "v2btrf6", "v2dtrf6", "v4btrf6", "v4dtrf6", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 7); @@ -1248,8 +1166,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.STATIC_VAR_COMPENSATOR); equipmentDeletionInfos.setEquipmentId("v3Compensator"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.STATIC_VAR_COMPENSATOR, "v3Compensator", "v3bCompensator", "v3dCompensator", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 8); @@ -1258,8 +1175,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.BATTERY); equipmentDeletionInfos.setEquipmentId("v3Battery"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.BATTERY, "v3Battery", "v3bBattery", "v3dBattery", "s2"); testNetworkModificationsCount(TEST_GROUP_ID, 9); @@ -1268,8 +1184,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.DANGLING_LINE); equipmentDeletionInfos.setEquipmentId("v2Dangling"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); testConnectableDeletionImpacts(mvcResult.getResponse().getContentAsString(), IdentifiableType.DANGLING_LINE, "v2Dangling", "v2bdangling", "v2ddangling", "s1"); testNetworkModificationsCount(TEST_GROUP_ID, 10); @@ -1278,8 +1193,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.HVDC_LINE); equipmentDeletionInfos.setEquipmentId("hvdcLine"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); List expectedImpacts = createMultipleDeletionImpacts( List.of( @@ -1297,8 +1211,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.VOLTAGE_LEVEL); equipmentDeletionInfos.setEquipmentId("v5"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); expectedImpacts = createMultipleDeletionImpacts( List.of( @@ -1315,8 +1228,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.SUBSTATION); equipmentDeletionInfos.setEquipmentId("s3"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); expectedImpacts = createMultipleDeletionImpacts( List.of( @@ -1334,8 +1246,7 @@ void testTombstonedEquipmentInfos() throws Exception { equipmentDeletionInfos.setEquipmentType(IdentifiableType.SUBSTATION); equipmentDeletionInfos.setEquipmentId("s2"); equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, VariantManagerConstants.INITIAL_VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); expectedImpacts = new ArrayList<>(); // Two winding transformer trf2 (in s1) is regulating on v3load (in s2), resetting regulation on delete of v3load adds a modification impact on the substation s1 @@ -1724,7 +1635,7 @@ void testDeleteStashedNetworkModifications() throws Exception { .equipmentId("v1load") .build(); String loadModificationInfosJson = getJsonBody(loadModificationInfos, TEST_NETWORK_ID, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mvcResult = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(loadModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult); List modifications = modificationRepository.getModifications(TEST_GROUP_ID, true, true); @@ -1941,15 +1852,13 @@ void testSearchModificationInfos() throws Exception { .equipmentName(AttributeModification.toAttributeModification("newSubstationName", OperationType.SET)) .build(); String substationModificationInfosJson = getJsonBody(substationModificationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult1 = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult1 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(substationModificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertApplicationStatusOK(mvcResult1); // Generator Creation ID : v2 GeneratorCreationInfos generatorCreationInfos = ModificationCreation.getCreationGenerator("v2", "idGenerator1", "nameGenerator1", "1B", "v2load", "LOAD", "v1"); String generatorCreationInfosJson = getJsonBody(generatorCreationInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult2 = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult2 = runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertNotNull(network.getGenerator("idGenerator1")); assertApplicationStatusOK(mvcResult2); @@ -1959,9 +1868,7 @@ void testSearchModificationInfos() throws Exception { .equipmentId("v5load") .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, TEST_NETWORK_ID, null); - MvcResult mvcResult3 = mockMvc.perform(post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); - assertApplicationStatusOK(mvcResult3); - + runRequestAsync(mockMvc, post(NETWORK_MODIFICATION_URI).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); MvcResult mvcModificationResult; Map> networkModificationsResult; List modificationsSearchResult; diff --git a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java index df946fac5..3ecb991ec 100644 --- a/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java +++ b/src/test/java/org/gridsuite/modification/server/VoltageInitReportTest.java @@ -86,7 +86,7 @@ void testVoltageInitDuplicationLogs(final ApplicationStatus resultStatus, final final UUID networkUuuid = UUID.fromString("11111111-1111-1111-1111-111111111111"); final UUID reportUuid = UUID.fromString("88888888-8888-8888-8888-888888888888"); //simulate PUT /v1/groups/abc?action=COPY with body ModificationApplicationContext(networkUuid=0000, reportUuid=0000, reporterId=0000, variantId=0000, duplicateFrom=0000) - assertThat(networkModificationApplicator.applyModifications( + assertThat(networkModificationApplicator.applyModificationsBlocking( new ModificationApplicationGroup(UUID.randomUUID(), List.of(ModificationEntity.fromDTO(modificationInfos)), new ReportInfos(reportUuid, UUID.fromString("99999999-9999-9999-9999-999999999999"))), new NetworkInfos(network, networkUuuid, true))) .as("network modifications results") diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java index 88d38c2c0..1002c3ab3 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractInjectionModificationTest.java @@ -12,9 +12,12 @@ import org.gridsuite.modification.dto.OperationType; import org.junit.jupiter.api.Tag; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import static org.assertj.core.api.Assertions.assertThat; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -41,13 +44,17 @@ protected void assertChangeConnectionState(Injection existingEquipment, Injec assertThat(existingEquipment.getTerminal().isConnected()).isNotEqualTo(expectedState); String modificationInfosJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // connection state has changed as expected assertThat(existingEquipment.getTerminal().isConnected()).isEqualTo(expectedState); // try to modify again => no change on connection state - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertThat(existingEquipment.getTerminal().isConnected()).isEqualTo(expectedState); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java index 30a64efda..44982b24c 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/AbstractNetworkModificationTest.java @@ -39,6 +39,7 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.io.IOException; import java.util.*; @@ -51,6 +52,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -134,7 +136,9 @@ public void testCreate() throws Exception { ModificationInfos modificationToCreate = buildModification(); String bodyJson = getJsonBody(modificationToCreate, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); @@ -158,7 +162,9 @@ public void testCreateDisabledModification() throws Exception { modificationToCreate.setActivated(false); String modificationToCreateJson = getJsonBody(modificationToCreate, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); @@ -242,9 +248,11 @@ public void testCopy() throws Exception { UUID modificationUuid = saveModification(modificationToCopy); String body = TestUtils.getJsonBody(List.of(modificationUuid), AbstractNetworkModificationTest.TEST_NETWORK_ID, null); - mockMvc.perform(put(URI_NETWORK_MODIF_COPY) + ResultActions mockMvcResultActions = mockMvc.perform(put(URI_NETWORK_MODIF_COPY) .content(body) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); List modifications = networkModificationRepository diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java index f73ed15a0..5ef4b205a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BalancesAdjustmentTest.java @@ -24,6 +24,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import org.springframework.web.client.HttpStatusCodeException; import java.util.List; @@ -33,7 +34,9 @@ import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -121,7 +124,9 @@ public void testCreate() throws Exception { ModificationInfos modificationToCreate = buildModification(); String bodyJson = getJsonBody(modificationToCreate, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java index 6e67e23a6..fcb35eaa0 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryCreationInNodeBreakerTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.Arrays; import java.util.List; @@ -30,7 +31,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -206,7 +209,9 @@ void testCreateWithErrors() throws Exception { batteryCreationInfos.setVoltageLevelId("v2"); batteryCreationInfos.setBusOrBusbarSectionId("1B"); batteryCreationInfosJson = getJsonBody(batteryCreationInfos, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(batteryCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(networkModificationsResult); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java index c7a43d187..da04d9d2a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/BatteryModificationTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import org.springframework.util.CollectionUtils; import java.util.*; @@ -30,7 +31,9 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -150,7 +153,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { .add(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); BatteryModificationInfos createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -162,7 +167,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinQ(new AttributeModification<>(-200., OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -175,7 +182,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMaxQ(new AttributeModification<>(200., OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -187,7 +196,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinQ(new AttributeModification<>(-1.1, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -201,7 +212,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { batteryModificationInfos.setMinP(null); batteryModificationInfos.setMaxP(null); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); assertThat(createdModification).recursivelyEquals(batteryModificationInfos); @@ -215,8 +228,10 @@ void testDroopUnchanged() throws Exception { batteryModificationInfos.getDroop().setValue(18f); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + .andExpect(status().isOk()); BatteryModificationInfos createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -226,8 +241,10 @@ void testDroopUnchanged() throws Exception { batteryModificationInfos.setDroop(null); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + .andExpect(status().isOk()); createdModification = (BatteryModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -239,15 +256,19 @@ void testImpactsAfterActivePowerControlModifications() throws Exception { BatteryModificationInfos batteryModificationInfos = (BatteryModificationInfos) buildModification(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + .andExpect(status().isOk()); Battery battery = getNetwork().getBattery("v3Battery"); assertEquals(0.1f, battery.getExtension(ActivePowerControl.class).getDroop()); assertTrue(battery.getExtension(ActivePowerControl.class).isParticipate()); //modify only droop batteryModificationInfos.setDroop(new AttributeModification<>(0.5f, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); //check impacts String resultAsString = mvcResult.getResponse().getContentAsString(); @@ -258,7 +279,9 @@ void testImpactsAfterActivePowerControlModifications() throws Exception { //modify only participate batteryModificationInfos.setParticipate(new AttributeModification<>(false, OperationType.SET)); modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); //check impacts resultAsString = mvcResult.getResponse().getContentAsString(); @@ -283,7 +306,9 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { Double activePower = batteryModificationInfos.getTargetP() != null ? batteryModificationInfos.getTargetP().getValue() : battery.getTargetP(); String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("MODIFY_BATTERY_ERROR : Battery '" + "v3Battery" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", ERROR_MESSAGE_KEY, reportService); @@ -328,7 +353,9 @@ void testMinQGreaterThanMaxQ() throws Exception { }); } String modificationToCreateJson = getJsonBody(batteryModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("MODIFY_BATTERY_ERROR : Battery '" + "v3Battery" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), ERROR_MESSAGE_KEY, reportService); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/CompositeModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/CompositeModificationsTest.java index 216267640..85e34c3e7 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/CompositeModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/CompositeModificationsTest.java @@ -19,12 +19,12 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; -import org.mockito.stubbing.Answer; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import java.util.List; import java.util.UUID; +import java.util.concurrent.CompletableFuture; import static com.vladmihalcea.sql.SQLStatementCountValidator.assertSelectCount; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -46,13 +46,13 @@ class CompositeModificationsTest extends AbstractNetworkModificationTest { @BeforeEach void specificSetUp() { // Currently we never apply composite modifications (apply mocked) - NetworkModificationResult networkModificationResultMock = NetworkModificationResult.builder() + CompletableFuture networkModificationResultMock = CompletableFuture.completedFuture(NetworkModificationResult.builder() .applicationStatus(NetworkModificationResult.ApplicationStatus.ALL_OK) .lastGroupApplicationStatus(NetworkModificationResult.ApplicationStatus.ALL_OK) .networkImpacts(List.of()) - .build(); + .build()); when(networkModificationApplicator.applyModifications(any(ModificationApplicationGroup.class), any())) - .then((Answer) invocation -> networkModificationResultMock); + .then(invocation -> networkModificationResultMock); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java index 72514c98e..78798365b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteAttachingLineTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Map; @@ -25,7 +26,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -89,7 +92,9 @@ void createWithInvalidLineIdTest() throws Exception { .build(); var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteAttachingLineInfos, null); - mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -107,7 +112,9 @@ void createWithNoAttachmentPointTest() throws Exception { var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteAttachingLineInfos, null); - mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage("Unable to find the attachment point and the tapped voltage level from lines l1, l3 and l1", ERROR_MESSAGE_KEY, reportService); @@ -120,7 +127,9 @@ void createNewLineWithExistingIdTest() throws Exception { deleteAttachingLineInfos.setReplacingLine1Id("l2"); String lineAttachToAbsentLineJson = getJsonBody(deleteAttachingLineInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), ERROR_MESSAGE_KEY, reportService); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java index 4f65af64d..d5be334aa 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/DeleteVoltageLevelOnLineTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Map; @@ -25,7 +26,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -91,7 +94,9 @@ void createWithInvalidLineIdTest() throws Exception { var objectWriter = mapper.writer().withDefaultPrettyPrinter(); String json = getJsonBody(deleteVoltageLevelOnLineInfos, null); - mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(MockMvcRequestBuilders.post(getNetworkModificationUri()).content(json).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_NOT_FOUND, "ll").getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -103,7 +108,9 @@ void createNewLineWithExistingIdTest() throws Exception { DeleteVoltageLevelOnLineInfos deleteVoltageLevelOnLineInfos = (DeleteVoltageLevelOnLineInfos) buildModification(); deleteVoltageLevelOnLineInfos.setReplacingLine1Id("l2"); String lineAttachToAbsentLineJson = getJsonBody(deleteVoltageLevelOnLineInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(lineAttachToAbsentLineJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, "l2").getMessage(), ERROR_MESSAGE_KEY, reportService); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java index df4143a21..202d83903 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentAttributeModificationTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.time.Instant; import java.util.Map; @@ -29,8 +30,10 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -62,14 +65,18 @@ void testEquipmentAttributeModificationInfos() throws Exception { String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, null); // switch opening - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); // switch in variant VARIANT_ID opening switchStatusModificationInfos.setEquipmentId("break1Variant"); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, NetworkCreation.VARIANT_ID); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1Variant")); } @@ -93,7 +100,9 @@ private void switchModifications(String extraParams, String switchId1, String sw // switch not existing switchStatusModificationInfos.setEquipmentId(switchNotFoundId); String switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(EQUIPMENT_NOT_FOUND, switchNotFoundId).getMessage(), ERROR_MESSAGE_KEY, reportService); @@ -102,27 +111,35 @@ private void switchModifications(String extraParams, String switchId1, String sw switchStatusModificationInfos.setEquipmentId(switchId1); switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testEmptyImpacts(mapper, mvcResult.getResponse().getContentAsString()); // switch opening switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); // switch closing switchStatusModificationInfos.setEquipmentId(switchId2); switchStatusModificationInfos.setEquipmentAttributeValue(false); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), substationsIds); // switch opening on another substation switchStatusModificationInfos.setEquipmentId(switchId3); switchStatusModificationInfos.setEquipmentAttributeValue(true); switchStatusModificationInfosJson = getJsonBody(switchStatusModificationInfos, extraParams); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(switchStatusModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), otherSubstationsIds); testNetworkModificationsCount(getGroupId(), modificationsCount); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java index 972ab295b..9eb84f965 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/EquipmentDeletionTest.java @@ -28,6 +28,7 @@ import org.junit.jupiter.params.provider.CsvSource; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -37,7 +38,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -87,7 +90,9 @@ void testOkWhenRemovingIsolatedEquipment() throws Exception { String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, null); // delete load with error removing dangling switches, because the load connection node is not linked to any other node - mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()) .andReturn(); @@ -129,7 +134,9 @@ private void deleteHvdcLineWithShuntCompensator(String shuntNameToBeRemoved, boo .build(); String equipmentDeletionInfosJson = getJsonBody(equipmentDeletionInfos, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(equipmentDeletionInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()) .andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java index 1b0ea9058..1d2686aab 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GenerationDispatchTest.java @@ -168,8 +168,7 @@ void testGenerationDispatchWithMultipleEnergySource() throws Exception { setNetwork(Network.read("testGenerationDispatchWithMultipleEnergySource.xiidm", getClass().getResourceAsStream("/testGenerationDispatchWithMultipleEnergySource.xiidm"))); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertLogMessageWithoutRank("The total demand is : 768.0 MW", "network.modification.TotalDemand", reportService); assertLogMessageWithoutRank("The total amount of fixed supply is : 0.0 MW", "network.modification.TotalAmountFixedSupply", reportService); @@ -491,8 +490,7 @@ void testGenerationDispatchWithSubstationsHierarchy() throws Exception { setNetwork(Network.read("ieee118cdf_testDemGroupe.xiidm", getClass().getResourceAsStream("/ieee118cdf_testDemGroupe.xiidm"))); String modificationJson = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); // generators modified assertEquals(264, getNetwork().getGenerator("B4-G").getTargetP(), 0.001); @@ -599,8 +597,7 @@ void testGenerationDispatchWithMaxValueLessThanMinP() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String modificationJson = getJsonBody(modification, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); assertEquals(NetworkModificationResult.ApplicationStatus.WITH_WARNINGS, extractApplicationStatus(networkModificationsResult).getFirst()); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java index 2b2a7a5c4..df315e5b8 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorCreationInNodeBreakerTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; @@ -25,7 +26,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -238,7 +241,9 @@ void testCreateWithErrors() throws Exception { generatorCreationInfos.setBusOrBusbarSectionId("1B"); generatorCreationInfosJson = getJsonBody(generatorCreationInfos, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(networkModificationsResult); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java index 98f395c66..1162630fa 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorModificationTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import org.springframework.util.CollectionUtils; import java.util.*; @@ -28,7 +29,9 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -172,7 +175,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { .add(); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -184,7 +189,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMinQ(new AttributeModification<>(-200., OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -197,7 +204,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMaxQ(new AttributeModification<>(200., OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -209,7 +218,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMinQ(new AttributeModification<>(-1.1, OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -225,7 +236,9 @@ void testMinMaxReactiveLimitsAttributesModification() throws Exception { generatorModificationInfos.setMaxP(null); generatorModificationInfos.setRatedS(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); assertThat(createdModification).recursivelyEquals(generatorModificationInfos); @@ -240,7 +253,9 @@ void testGeneratorShortCircuitAttributesModification() throws Exception { generatorModificationInfos.setDirectTransX(null); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -254,7 +269,9 @@ void testGeneratorShortCircuitAttributesModification() throws Exception { modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -271,7 +288,9 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationOn(new AttributeModification<>(true, OperationType.SET)); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); GeneratorModificationInfos createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -283,7 +302,9 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationOn(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -295,7 +316,9 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setVoltageRegulationType(new AttributeModification<>(VoltageRegulationType.LOCAL, OperationType.SET)); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -311,7 +334,9 @@ void testGeneratorVoltageRegulatorAttributesModification() throws Exception { generatorModificationInfos.setParticipate(null); modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -397,8 +422,10 @@ void testMinQGreaterThanMaxQ() throws Exception { }); } String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + .andExpect(status().isOk()); assertLogMessage("MODIFY_GENERATOR_ERROR : Generator '" + "idGenerator" + "' : maximum reactive power " + maxQ.get() + " is expected to be greater than or equal to minimum reactive power " + minQ.get(), ERROR_MESSAGE_KEY, reportService); } @@ -418,7 +445,9 @@ void testActivePowerZeroOrBetweenMinAndMaxActivePower() throws Exception { Double activePower = generatorModificationInfos.getTargetP() != null ? generatorModificationInfos.getTargetP().getValue() : generator.getTargetP(); String modificationToCreateJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("MODIFY_GENERATOR_ERROR : Generator '" + "idGenerator" + "' : Active power " + activePower + " is expected to be equal to 0 or within the range of minimum active power and maximum active power: [" + minActivePower + ", " + maxActivePower + "]", ERROR_MESSAGE_KEY, reportService); @@ -434,7 +463,9 @@ void testUnsetAttributes() throws Exception { String generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertEquals(Double.NaN, getNetwork().getGenerator("idGenerator").getTargetV()); @@ -443,7 +474,9 @@ void testUnsetAttributes() throws Exception { generatorModificationInfos.setTargetV(new AttributeModification<>(44.0, OperationType.SET)); generatorModificationInfos.setTargetQ(new AttributeModification<>(null, OperationType.UNSET)); generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertEquals(Double.NaN, getNetwork().getGenerator("idGenerator").getTargetQ()); @@ -461,7 +494,9 @@ void changeGeneratorOnBusBreakerWithoutBusBarSection() throws Exception { .connectionPosition(new AttributeModification<>(1, OperationType.SET)) .build(); String generatorModificationInfosJson = getJsonBody(generatorModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(generatorModificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); generatorModificationInfos = (GeneratorModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals(1, generatorModificationInfos.getConnectionPosition().getValue()); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java index 2975c2b44..fd95fd84a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GeneratorScalingTest.java @@ -29,6 +29,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.nio.file.Paths; import java.time.Instant; @@ -42,7 +43,9 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -188,7 +191,9 @@ void testVentilationModeWithoutDistributionKey() throws Exception { String modificationToCreateJson = getJsonBody(modificationToCreate, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertEquals(200, getNetwork().getGenerator(GENERATOR_ID_2).getTargetP(), 0.01D); @@ -271,9 +276,11 @@ void testScalingCreationWithWarning() throws Exception { String modificationToCreateJson = getJsonBody(generatorScalingInfo, null); - var response = mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(modificationToCreateJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + var response = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()) .andReturn(); @@ -478,9 +485,11 @@ private void testVariationWithSomeDisconnections(VariationMode variationMode, Li String modificationToCreateJson = getJsonBody(generatorScalingInfo, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(modificationToCreateJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // If we sum the targetP for all expected modified generators, we should have the requested variation value diff --git a/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java b/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java index 8f881d04a..aadb2ec11 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/GroovyScriptTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.Set; import java.util.UUID; @@ -24,7 +25,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -71,42 +74,54 @@ void testGroovy() throws Exception { .build(); String groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); // apply groovy script with generator target P modification - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); // apply groovy script with load type modification groovyScriptInfos.setScript("network.getLoad('v1load').loadType=com.powsybl.iidm.network.LoadType.FICTITIOUS\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); // apply groovy script with lcc converter station power factor modification groovyScriptInfos.setScript("network.getLccConverterStation('v1lcc').powerFactor=1\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); // apply groovy script with line R modification groovyScriptInfos.setScript("network.getLine('line1').r=2\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1", "s2")); // apply groovy script with two windings transformer ratio tap modification groovyScriptInfos.setScript("network.getTwoWindingsTransformer('trf1').getRatioTapChanger().tapPosition=2\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); // apply groovy script with three windings transformer phase tap modification groovyScriptInfos.setScript("network.getThreeWindingsTransformer('trf6').getLeg1().getPhaseTapChanger().tapPosition=0\n"); groovyScriptInfosJson = getJsonBody(groovyScriptInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(groovyScriptInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()) .andReturn(); testElementModificationImpact(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java index 5be05f498..62034ae8b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineAttachToVoltageLevelTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.Arrays; import java.util.Map; @@ -24,8 +25,10 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -126,7 +129,9 @@ protected void assertAfterNetworkModificationDeletion() { private void tryToCreateLineWithExistingId(LineAttachToVoltageLevelInfos tryWithExistingLine, String existingLineId) throws Exception { String tryWithExistingLineJson = getJsonBody(tryWithExistingLine, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tryWithExistingLineJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tryWithExistingLineJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(LINE_ALREADY_EXISTS, existingLineId).getMessage(), ERROR_MESSAGE_KEY, reportService); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java index f6c645256..ca8bd237d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineCreationInNodeBreakerTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; @@ -25,7 +26,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -41,7 +44,9 @@ void testCreateWithBadVariant() throws Exception { modificationToCreate.setEquipmentId("idLine2"); modificationToCreate.setEquipmentName("nameLine2"); String modificationToCreateJson = getJsonBody(modificationToCreate, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(networkModificationsResult); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java index e5a7aa19c..9b018fa43 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LineModificationTest.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.Collection; import java.util.List; @@ -45,7 +46,9 @@ import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -251,7 +254,9 @@ void testPermanentLimitUnchanged() throws Exception { String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -268,7 +273,9 @@ void testCharacteristicsModification() throws Exception { String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -280,7 +287,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setR(new AttributeModification<>(2.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -292,7 +301,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setG1(new AttributeModification<>(11.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -304,7 +315,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB1(new AttributeModification<>(12.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -316,7 +329,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setG2(new AttributeModification<>(13.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); @@ -328,7 +343,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(new AttributeModification<>(14.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(5); @@ -339,7 +356,9 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(null); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(6); @@ -355,8 +374,10 @@ void testCharacteristicsModification() throws Exception { lineModificationInfos.setB2(new AttributeModification<>(14.0, OperationType.SET)); modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true) @@ -397,7 +418,9 @@ void testTemporaryLimitsModification() throws Exception { .build(); String modificationToCreateJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -414,7 +437,9 @@ void testTemporaryLimitsModification() throws Exception { .build(); modificationToCreateJson = getJsonBody(lineModificationInfos1, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -470,14 +495,18 @@ private void changeLineConnectionState(Line existingEquipment, boolean expectedS assertThat(existingEquipment.getTerminal2().isConnected()).isNotEqualTo(expectedState); String modificationInfosJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // connection state has changed as expected assertThat(existingEquipment.getTerminal1().isConnected()).isEqualTo(expectedState); assertThat(existingEquipment.getTerminal2().isConnected()).isEqualTo(expectedState); // try to modify again => no change on connection state - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertThat(existingEquipment.getTerminal1().isConnected()).isEqualTo(expectedState); assertThat(existingEquipment.getTerminal2().isConnected()).isEqualTo(expectedState); @@ -497,7 +526,9 @@ void changeLineConnectablePosition() throws Exception { .connectionPosition2(new AttributeModification<>(1, OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals(1, createdModification.getConnectionPosition1().getValue()); @@ -514,7 +545,9 @@ void changeLineConnectablePositionWithoutBusBarSection() throws Exception { .connectionName2(new AttributeModification<>("line3", OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals("line3", createdModification.getConnectionName1().getValue()); @@ -551,7 +584,9 @@ void changeLineWithConnectablePositionOneSide() throws Exception { .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); LineModificationInfos createdModification = (LineModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); assertEquals("cnLine10", createdModification.getConnectionName1().getValue()); @@ -586,7 +621,9 @@ void addConnectablePositionExtensionToLine() throws Exception { .connectionDirection1(new AttributeModification<>(ConnectablePosition.Direction.BOTTOM, OperationType.SET)) .build(); String modificationInfosJson = getJsonBody(lineModificationInfos, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); @@ -602,7 +639,9 @@ void addConnectablePositionExtensionToLine() throws Exception { .connectionPosition1(new AttributeModification<>(2, OperationType.SET)) .build(); modificationInfosJson = getJsonBody(lineModificationInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertTrue(networkModificationsResult.isPresent()); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java index 283c20663..b177acd50 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadCreationInNodeBreakerTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -30,7 +31,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -88,7 +91,9 @@ void testCreateWithErrors() throws Exception { testNetworkModificationsCount(getGroupId(), 5); loadCreationInfosJson = getJsonBody(loadCreationInfos, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(loadCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpectAll(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(networkModificationsResult); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java b/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java index 3ad984895..c9b1b362d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/LoadScalingTest.java @@ -31,6 +31,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.nio.file.Paths; import java.time.Instant; @@ -43,8 +44,10 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -183,7 +186,9 @@ void testVentilationModeWithoutDistributionKey() throws Exception { .build(); String body = getJsonBody(modificationToCreate, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); wireMockUtils.verifyGetRequest(stubNonDistributionKey, PATH, handleQueryParams(FILTER_NO_DK), false); @@ -270,9 +275,11 @@ void testScalingCreationWithWarning() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(loadScalingInfo, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(body) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpectAll( status().isOk(), content().string(IsNull.notNullValue()) @@ -487,9 +494,11 @@ private void testVariationWithSomeDisconnections(VariationMode variationMode, Li String modificationToCreateJson = getJsonBody(loadScalingInfo, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(modificationToCreateJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // If we sum the P0 for all expected modified loads, we should have the requested variation value diff --git a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java index 8a3775817..5cf00ff40 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/OperatingStatusModificationLockoutLineTest.java @@ -21,6 +21,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.Map; import java.util.UUID; @@ -32,8 +33,10 @@ import static org.gridsuite.modification.server.utils.NetworkUtil.createSwitch; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -101,7 +104,9 @@ private void testLockoutLine(String lineID) throws Exception { String modificationJson = getJsonBody(modificationInfos, null); assertNull(getNetwork().getLine(lineID).getExtension(OperatingStatus.class)); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); TestUtils.assertOperatingStatus(getNetwork(), lineID, TARGET_BRANCH_STATUS); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java index a2064772d..7143d97e1 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/ShuntCompensatorModificationTest.java @@ -16,6 +16,7 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -28,7 +29,9 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -67,7 +70,9 @@ void testWrongMaximumSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Maximum section count should be greater or equal to 1")).getMessage(), @@ -83,7 +88,9 @@ void testWrongSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), @@ -105,7 +112,9 @@ void testWrongSectionCountChangeSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensatorModifications, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, String.format("Section count should be between 0 and Maximum section count (1), actual : 3")).getMessage(), @@ -127,7 +136,9 @@ void testWrongSectionCountChangeMaximumSectionCount() throws Exception { .build(); String body = getJsonBody(shuntCompensatorModifications, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, "Section count should be between 0 and Maximum section count (1), actual : -1").getMessage(), @@ -143,7 +154,9 @@ void testNegativeQmaxAtNominalV() throws Exception { .build(); String body = getJsonBody(shuntCompensator, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_SHUNT_COMPENSATOR_ERROR, "Qmax at nominal voltage should be greater or equal to 0").getMessage(), diff --git a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java index de0c35fd9..2d3de2f87 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/StaticVarCompensatorCreationInNodeBreakerTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -28,7 +29,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -210,7 +213,9 @@ void testCreateWithErrors() throws Exception { compensatorCreationInfos.setVoltageLevelId("v2"); compensatorCreationInfos.setBusOrBusbarSectionId("1B"); compensatorCreationInfosJson = getJsonBody(compensatorCreationInfos, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(compensatorCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java index d3cc9062e..9d91f4e71 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationBusBreakerTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -29,7 +30,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -422,7 +425,9 @@ private void testCreateTwoWindingsTransformerInBusBreaker(TwoWindingsTransformer final String transformerId = twoWindingsTransformerCreationInfos.getEquipmentId(); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); testBranchCreationImpacts(mapper, mvcResult.getResponse().getContentAsString(), Set.of("s1")); assertNotNull(getNetwork().getTwoWindingsTransformer(transformerId)); // transformer was created diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java index 19d008609..8d1f0197a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerCreationNodeBreakerTest.java @@ -20,6 +20,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -31,7 +32,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @Tag("IntegrationTest") @@ -539,7 +542,9 @@ void testCreateWithErrors() throws Exception { twoWindingsTransformerCreationInfos.setEquipmentId("id2wt3"); twoWindingsTransformerCreationInfos.setEquipmentName("name2wt3"); twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, "variant_not_existing"); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(networkModificationsResult); @@ -564,7 +569,9 @@ private void testCreateTwoWindingsTransformerInNodeBreaker(TwoWindingsTransforme final String transformerId = twoWindingsTransformerCreationInfos.getEquipmentId(); String twoWindingsTransformerCreationInfosJson = getJsonBody(twoWindingsTransformerCreationInfos, null); - mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(twoWindingsTransformerCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); TwoWindingsTransformer twoWindingsTransformer = getNetwork().getTwoWindingsTransformer(transformerId); assertNotNull(twoWindingsTransformer); // transformer was created diff --git a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java index c225a2b4d..1d2de9e9b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/TwoWindingsTransformerModificationTest.java @@ -7,15 +7,8 @@ package org.gridsuite.modification.server.modifications; import com.fasterxml.jackson.core.type.TypeReference; -import com.powsybl.iidm.network.*; -import com.powsybl.iidm.network.LoadingLimits; -import com.powsybl.iidm.network.Network; -import com.powsybl.iidm.network.PhaseTapChanger; -import com.powsybl.iidm.network.Terminal; -import com.powsybl.iidm.network.TwoSides; -import com.powsybl.iidm.network.TwoWindingsTransformer; - import com.powsybl.commons.report.ReportNode; +import com.powsybl.iidm.network.*; import com.powsybl.iidm.network.extensions.ConnectablePosition; import com.powsybl.iidm.network.extensions.TwoWindingsTransformerToBeEstimated; import org.gridsuite.modification.NetworkModificationException; @@ -39,6 +32,7 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.NetworkUtil.createTwoWindingsTransformer; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; +import static org.gridsuite.modification.server.utils.TestUtils.runRequestAsync; import static org.gridsuite.modification.server.utils.assertions.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; @@ -377,9 +371,7 @@ void testRatioTapChangerModification() throws Exception { .build(); String modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); TwoWindingsTransformerModificationInfos createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -394,9 +386,7 @@ void testRatioTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getRatioTapChanger().setTargetV(new AttributeModification<>(250.0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -408,9 +398,7 @@ void testRatioTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getRatioTapChanger().setTerminalRefConnectableId(new AttributeModification<>("trf1_terminal1", OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -421,9 +409,7 @@ void testRatioTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getRatioTapChanger().setTargetDeadband(new AttributeModification<>(22.0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -434,9 +420,7 @@ void testRatioTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getRatioTapChanger().setTapPosition(new AttributeModification<>(0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); @@ -463,9 +447,7 @@ void testRatioTapChangerModification() throws Exception { )); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(5); @@ -475,9 +457,7 @@ void testRatioTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.setRatioTapChanger(RatioTapChangerModificationInfos.builder().enabled(new AttributeModification<>(false, OperationType.SET)).build()); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(6); @@ -502,9 +482,7 @@ void testPhaseTapChangerModification() throws Exception { .build(); String modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); TwoWindingsTransformerModificationInfos createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(0); @@ -515,9 +493,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setRegulationValue(new AttributeModification<>(250.0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(1); @@ -528,9 +504,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setTerminalRefConnectableId(new AttributeModification<>("trf1_terminal1", OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(2); @@ -541,9 +515,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setTargetDeadband(new AttributeModification<>(22.0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(3); @@ -554,9 +526,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setTapPosition(new AttributeModification<>(0, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(4); @@ -584,9 +554,7 @@ void testPhaseTapChangerModification() throws Exception { .build())); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(5); @@ -598,9 +566,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setRegulationSide(new AttributeModification<>(RegulationSide.SIDE1, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(6); @@ -611,9 +577,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.getPhaseTapChanger().setRegulationSide(new AttributeModification<>(RegulationSide.SIDE2, OperationType.SET)); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(7); @@ -623,8 +587,7 @@ void testPhaseTapChangerModification() throws Exception { twoWindingsTransformerModificationInfos.setPhaseTapChanger(PhaseTapChangerModificationInfos.builder().enabled(new AttributeModification<>(false, OperationType.SET)).build()); modificationToCreateJson = getJsonBody(twoWindingsTransformerModificationInfos, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); createdModification = (TwoWindingsTransformerModificationInfos) networkModificationRepository.getModifications(getGroupId(), false, true).get(8); @@ -685,9 +648,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { .build(); String modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); PhaseTapChanger phaseTapChanger = twt3.getPhaseTapChanger(); @@ -703,9 +664,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { phaseTapChangerCreation.getPhaseTapChanger().setRegulating(new AttributeModification<>(false, OperationType.SET)); String modificationToModifyJson2 = getJsonBody(phaseTapChangerCreation, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToModifyJson2).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson2).contentType(MediaType.APPLICATION_JSON), status().isOk()); phaseTapChanger = getNetwork().getTwoWindingsTransformer(twtId).getPhaseTapChanger(); // modification 2 assert @@ -720,8 +679,7 @@ void testPhaseTapChangerRegulationModification() throws Exception { phaseTapChangerCreation.getPhaseTapChanger().setRegulating(new AttributeModification<>(true, OperationType.SET)); String modificationToModifyJson3 = getJsonBody(phaseTapChangerCreation, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToModifyJson3).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson3).contentType(MediaType.APPLICATION_JSON), status().isOk()); phaseTapChanger = getNetwork().getTwoWindingsTransformer(twtId).getPhaseTapChanger(); @@ -753,9 +711,7 @@ void testPhaseTapChangerRegulationModification2() throws Exception { String modificationToModifyJson1 = getJsonBody(phaseTapChangerCreation, null); // modification 1 assert - mockMvc.perform(post(getNetworkModificationUri()) - .content(modificationToModifyJson1).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson1).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertLogMessage(new NetworkModificationException(MODIFY_TWO_WINDINGS_TRANSFORMER_ERROR, "Regulation value is missing when modifying, phase tap changer can not regulate").getMessage(), ERROR_MESSAGE_KEY, reportService); } @@ -798,9 +754,7 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two .terminal2Connected(side == TwoSides.TWO ? new AttributeModification<>(expectedState, OperationType.SET) : null) .build(); String modificationInfosJson = getJsonBody(modificationInfos, null); - - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()).andReturn(); + MvcResult mvcResult = runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); NetworkModificationsResult networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertEquals(1, extractApplicationStatus(networkModificationsResult).size()); @@ -815,8 +769,7 @@ private void changeConnectionState(TwoWindingsTransformer existingEquipment, Two assertEquals(NetworkModificationResult.ApplicationStatus.ALL_OK, extractApplicationStatus(networkModificationsResult).getFirst()); // try to modify again => no change on connection state - mockMvc.perform(post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationInfosJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); assertThat(terminal.isConnected()).isEqualTo(expectedState); } } @@ -978,9 +931,7 @@ void testPhaseTapChangerRegulationCreation() throws Exception { .build(); String modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); PhaseTapChanger phaseTapChanger = twt3.getPhaseTapChanger(); @@ -1026,9 +977,7 @@ void testPhaseTapChangerRegulationCreation() throws Exception { .build(); modificationToModifyJson = getJsonBody(phaseTapChangerCreation, null); - - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON)) - .andExpect(status().isOk()); + runRequestAsync(mockMvc, post(getNetworkModificationUri()).content(modificationToModifyJson).contentType(MediaType.APPLICATION_JSON), status().isOk()); phaseTapChanger = twt3.getPhaseTapChanger(); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java index f3edee496..75190819a 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageInitModificationTest.java @@ -13,6 +13,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.UUID; @@ -21,7 +22,9 @@ import static org.gridsuite.modification.server.utils.NetworkUtil.createSwitch; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -285,7 +288,9 @@ private void testVoltageInitShunt(String shuntCompensatorId, int currentSectionC .build(); String body = getJsonBody(modification, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java index 1f3907f99..7fe831cd4 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelCreationTest.java @@ -19,6 +19,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.Arrays; import java.util.List; @@ -29,7 +30,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -169,7 +172,9 @@ void testIpMinEqualsIpMax() throws Exception { vli.setIpMin(25.0); vli.setIpMax(25.0); String vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // VL is created assertNotNull(getNetwork().getVoltageLevel("vl_ok")); @@ -195,7 +200,9 @@ private void testIccWithError(Double ipMin, Double ipMax, String reportError) th vli.setIpMax(ipMax); String vliJsonObject = getJsonBody(vli, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vliJsonObject).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); // VL could not have been created assertNull(getNetwork().getVoltageLevel("vl_ko")); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java index 8694be5e6..85f0f5653 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelModificationTest.java @@ -17,6 +17,7 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -26,7 +27,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -242,9 +245,11 @@ void testSetIpMaxOnEquipmentWitOnlyIpMaxExtension() throws Exception { private void applyModification(VoltageLevelModificationInfos infos) throws Exception { String body = getJsonBody(infos, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(body) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); } diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java index a2ea096e0..082c649fc 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VoltageLevelTopologyModificationTest.java @@ -18,11 +18,14 @@ import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -154,9 +157,11 @@ void testInvalidVoltageLevel() throws Exception { .build(); String body = getJsonBody(infos, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(body) - .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); } @Test @@ -196,9 +201,11 @@ void testNonExistentSwitch() throws Exception { .build(); String body = getJsonBody(infos, null); - mockMvc.perform(post(getNetworkModificationUri()) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()) .content(body) - .contentType(MediaType.APPLICATION_JSON)).andExpect(status().isOk()).andReturn(); + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())).andExpect(status().isOk()).andReturn(); } @Override diff --git a/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java index 116946630..d58048b0d 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/VscCreationTest.java @@ -16,6 +16,7 @@ import org.gridsuite.modification.server.utils.NetworkCreation; import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -27,7 +28,9 @@ import static org.gridsuite.modification.server.report.NetworkModificationServerReportResourceBundle.ERROR_MESSAGE_KEY; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -301,7 +304,9 @@ void testCreateAngleDroopPowerControlWithoutEnabling() throws Exception { vscCreationInfos.setAngleDroopActivePowerControl(false); String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); HvdcLine hvdcLine = getNetwork().getHvdcLine("vsc1"); assertThat(hvdcLine).isNotNull(); @@ -319,7 +324,9 @@ void testNotCreateAngleDroopPowerControlWithoutEnabling() throws Exception { vscCreationInfos.setDroop(null); vscCreationInfos.setP0(null); String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); HvdcLine hvdcLine = getNetwork().getHvdcLine("vsc1"); assertThat(hvdcLine).isNotNull(); @@ -361,7 +368,9 @@ private VscCreationInfos buildModificationWithDroopAbsentInfos(boolean isPresent private void checkDroopWithAbsentInfos(VscCreationInfos vscCreationInfos) throws Exception { String vscCreationInfosJson = getJsonBody(vscCreationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(vscCreationInfosJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(new NetworkModificationException(WRONG_HVDC_ANGLE_DROOP_ACTIVE_POWER_CONTROL, ACTIVE_POWER_CONTROL_DROOP_P0_REQUIRED_ERROR_MSG).getMessage(), diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java index 26ec2d028..5ee834c23 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/assignment/AbstractModificationByAssignmentTest.java @@ -34,6 +34,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; import java.util.stream.Collectors; @@ -44,7 +45,9 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -191,7 +194,9 @@ protected void checkCreationApplicationStatus(List> String bodyJson = getJsonBody(modificationByAssignmentInfos, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(bodyJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java index 38688e9cd..6ea3c95ba 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilter/formula/AbstractByFormulaModificationTest.java @@ -32,6 +32,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; import java.util.stream.Collectors; @@ -40,7 +41,9 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -198,7 +201,9 @@ protected void checkCreationApplicationStatus(ByFormulaModificationInfos byFormu NetworkModificationResult.ApplicationStatus applicationStatus) throws Exception { String modificationToCreateJson = getJsonBody(byFormulaModificationInfos, null); - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); Optional networkModificationsResult = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java b/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java index 8a9e9dfd8..4995538c9 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/byfilterdeletion/AbstractByFilterDeletionTest.java @@ -15,6 +15,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; +import org.springframework.test.web.servlet.ResultActions; import java.util.Date; import java.util.List; @@ -24,7 +25,9 @@ import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; abstract class AbstractByFilterDeletionTest extends AbstractNetworkModificationTest { @@ -126,7 +129,9 @@ void testCreateAllFiltersWrong() throws Exception { .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE))).getId(); String body = getJsonBody(byFilterDeletionInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(body).contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()); assertLogMessage(byFilterDeletionInfos.getErrorType().name() + ": There is no valid equipment ID among the provided filter(s)", "network.modification.invalidFilters", reportService); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java index 0b0608824..3db83a1ce 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularcreations/TabularGeneratorCreationsTest.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.List; import java.util.Map; @@ -38,9 +39,11 @@ import static org.gridsuite.modification.server.impacts.TestImpactUtils.createCollectionElementImpact; import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage; import static org.junit.jupiter.api.Assertions.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; 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.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -254,8 +257,10 @@ void testAllModificationsHaveSucceeded() throws Exception { .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("Tabular creation: 2 generators have been created", "network.modification.tabular.creation", reportService); } @@ -303,8 +308,10 @@ void testAllModificationsHaveFailed() throws Exception { .build(); String tabularCreationJson = getJsonBody(creationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("Tabular creation: No generators have been created", "network.modification.tabular.creation.error", reportService); } @@ -341,8 +348,10 @@ void testUnsupportedTabularCreationType() throws Exception { String tabularCreationJson = getJsonBody(creationInfos, null); // creation - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularCreationJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(result); diff --git a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java index ceb79c2a8..9b4758f3b 100644 --- a/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java +++ b/src/test/java/org/gridsuite/modification/server/modifications/tabularmodifications/TabularGeneratorModificationsTest.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import org.testcontainers.shaded.org.apache.commons.lang3.tuple.Pair; import java.util.List; @@ -42,7 +43,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -560,8 +563,10 @@ void testAllModificationsHaveFailed() throws Exception { .build(); String modificationToCreateJson = getJsonBody(modificationInfos, null); - mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(modificationToCreateJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); assertLogMessage("Tabular modification: No generators have been modified", "network.modification.tabular.modification.error", reportService); } @@ -596,8 +601,10 @@ void testUnsupportedTabularModificationType() throws Exception { String tabularModificationJson = getJsonBody(tabularInfos, null); // creation - MvcResult mvcResult = mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson) + ResultActions mockMvcResultActions = mockMvc.perform(post(getNetworkModificationUri()).content(tabularModificationJson) .contentType(MediaType.APPLICATION_JSON)) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpect(status().isOk()).andReturn(); NetworkModificationsResult result = mapper.readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); assertNotNull(result); diff --git a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java index dc226b06d..958a715e5 100644 --- a/src/test/java/org/gridsuite/modification/server/service/BuildTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/BuildTest.java @@ -982,7 +982,7 @@ void testApplyModificationWithErrors(final MockWebServer server) { List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); // Building mode : No error send with exception - NetworkModificationResult networkModificationResult = networkModificationApplicator.applyModifications( + NetworkModificationResult networkModificationResult = networkModificationApplicator.applyModificationsBlocking( new ModificationApplicationGroup(groupUuid, entities, new ReportInfos(reportUuid, reporterId)), new NetworkInfos(network, TEST_NETWORK_ID, true)); assertNotNull(networkModificationResult); @@ -991,7 +991,7 @@ void testApplyModificationWithErrors(final MockWebServer server) { // Incremental mode : No error send with exception ModificationApplicationContext applicationContext = new ModificationApplicationContext(TEST_NETWORK_ID, variantId, reportUuid, reporterId); - NetworkModificationsResult networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)); + NetworkModificationsResult networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)).join(); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isPresent()); testEmptyImpactsWithErrors(networkModificationResult); @@ -1000,7 +1000,7 @@ void testApplyModificationWithErrors(final MockWebServer server) { // Save mode only (variant does not exist) : No log and no error send with exception applicationContext = new ModificationApplicationContext(TEST_NETWORK_ID, UUID.randomUUID().toString(), reportUuid, reporterId); - networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)); + networkModificationsResult = networkModificationService.createNetworkModification(groupUuid, loadCreationInfos, List.of(applicationContext)).join(); assertEquals(1, networkModificationsResult.modificationResults().size()); assertTrue(networkModificationsResult.modificationResults().get(0).isEmpty()); testNetworkModificationsCount(groupUuid, 3); diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java index 1efeba283..09ad9b128 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationIndexationTest.java @@ -112,7 +112,7 @@ void testApplyCreatingModifications() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -137,7 +137,7 @@ void testApplyModifyingModifications() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -162,7 +162,7 @@ void testApplyDeletingModifications() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(equipmentDeletionInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); List modificationApplicationEntities = modificationApplicationRepository.findAll(); @@ -192,7 +192,7 @@ void testDuplicateModifications() { UUID groupUuid1 = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); assertNotNull(result); // Need to remove the listener created in the last modifications application @@ -207,7 +207,7 @@ void testDuplicateModifications() { null, entities.stream().map(ModificationEntity::getId).toList(), List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())) - ); + ).join(); /* check results in database and in elasticsearch @@ -241,7 +241,7 @@ void testMoveModifications() { LoadCreationInfos loadCreationInfos = createLoadCreationInfos(newEquipmentId); UUID groupUuid1 = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); assertNotNull(result); // Need to remove the listener created in the last modifications application @@ -258,7 +258,7 @@ void testMoveModifications() { entities.stream().map(ModificationEntity::getId).toList(), List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())), true - ); + ).join(); /* check results in database and in elasticsearch @@ -291,7 +291,7 @@ void testInsertCompositeModifications() { UUID groupUuid1 = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); assertNotNull(result); // Create the composite modification to pass later to ?action=insert @@ -310,7 +310,7 @@ void testInsertCompositeModifications() { groupUuid2, List.of(compositeUuid), List.of(new ModificationApplicationContext(networkInfos.getNetworkUuuid(), variant2, UUID.randomUUID(), UUID.randomUUID())) - ); + ).join(); /* check results in database and in elasticsearch @@ -337,7 +337,7 @@ void testDeleteModifications() { UUID groupUuid1 = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); assertNotNull(result); /* @@ -365,7 +365,7 @@ void testDeleteModificationGroup() { UUID groupUuid1 = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid1, List.of(ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); assertNotNull(result); /* @@ -395,7 +395,7 @@ void testReindexAll() { List entities = modificationRepository.saveModifications(groupUuid1, loadCreationInfosList.stream().map(ModificationEntity::fromDTO).toList()); // apply modifications to index them - networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); + networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid1, entities, reportInfos), networkInfos); // assert they are both stored in ES and in postgres assertEquals(3, modificationApplicationRepository.findAll().size()); @@ -423,7 +423,7 @@ void testMultiplePropertiesModificationOnSingleEquipment() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); @@ -448,7 +448,7 @@ void testSwitchModification() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(openSwitchModification))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); assertEquals(1, modificationRepository.getModifications(groupUuid, true, true).size()); @@ -465,7 +465,7 @@ void testUpdateSubstationName() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); @@ -505,7 +505,7 @@ void testUpdateModificationProperties() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(loadModificationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); ModificationApplicationEntity modificationApplicationEntity = modificationApplicationRepository.findAll().getFirst(); @@ -540,7 +540,7 @@ void testUpdateModificationPropertiesWithNotIndexedEquipment() { UUID groupUuid = UUID.randomUUID(); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationModificationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos); assertNotNull(result); assertEquals(1, modificationRepository.getModifications(groupUuid, true, true).size()); diff --git a/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java b/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java index f0eea7243..f7ac8cab5 100644 --- a/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/ModificationSearchTest.java @@ -126,7 +126,7 @@ void testSearchModificationsWithAccentsAndSpecialChars() { ) ); - NetworkModificationResult result = networkModificationApplicator.applyModifications( + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking( new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos ); @@ -166,7 +166,7 @@ void testSearchModificationsByGroup() { LoadCreationInfos loadCreationInfos = createLoadCreationInfos("newLoadId"); List entities = modificationRepository.saveModifications(groupUuid, List.of(ModificationEntity.fromDTO(substationCreationInfos), ModificationEntity.fromDTO(substationModificationInfos), ModificationEntity.fromDTO(loadCreationInfos))); - NetworkModificationResult result = networkModificationApplicator.applyModifications( + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking( new ModificationApplicationGroup(groupUuid, entities, reportInfos), networkInfos ); diff --git a/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java b/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java index ea34efbe2..0ac9eeae7 100644 --- a/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java +++ b/src/test/java/org/gridsuite/modification/server/service/NetworkModificationApplicatorTest.java @@ -82,7 +82,7 @@ void testApplyModificationsWithAllCollectionsNeededForBusView() { when(modificationInfosList.get(0).getType()).thenReturn(ModificationType.VOLTAGE_INIT_MODIFICATION.name()); - NetworkModificationResult result = networkModificationApplicator.applyModifications(new ModificationApplicationGroup(UUID.randomUUID(), modificationInfosList, reportInfos), networkInfos); + NetworkModificationResult result = networkModificationApplicator.applyModificationsBlocking(new ModificationApplicationGroup(UUID.randomUUID(), modificationInfosList, reportInfos), networkInfos); assertNotNull(result); verify(largeNetworkModificationExecutionService).supplyAsync(any()); diff --git a/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java b/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java index 7c8f68cbb..303145416 100644 --- a/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java +++ b/src/test/java/org/gridsuite/modification/server/utils/ApiUtils.java @@ -16,11 +16,13 @@ import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; import java.util.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; /** @@ -57,13 +59,15 @@ public static void postGroups(MockMvc mockMvc, UUID originGroupUuid, UUID target public static Optional putGroupsDuplications(MockMvc mockMvc, UUID originGroupUuid, UUID targetGroupUuid, UUID networkUuid) throws Exception { ModificationApplicationContext applicationContext = new ModificationApplicationContext(networkUuid, UUID.randomUUID().toString(), UUID.randomUUID(), UUID.randomUUID(), Set.of()); String bodyJson = getObjectMapper().writeValueAsString(org.springframework.data.util.Pair.of(List.of(), List.of(applicationContext))); - MvcResult mvcResult = mockMvc.perform( + ResultActions mockMvcResultActions = mockMvc.perform( put("/v1/groups/{groupUuid}", targetGroupUuid) .param("action", "COPY") .param("originGroupUuid", originGroupUuid.toString()) .content(bodyJson) .contentType(MediaType.APPLICATION_JSON) ) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpectAll(status().isOk()) .andReturn(); NetworkModificationsResult result = getObjectMapper().readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); @@ -74,12 +78,14 @@ public static NetworkModificationsResult putGroupsWithCopy(MockMvc mockMvc, UUID ModificationApplicationContext applicationContext = new ModificationApplicationContext(networkUuid, UUID.randomUUID().toString(), UUID.randomUUID(), UUID.randomUUID(), Set.of()); String body = getObjectMapper().writeValueAsString(org.springframework.data.util.Pair.of(modificationUuids, List.of(applicationContext))); - MvcResult mvcResult = mockMvc.perform( + ResultActions mockMvcResultActions = mockMvc.perform( put("/v1/groups/{groupUuid}", targetGroupUuid) .param("action", "COPY") .contentType("application/json") .content(body) ) + .andExpect(request().asyncStarted()); + MvcResult mvcResult = mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) .andExpectAll(status().isOk()) .andReturn(); return getObjectMapper().readValue(mvcResult.getResponse().getContentAsString(), new TypeReference<>() { }); diff --git a/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java b/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java index e1093786f..eebdd2736 100644 --- a/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java +++ b/src/test/java/org/gridsuite/modification/server/utils/TestUtils.java @@ -26,6 +26,7 @@ import org.junit.platform.commons.util.StringUtils; import org.mockito.ArgumentCaptor; import org.springframework.cloud.stream.binder.test.OutputDestination; +import org.springframework.test.web.servlet.*; import java.io.IOException; import java.io.InputStream; @@ -38,6 +39,8 @@ import static com.vladmihalcea.sql.SQLStatementCountValidator.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.asyncDispatch; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.request; /** * @author Slimane Amar @@ -50,6 +53,13 @@ private TestUtils() { throw new IllegalCallerException("Utility class"); } + public static MvcResult runRequestAsync(MockMvc mockMvc, RequestBuilder requestBuilder, ResultMatcher... matchers) throws Exception { + ResultActions mockMvcResultActions = mockMvc.perform(requestBuilder).andExpect(request().asyncStarted()); + return mockMvc.perform(asyncDispatch(mockMvcResultActions.andReturn())) + .andExpectAll(matchers) + .andReturn(); + } + public static Set getRequestsDone(int n, MockWebServer server) throws UncheckedInterruptedException { return IntStream.range(0, n).mapToObj(i -> { try {