diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java index 3b74e8e..264bf99 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/controllers/MonitorController.java @@ -11,10 +11,15 @@ import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.tags.Tag; +import org.gridsuite.monitor.commons.ResultInfos; import org.gridsuite.monitor.commons.SecurityAnalysisConfig; import org.gridsuite.monitor.server.dto.Report; import org.gridsuite.monitor.server.services.MonitorService; +import org.gridsuite.monitor.server.services.ReportService; +import org.gridsuite.monitor.server.services.ResultService; import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -29,9 +34,13 @@ public class MonitorController { private final MonitorService monitorService; + private final ResultService resultService; + private final ReportService reportService; - public MonitorController(MonitorService monitorService) { + public MonitorController(MonitorService monitorService, ResultService resultService, ReportService reportService) { this.monitorService = monitorService; + this.resultService = resultService; + this.reportService = reportService; } @PostMapping("/execute/security-analysis") @@ -48,7 +57,11 @@ public ResponseEntity executeSecurityAnalysis( @Operation(summary = "Get reports for an execution") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The execution reports")}) public ResponseEntity> getExecutionReports(@Parameter(description = "Execution UUID") @PathVariable UUID executionId) { - List reports = monitorService.getReports(executionId); + List reportIds = monitorService.getReportIds(executionId); + List reports = reportIds.stream() + .map(reportService::getReport) + .toList(); + return ResponseEntity.ok(reports); } @@ -56,7 +69,21 @@ public ResponseEntity> getExecutionReports(@Parameter(description = @Operation(summary = "Get results for an execution") @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "The execution results")}) public ResponseEntity> getExecutionResults(@Parameter(description = "Execution UUID") @PathVariable UUID executionId) { - List results = monitorService.getResults(executionId); + List resultInfos = monitorService.getResultInfos(executionId); + List results = resultInfos.stream() + .map(resultService::getResult) + .toList(); + return ResponseEntity.ok(results); } + + @DeleteMapping("/executions/{executionId}") + @Operation(summary = "Delete an execution") + @ApiResponses(value = {@ApiResponse(responseCode = "200", description = "Execution was deleted"), + @ApiResponse(responseCode = "404", description = "Execution was not found")}) + public ResponseEntity deleteExecution(@PathVariable UUID executionId) { + return monitorService.deleteExecution(executionId) ? + ResponseEntity.ok().build() : + ResponseEntity.notFound().build(); + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ExecutionDeletedEvent.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ExecutionDeletedEvent.java new file mode 100644 index 0000000..9e4bbbd --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ExecutionDeletedEvent.java @@ -0,0 +1,17 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.server.events; + +import org.gridsuite.monitor.commons.ResultInfos; + +import java.util.List; +import java.util.UUID; + +/** + * @author Antoine Bouhours + */ +public record ExecutionDeletedEvent(List resultInfos, List reportIds) {} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/events/MonitorEventListener.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/MonitorEventListener.java new file mode 100644 index 0000000..69644bd --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/MonitorEventListener.java @@ -0,0 +1,60 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.server.events; + +import lombok.RequiredArgsConstructor; +import org.gridsuite.monitor.commons.ResultInfos; +import org.gridsuite.monitor.server.services.NotificationService; +import org.gridsuite.monitor.server.services.ReportService; +import org.gridsuite.monitor.server.services.ResultService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +import java.util.UUID; + +/** + * @author Antoine Bouhours + */ +@Component +@RequiredArgsConstructor +public class MonitorEventListener { + private static final Logger LOGGER = LoggerFactory.getLogger(MonitorEventListener.class); + private final NotificationService notificationService; + private final ResultService resultService; + private final ReportService reportService; + + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void onProcessScheduled(ProcessExecutionEvent event) { + notificationService.sendProcessRunMessage(event.caseUuid(), event.config(), event.executionId()); + } + + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + public void onExecutionDeleted(ExecutionDeletedEvent event) { + event.resultInfos().forEach(this::safeDeleteResult); + event.reportIds().forEach(this::safeDeleteReport); + } + + private void safeDeleteResult(ResultInfos resultInfos) { + try { + resultService.deleteResult(resultInfos); + } catch (Exception e) { + LOGGER.error("Failed to delete result {} of type {}: {}", + resultInfos.resultUUID(), resultInfos.resultType(), e.getMessage(), e); + } + } + + private void safeDeleteReport(UUID reportId) { + try { + reportService.deleteReport(reportId); + } catch (Exception e) { + LOGGER.error("Failed to delete report {}: {}", reportId, e.getMessage(), e); + } + } +} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ProcessExecutionEvent.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ProcessExecutionEvent.java new file mode 100644 index 0000000..821228c --- /dev/null +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/events/ProcessExecutionEvent.java @@ -0,0 +1,16 @@ +/** + * Copyright (c) 2026, RTE (http://www.rte-france.com) + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +package org.gridsuite.monitor.server.events; + +import org.gridsuite.monitor.commons.ProcessConfig; + +import java.util.UUID; + +/** + * @author Antoine Bouhours + */ +public record ProcessExecutionEvent(UUID caseUuid, ProcessConfig config, UUID executionId) {} diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/MonitorService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/MonitorService.java index fb6b053..7beeec6 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/MonitorService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/MonitorService.java @@ -14,12 +14,16 @@ import org.gridsuite.monitor.server.dto.Report; import org.gridsuite.monitor.server.entities.ProcessExecutionEntity; import org.gridsuite.monitor.server.entities.ProcessExecutionStepEntity; +import org.gridsuite.monitor.server.events.ExecutionDeletedEvent; +import org.gridsuite.monitor.server.events.ProcessExecutionEvent; import org.gridsuite.monitor.server.repositories.ProcessExecutionRepository; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.Instant; import java.util.List; +import java.util.Objects; import java.util.UUID; /** @@ -30,9 +34,7 @@ public class MonitorService { private final ProcessExecutionRepository executionRepository; - private final NotificationService notificationService; - private final ReportService reportService; - private final ResultService resultService; + private final ApplicationEventPublisher eventPublisher; @Transactional public UUID executeProcess(UUID caseUuid, ProcessConfig processConfig) { @@ -44,7 +46,7 @@ public UUID executeProcess(UUID caseUuid, ProcessConfig processConfig) { .build(); executionRepository.save(execution); - notificationService.sendProcessRunMessage(caseUuid, processConfig, execution.getId()); + eventPublisher.publishEvent(new ProcessExecutionEvent(caseUuid, processConfig, execution.getId())); return execution.getId(); } @@ -101,31 +103,17 @@ private ProcessExecutionStepEntity toStepEntity(ProcessExecutionStep processExec } @Transactional(readOnly = true) - public List getReports(UUID executionId) { - List reportIds = getReportIds(executionId); - return reportIds.stream() - .map(reportService::getReport) - .toList(); - } - - private List getReportIds(UUID executionId) { + public List getReportIds(UUID executionId) { return executionRepository.findById(executionId) .map(execution -> execution.getSteps().stream() .map(ProcessExecutionStepEntity::getReportId) - .filter(java.util.Objects::nonNull) + .filter(Objects::nonNull) .toList()) .orElse(List.of()); } @Transactional(readOnly = true) - public List getResults(UUID executionId) { - List resultInfos = getResultInfos(executionId); - return resultInfos.stream() - .map(resultService::getResult) - .toList(); - } - - private List getResultInfos(UUID executionId) { + public List getResultInfos(UUID executionId) { return executionRepository.findById(executionId) .map(execution -> execution.getSteps().stream() .filter(step -> step.getResultId() != null) @@ -133,4 +121,25 @@ private List getResultInfos(UUID executionId) { .toList()) .orElse(List.of()); } + + @Transactional + public boolean deleteExecution(UUID executionId) { + return executionRepository.findById(executionId) + .map(entity -> { + List resultInfos = entity.getSteps().stream() + .filter(s -> s.getResultId() != null && s.getResultType() != null) + .map(s -> new ResultInfos(s.getResultId(), s.getResultType())) + .toList(); + List reportIds = entity.getSteps().stream() + .map(ProcessExecutionStepEntity::getReportId) + .filter(Objects::nonNull) + .toList(); + + executionRepository.delete(entity); + eventPublisher.publishEvent(new ExecutionDeletedEvent(resultInfos, reportIds)); + + return true; + }) + .orElse(false); + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ReportService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ReportService.java index 9a11052..d2f6dc1 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ReportService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ReportService.java @@ -52,4 +52,12 @@ public Report getReport(UUID reportId) { return restTemplate.exchange(this.getReportServerURI() + path, HttpMethod.GET, new HttpEntity<>(headers), new ParameterizedTypeReference() { }).getBody(); } + + public void deleteReport(UUID reportId) { + var path = UriComponentsBuilder.fromPath("{id}") + .buildAndExpand(reportId) + .toUriString(); + + restTemplate.delete(this.getReportServerURI() + path); + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultProvider.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultProvider.java index d80f407..e66f2d0 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultProvider.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultProvider.java @@ -17,4 +17,6 @@ public interface ResultProvider { ResultType getType(); String getResult(UUID resultId); + + void deleteResult(UUID resultId); } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultService.java index 04101ea..2a30a4a 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/ResultService.java @@ -39,4 +39,13 @@ public String getResult(ResultInfos resultInfos) { throw new IllegalArgumentException("Unsupported result type: " + resultInfos.resultType()); } } + + public void deleteResult(ResultInfos resultInfos) { + ResultProvider provider = providers.get(resultInfos.resultType()); + if (provider != null) { + provider.deleteResult(resultInfos.resultUUID()); + } else { + throw new IllegalArgumentException("Unsupported result type: " + resultInfos.resultType()); + } + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProvider.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProvider.java index 9b99f2d..b446d1d 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProvider.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProvider.java @@ -31,4 +31,9 @@ public ResultType getType() { public String getResult(UUID resultId) { return securityAnalysisService.getResult(resultId); } + + @Override + public void deleteResult(UUID resultId) { + securityAnalysisService.deleteResult(resultId); + } } diff --git a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisService.java b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisService.java index 3779d74..0af66bf 100644 --- a/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisService.java +++ b/monitor-server/src/main/java/org/gridsuite/monitor/server/services/SecurityAnalysisService.java @@ -16,6 +16,7 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; +import java.util.List; import java.util.UUID; /** @@ -52,4 +53,15 @@ public String getResult(UUID resultUuid) { return restTemplate.exchange(getSecurityAnalysisServerBaseUri() + path, HttpMethod.GET, null, String.class).getBody(); } + + public void deleteResult(UUID resultUuid) { + LOGGER.info("Deleting result {}", resultUuid); + + var path = UriComponentsBuilder.fromPath("/results") + .queryParam("resultsUuids", List.of(resultUuid)) + .build() + .toUriString(); + + restTemplate.delete(getSecurityAnalysisServerBaseUri() + path); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java index d26e755..ce1d41f 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/controllers/MonitorControllerTest.java @@ -26,6 +26,7 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @@ -112,4 +113,28 @@ void getExecutionResultsShouldReturnListOfResults() throws Exception { verify(monitorService).getResults(executionId); } + + @Test + void deleteExecutionShouldReturnTrue() throws Exception { + UUID executionId = UUID.randomUUID(); + when(monitorService.deleteExecution(executionId)) + .thenReturn(Boolean.TRUE); + + mockMvc.perform(delete("/v1/executions/{executionId}", executionId)) + .andExpect(status().isOk()); + + verify(monitorService).deleteExecution(executionId); + } + + @Test + void deleteExecutionShouldReturnFalse() throws Exception { + UUID executionId = UUID.randomUUID(); + when(monitorService.deleteExecution(executionId)) + .thenReturn(Boolean.FALSE); + + mockMvc.perform(delete("/v1/executions/{executionId}", executionId)) + .andExpect(status().isNotFound()); + + verify(monitorService).deleteExecution(executionId); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/MonitorServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/MonitorServiceTest.java index 22985f3..f822043 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/MonitorServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/MonitorServiceTest.java @@ -17,6 +17,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.test.util.ReflectionTestUtils; import java.time.Instant; import java.util.ArrayList; @@ -298,4 +299,61 @@ void getResultsShouldReturnResults() { verify(resultService, times(2)).getResult(any(ResultInfos.class)); } + @Test + void deleteExecutionShouldDeleteResultsAndReports() { + UUID reportId1 = UUID.randomUUID(); + UUID resultId1 = UUID.randomUUID(); + UUID reportId2 = UUID.randomUUID(); + UUID resultId2 = UUID.randomUUID(); + ProcessExecutionStepEntity step0 = ProcessExecutionStepEntity.builder() + .id(UUID.randomUUID()) + .stepOrder(0) + .reportId(reportId1) + .resultId(resultId1) + .build(); + ProcessExecutionStepEntity step1 = ProcessExecutionStepEntity.builder() + .id(UUID.randomUUID()) + .stepOrder(1) + .reportId(reportId2) + .resultId(resultId2) + .resultType(ResultType.SECURITY_ANALYSIS) + .build(); + ProcessExecutionEntity execution = ProcessExecutionEntity.builder() + .id(executionId) + .steps(List.of(step0, step1)) + .build(); + + when(executionRepository.findById(executionId)).thenReturn(Optional.of(execution)); + doNothing().when(executionRepository).deleteById(executionId); + + doNothing().when(reportService).deleteReport(reportId1); + doNothing().when(reportService).deleteReport(reportId2); + doNothing().when(resultService).deleteResult(any(ResultInfos.class)); + + ReflectionTestUtils.setField(monitorService, "self", monitorService); + + boolean done = monitorService.deleteExecution(executionId); + assertThat(done).isTrue(); + + verify(executionRepository).findById(executionId); + verify(executionRepository).deleteById(executionId); + verify(reportService).deleteReport(reportId1); + verify(reportService).deleteReport(reportId2); + verify(resultService, times(1)).deleteResult(any(ResultInfos.class)); + } + + @Test + void deleteExecutionShouldReturnFalseWhenExecutionNotFound() { + when(executionRepository.findById(executionId)).thenReturn(Optional.empty()); + + ReflectionTestUtils.setField(monitorService, "self", monitorService); + + boolean done = monitorService.deleteExecution(executionId); + assertThat(done).isFalse(); + + verify(executionRepository).findById(executionId); + verifyNoInteractions(reportService); + verifyNoInteractions(resultService); + verify(executionRepository, never()).deleteById(executionId); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ReportServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ReportServiceTest.java index 66aa7f5..6297a02 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ReportServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ReportServiceTest.java @@ -25,6 +25,7 @@ import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThatThrownBy; /** @@ -72,4 +73,26 @@ void getReportFailed() { assertThatThrownBy(() -> reportService.getReport(reportId)).isInstanceOf(RestClientException.class); } + + @Test + void deleteReport() { + UUID reportId = UUID.randomUUID(); + + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://report-server/v1/reports/" + reportId)) + .andRespond(MockRestResponseCreators.withSuccess()); + + assertThatNoException().isThrownBy(() -> reportService.deleteReport(reportId)); + } + + @Test + void deleteReportFailed() { + UUID reportId = UUID.randomUUID(); + + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://report-server/v1/reports/" + reportId)) + .andRespond(MockRestResponseCreators.withServerError()); + + assertThatThrownBy(() -> reportService.deleteReport(reportId)).isInstanceOf(RestClientException.class); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ResultServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ResultServiceTest.java index acfdc4b..4c617c5 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ResultServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/ResultServiceTest.java @@ -18,6 +18,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -58,4 +59,29 @@ void getResultShouldThrowExceptionWhenProviderNotFound() { .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("Unsupported result type: " + ResultType.SECURITY_ANALYSIS); } + + @Test + void deleteResultShouldDeleteFromCorrectProvider() { + UUID resultId = UUID.randomUUID(); + doNothing().when(resultProvider).deleteResult(resultId); + when(resultProvider.getType()).thenReturn(ResultType.SECURITY_ANALYSIS); + resultService = new ResultService(List.of(resultProvider)); + ResultInfos resultInfos = new ResultInfos(resultId, ResultType.SECURITY_ANALYSIS); + + resultService.deleteResult(resultInfos); + + verify(resultProvider).deleteResult(resultId); + } + + @Test + void deleteResultShouldThrowExceptionWhenProviderNotFound() { + UUID resultId = UUID.randomUUID(); + ResultInfos resultInfos = new ResultInfos(resultId, ResultType.SECURITY_ANALYSIS); + + ResultService emptyService = new ResultService(List.of()); + + assertThatThrownBy(() -> emptyService.deleteResult(resultInfos)) + .isInstanceOf(IllegalArgumentException.class) + .hasMessageContaining("Unsupported result type: " + ResultType.SECURITY_ANALYSIS); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProviderTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProviderTest.java index 29d5780..f02ba95 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProviderTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisResultProviderTest.java @@ -44,4 +44,16 @@ void getResultShouldDelegateToSecurityAnalysisService() { verify(securityAnalysisService).getResult(id); verifyNoMoreInteractions(securityAnalysisService); } + + @Test + void deleteResultShouldDelegateToSecurityAnalysisService() { + UUID id = UUID.randomUUID(); + + doNothing().when(securityAnalysisService).deleteResult(id); + + provider.deleteResult(id); + + verify(securityAnalysisService).deleteResult(id); + verifyNoMoreInteractions(securityAnalysisService); + } } diff --git a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisServiceTest.java b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisServiceTest.java index a236e6d..bf8b690 100644 --- a/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisServiceTest.java +++ b/monitor-server/src/test/java/org/gridsuite/monitor/server/services/SecurityAnalysisServiceTest.java @@ -20,6 +20,7 @@ import java.util.UUID; +import static org.assertj.core.api.Assertions.assertThatNoException; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; @@ -71,4 +72,23 @@ void getResultFailed() { assertThatThrownBy(() -> securityAnalysisService.getResult(RESULT_UUID)) .isInstanceOf(RestClientException.class); } + + @Test + void deleteResult() { + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://security-analysis-server/v1/results?resultsUuids=" + RESULT_UUID)) + .andRespond(MockRestResponseCreators.withSuccess()); + + assertThatNoException().isThrownBy(() -> securityAnalysisService.deleteResult(RESULT_UUID)); + } + + @Test + void deleteResultFailed() { + server.expect(MockRestRequestMatchers.method(HttpMethod.DELETE)) + .andExpect(MockRestRequestMatchers.requestTo("http://security-analysis-server/v1/results?resultsUuids=" + RESULT_UUID)) + .andRespond(MockRestResponseCreators.withServerError()); + + assertThatThrownBy(() -> securityAnalysisService.deleteResult(RESULT_UUID)) + .isInstanceOf(RestClientException.class); + } }