Skip to content

Commit 88b67c2

Browse files
authored
Flush network before inserting results (#198)
1 parent e6fbf14 commit 88b67c2

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

src/main/java/org/gridsuite/loadflow/server/service/LoadFlowWorkerService.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,16 +115,16 @@ protected PreloadingStrategy getNetworkPreloadingStrategy() {
115115
}
116116

117117
@Override
118-
protected void saveResult(Network network, AbstractResultContext<LoadFlowRunContext> resultContext, LoadFlowResult result) {
118+
public void saveResult(Network network, AbstractResultContext<LoadFlowRunContext> resultContext, LoadFlowResult result) {
119119
LoadFlowModificationInfos loadFlowModificationInfos = handleSolvedValues(network, resultContext.getRunContext().isApplySolvedValues());
120120
List<LimitViolationInfos> limitViolationInfos = getLimitViolations(network, resultContext.getRunContext());
121121
List<LimitViolationInfos> limitViolationsWithCalculatedOverload = calculateOverloadLimitViolations(limitViolationInfos, network);
122-
resultService.insert(resultContext.getResultUuid(), result,
123-
LoadFlowService.computeLoadFlowStatus(result), loadFlowModificationInfos, limitViolationsWithCalculatedOverload);
124122
if (result != null && !result.isFailed()) {
125123
// flush network in the network store
126124
observer.observe("network.save", resultContext.getRunContext(), () -> networkStoreService.flush(resultContext.getRunContext().getNetwork()));
127125
}
126+
resultService.insert(resultContext.getResultUuid(), result,
127+
LoadFlowService.computeLoadFlowStatus(result), loadFlowModificationInfos, limitViolationsWithCalculatedOverload);
128128
}
129129

130130
private LoadFlowModificationInfos handleSolvedValues(Network network, boolean applySolvedValues) {

src/test/java/org/gridsuite/loadflow/server/LoadFlowWorkerServiceTest.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,42 @@
99
import com.powsybl.iidm.network.Network;
1010
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
1111
import com.powsybl.iidm.network.util.LimitViolationUtils;
12+
import com.powsybl.loadflow.LoadFlowParameters;
13+
import com.powsybl.network.store.client.NetworkStoreService;
1214
import com.powsybl.network.store.iidm.impl.NetworkFactoryImpl;
1315
import com.powsybl.security.LimitViolationType;
16+
import org.gridsuite.computation.service.AbstractResultContext;
1417
import org.gridsuite.loadflow.server.dto.LimitViolationInfos;
18+
import org.gridsuite.loadflow.server.dto.parameters.LoadFlowParametersValues;
19+
import org.gridsuite.loadflow.server.service.LoadFlowResultService;
20+
import org.gridsuite.loadflow.server.service.LoadFlowRunContext;
1521
import org.gridsuite.loadflow.server.service.LoadFlowWorkerService;
1622
import org.junit.jupiter.api.Assertions;
1723
import org.junit.jupiter.api.Test;
24+
import org.mockito.InOrder;
25+
import org.springframework.beans.factory.annotation.Autowired;
1826
import org.springframework.boot.test.context.SpringBootTest;
27+
import org.springframework.boot.test.mock.mockito.MockBean;
28+
29+
import java.util.UUID;
30+
31+
import static org.mockito.Mockito.*;
1932

2033
/**
2134
* @author Kevin Le Saulnier <kevin.le-saulnier at rte-france.com>
2235
*/
2336
@SpringBootTest
2437
class LoadFlowWorkerServiceTest {
38+
39+
@MockBean
40+
private NetworkStoreService networkStoreService;
41+
42+
@MockBean
43+
private LoadFlowResultService loadFlowResultService;
44+
45+
@Autowired
46+
private LoadFlowWorkerService loadFlowWorkerService;
47+
2548
@Test
2649
void testGetNextLimitName() {
2750
Network network = EurostagTutorialExample1Factory.createWithFixedCurrentLimits(new NetworkFactoryImpl());
@@ -83,4 +106,28 @@ void testGetNoTemporaryLimitNextLimitName() {
83106
String expectedNextLimitName = null;
84107
Assertions.assertEquals(expectedNextLimitName, nextLimitName);
85108
}
109+
110+
@Test
111+
void testFlushIsCalledBeforeInsertResults() {
112+
Network network = mock(Network.class);
113+
LoadFlowRunContext runContext = mock(LoadFlowRunContext.class);
114+
AbstractResultContext<LoadFlowRunContext> resultContext = mock(AbstractResultContext.class);
115+
com.powsybl.loadflow.LoadFlowResult result = mock(com.powsybl.loadflow.LoadFlowResult.class);
116+
LoadFlowParametersValues parametersValues = mock(LoadFlowParametersValues.class);
117+
when(resultContext.getRunContext()).thenReturn(runContext);
118+
when(resultContext.getResultUuid()).thenReturn(UUID.randomUUID());
119+
when(runContext.isApplySolvedValues()).thenReturn(false);
120+
when(runContext.getNetwork()).thenReturn(network);
121+
when(runContext.buildParameters()).thenReturn(mock(LoadFlowParameters.class));
122+
when(runContext.getParameters()).thenReturn(parametersValues);
123+
when(parametersValues.getLimitReduction()).thenReturn(0.8f);
124+
when(result.isFailed()).thenReturn(false);
125+
126+
loadFlowWorkerService.saveResult(network, resultContext, result);
127+
128+
// Verify results save (flush) is done before inserting results in DB
129+
InOrder inOrder = inOrder(networkStoreService, loadFlowResultService);
130+
inOrder.verify(networkStoreService).flush(resultContext.getRunContext().getNetwork());
131+
inOrder.verify(loadFlowResultService).insert(any(UUID.class), eq(result), any(), any(), any());
132+
}
86133
}

0 commit comments

Comments
 (0)