Skip to content

Commit ae32bdb

Browse files
authored
Prevent failure when there are some missing shortcircuit data (#55)
Signed-off-by: Hugo Marcellin <[email protected]>
1 parent 9325a15 commit ae32bdb

File tree

3 files changed

+28
-2
lines changed

3 files changed

+28
-2
lines changed

src/main/java/org/gridsuite/shortcircuit/server/repositories/ShortCircuitAnalysisResultRepository.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public void insertStatus(List<UUID> resultUuids, String status) {
158158
@Transactional
159159
public void insert(UUID resultUuid, ShortCircuitAnalysisResult result, Map<String, ShortCircuitLimits> allCurrentLimits, String status) {
160160
Objects.requireNonNull(resultUuid);
161-
if (result != null && result.getFaultResults().stream().map(FaultResult::getStatus).noneMatch(FaultResult.Status.NO_SHORT_CIRCUIT_DATA::equals)) {
161+
if (result != null && !result.getFaultResults().stream().map(FaultResult::getStatus).allMatch(FaultResult.Status.NO_SHORT_CIRCUIT_DATA::equals)) {
162162
resultRepository.save(toResultEntity(resultUuid, result, allCurrentLimits));
163163
}
164164
globalStatusRepository.save(toStatusEntity(resultUuid, status));

src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitWorkerService.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,8 @@ public Consumer<Message<String>> consumeRun() {
223223
LOGGER.info("Stored in {}s", TimeUnit.NANOSECONDS.toSeconds(finalNanoTime - startTime.getAndSet(finalNanoTime)));
224224

225225
if (result != null) { // result available
226-
if (result.getFaultResults().stream().map(FaultResult::getStatus).anyMatch(FaultResult.Status.NO_SHORT_CIRCUIT_DATA::equals)) {
226+
if (!result.getFaultResults().isEmpty() &&
227+
result.getFaultResults().stream().map(FaultResult::getStatus).allMatch(FaultResult.Status.NO_SHORT_CIRCUIT_DATA::equals)) {
227228
LOGGER.error("Short circuit analysis failed (resultUuid='{}')", resultContext.getResultUuid());
228229
notificationService.publishFail(resultContext.getResultUuid(), resultContext.getRunContext().getReceiver(),
229230
"Missing short-circuit extension data",

src/test/java/org/gridsuite/shortcircuit/server/ShortCircuitAnalysisControllerTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,4 +607,29 @@ public void runWithReportTest() {
607607
assertEquals("me", resultMessage.getHeaders().get("receiver"));
608608
}
609609
}
610+
611+
@SneakyThrows
612+
@Test
613+
public void runWithNoShortcircuitDataTest() {
614+
try (MockedStatic<ShortCircuitAnalysis> shortCircuitAnalysisMockedStatic = TestUtils.injectShortCircuitAnalysisProvider(new ShortCircuitAnalysisProviderMock())) {
615+
shortCircuitAnalysisMockedStatic.when(() -> ShortCircuitAnalysis.runAsync(eq(network1), anyList(), any(ShortCircuitParameters.class), any(ComputationManager.class), anyList(), any(Reporter.class)))
616+
.thenReturn(CompletableFuture.completedFuture(RESULT));
617+
618+
mockMvc.perform(post(
619+
"/" + VERSION + "/networks/{networkUuid}/run-and-save?reporterId=myReporter&receiver=me&reportUuid=" + REPORT_UUID + "&variantId=" + VARIANT_2_ID, NETWORK_UUID)
620+
.header(HEADER_USER_ID, "user"))
621+
.andExpect(status().isOk())
622+
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
623+
.andReturn();
624+
625+
Message<byte[]> runMessage = output.receive(TIMEOUT, shortCircuitAnalysisRunDestination);
626+
assertEquals(RESULT_UUID.toString(), runMessage.getHeaders().get("resultUuid"));
627+
assertEquals("me", runMessage.getHeaders().get("receiver"));
628+
629+
//network1 has no shortcircuit data so the computation should fail
630+
Message<byte[]> resultMessage = output.receive(TIMEOUT, shortCircuitAnalysisFailedDestination);
631+
assertEquals(RESULT_UUID.toString(), resultMessage.getHeaders().get("resultUuid"));
632+
assertEquals("me", resultMessage.getHeaders().get("receiver"));
633+
}
634+
}
610635
}

0 commit comments

Comments
 (0)