Skip to content

Commit

Permalink
fix(tabular-modifications): add tests on SQL requests for copy methods
Browse files Browse the repository at this point in the history
Signed-off-by: Joris Mancini <joris.mancini_externe@rte-france.com>
  • Loading branch information
TheMaskedTurtle committed Feb 7, 2024
1 parent ef9c9a3 commit 9123432
Show file tree
Hide file tree
Showing 11 changed files with 305 additions and 242 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import com.powsybl.network.store.iidm.impl.NetworkImpl;
import org.gridsuite.modification.server.dto.ModificationInfos;
import org.gridsuite.modification.server.dto.NetworkModificationResult;
import org.gridsuite.modification.server.entities.ModificationEntity;
import org.gridsuite.modification.server.repositories.NetworkModificationRepository;
import org.gridsuite.modification.server.service.ReportService;
import org.gridsuite.modification.server.utils.NetworkCreation;
Expand Down Expand Up @@ -245,8 +246,9 @@ protected void testNetworkModificationsCount(UUID groupUuid, int actualSize) thr

/** Save a network modification into the repository and return its UUID. */
protected UUID saveModification(ModificationInfos modificationInfos) {
modificationRepository.saveModifications(TEST_GROUP_ID, List.of(modificationInfos.toEntity()));
return modificationRepository.getModifications(TEST_GROUP_ID, true, true).get(0).getUuid();
ModificationEntity entity = modificationInfos.toEntity();
modificationRepository.saveModifications(TEST_GROUP_ID, List.of(entity));
return entity.getId();
}

protected Network getNetwork() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,215 @@
/*
* Copyright (c) 2024, 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.modification.server.modifications.tabularmodifications;

import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest;
import org.gridsuite.modification.server.utils.ApiUtils;
import org.gridsuite.modification.server.utils.TestUtils;
import org.junit.Test;

import java.util.List;
import java.util.UUID;

import static com.vladmihalcea.sql.SQLStatementCountValidator.assertSelectCount;
import static com.vladmihalcea.sql.SQLStatementCountValidator.reset;

/**
* @author Joris Mancini <joris.mancini_externe at rte-france.com>
*/
public abstract class AbstractTabularModificationTest extends AbstractNetworkModificationTest {

@Test
public void testSqlRequestsCountOnGetModification() throws Exception {
UUID tabularWith1ModificationUuid = createTabularModification(1);
reset();
ApiUtils.getModification(mockMvc, tabularWith1ModificationUuid); // Getting one tabular modification with one sub-modification
assertSelectCount(3);

UUID tabularWith3ModificationUuid = createTabularModification(3);
reset();
ApiUtils.getModification(mockMvc, tabularWith3ModificationUuid); // Getting one tabular modification with three sub-modifications
assertSelectCount(3);
}

@Test
public void testSqlRequestsCountOnGetGroupModifications() throws Exception {
createTabularModification(1);
createTabularModification(3);

reset();
ApiUtils.getGroupModifications(mockMvc, getGroupId()); // Getting two tabular modifications with respectively one and three sub-modifications
assertSelectCount(6);
}

/*
POST /v1/groups SQL requests analysis
First we select the modifications to copy:
- 1 select on the modification_group (check if it exists)
- 1 select to retrieve the modifications
- 2 selects per tabular modification to get the ids of the sub-modifications and the sub-modifications themselves
- 1 select on the modification_group to check if the new group exists
Then we insert the new modifications in the new group:
- 1 insert in modification_group to create the new group
- 1 insert in modification for tabular modifications (batchSize: number of tabular modifications)
- 1 insert in tabular_modification (batchSize: number of tabular modifications)
- 1 insert in modification for sub-modifications (batchSize: number of sub-modifications)
- 1 insert in sub-modification table (batchSize: number of sub-modifications)
- (optional) 1 insert in sub-modification relation tables (batchSize: number of sub-modifications)
Then modifications order is set:
- 1 update in modification for orders (batchSize: number of tabular modifications)
Then relation between tabular modifications and sub-modifications are set:
- 1 insert in tabular_modification_modifications for the relation (batchSize: number of sub-modifications)
(optional) Then order of sub-modifications relations are set:
- 1 update in sub-modifications relation for the relation (batchSize: number of sub-modifications)
*/
@Test
public void testSqlRequestsCountOnPostGroups() throws Exception {
createFewTabularModifications();

reset();
ApiUtils.postGroups(mockMvc, getGroupId());
TestUtils.assertRequestsCount(7, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

@Test
public void testSqlRequestsCountOnPostGroups2() throws Exception {
createMoreTabularModifications();

reset();
ApiUtils.postGroups(mockMvc, getGroupId());
TestUtils.assertRequestsCount(11, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

/*
PUT /v1/groups/{groupUuid}/duplications SQL requests analysis
First we select the modifications to copy:
- 1 select on the modification_group (check if it exists)
- 1 select to retrieve the modifications
- 2 selects per tabular modification to get the ids of the sub-modifications and the sub-modifications themselves
- 1 select on the modification_group to check if the new group exists
Then we insert the new modifications in the new group:
- 1 insert in modification_group to create the new group
- 1 insert in modification for tabular modifications (batchSize: number of tabular modifications)
- 1 insert in tabular_modification (batchSize: number of tabular modifications)
- 1 insert in modification for sub-modifications (batchSize: number of sub-modifications)
- 1 insert in sub-modification table (batchSize: number of sub-modifications)
- (optional) 1 insert in sub-modification relation tables (batchSize: number of sub-modifications)
Then modifications order is set:
- 1 update in modification for orders (batchSize: number of tabular modifications)
Then relation between tabular modifications and sub-modifications are set:
- 1 insert in tabular_modification_modifications for the relation (batchSize: number of sub-modifications)
(optional) Then order of sub-modifications relations are set:
- 1 update in sub-modifications relation for the relation (batchSize: number of sub-modifications)
*/
@Test
public void testSqlRequestsCountOnPutGroupsDuplications() throws Exception {
createFewTabularModifications();

reset();
ApiUtils.putGroupsDuplications(mockMvc, getGroupId(), getNetworkId());
TestUtils.assertRequestsCount(7, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

@Test
public void testSqlRequestsCountOnPutGroupsDuplications2() throws Exception {
createMoreTabularModifications();

reset();
ApiUtils.putGroupsDuplications(mockMvc, getGroupId(), getNetworkId());
TestUtils.assertRequestsCount(11, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

/*
PUT /v1/groups/{groupUuid}?action=COPY SQL requests analysis
First we select the modifications to copy:
- 1 select to retrieve the modifications
- 2 selects per tabular modification to get the ids of the sub-modifications and the sub-modifications themselves
- 1 select on the modification_group to check if the new group exists
Then we insert the new modifications in the new group:
- 1 insert in modification_group to create the new group
- 1 insert in modification for tabular modifications (batchSize: number of tabular modifications)
- 1 insert in tabular_modification (batchSize: number of tabular modifications)
- 1 insert in modification for sub-modifications (batchSize: number of sub-modifications)
- 1 insert in sub-modification table (batchSize: number of sub-modifications)
- (optional) 1 insert in sub-modification relation tables (batchSize: number of sub-modifications)
Then modifications order is set:
- 1 update in modification for orders (batchSize: number of tabular modifications)
Then relation between tabular modifications and sub-modifications are set:
- 1 insert in tabular_modification_modifications for the relation (batchSize: number of sub-modifications)
(optional) Then order of sub-modifications relations are set:
- 1 update in sub-modifications relation for the relation (batchSize: number of sub-modifications)
*/
@Test
public void testSqlRequestsCountOnPutGroupsWithCopy() throws Exception {
List<UUID> ids = createFewTabularModifications();

reset();
ApiUtils.putGroupsWithCopy(mockMvc, ids, getNetworkId());
TestUtils.assertRequestsCount(6, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

@Test
public void testSqlRequestsCountOnPutGroupsWithCopy2() throws Exception {
List<UUID> ids = createMoreTabularModifications();

reset();
ApiUtils.putGroupsWithCopy(mockMvc, ids, getNetworkId());
TestUtils.assertRequestsCount(10, getNumberOfInserts(), getNumberOfUpdates(), 0);
}

private List<UUID> createFewTabularModifications() {
UUID tabularUuid1 = createTabularModification(1);
UUID tabularUuid2 = createTabularModification(3);

return List.of(tabularUuid1, tabularUuid2);
}

private List<UUID> createMoreTabularModifications() {
UUID tabularUuid1 = createTabularModification(1);
UUID tabularUuid2 = createTabularModification(3);
UUID tabularUuid3 = createTabularModification(10);
UUID tabularUuid4 = createTabularModification(30);

return List.of(tabularUuid1, tabularUuid2, tabularUuid3, tabularUuid4);
}

// Some sub-modifications are related to other tables, for example FreeProperties, then it requires additional inserts
protected int getAdditionalSubModificationRelatedTables() {
return 0;
}

// Some sub-modifications are related to other ordered tables, for example FreeProperties, then it requires additional updates
protected int getAdditionalSubModificationOrderedRelatedTables() {
return 0;
}

protected abstract UUID createTabularModification(int qty);

private int getNumberOfInserts() {
return 6 + getAdditionalSubModificationRelatedTables();
}

private int getNumberOfUpdates() {
return 1 + getAdditionalSubModificationOrderedRelatedTables();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,8 @@
import org.gridsuite.modification.server.dto.ModificationInfos;
import org.gridsuite.modification.server.dto.OperationType;
import org.gridsuite.modification.server.dto.TabularModificationInfos;
import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest;
import org.gridsuite.modification.server.utils.ApiUtils;
import org.gridsuite.modification.server.utils.ModificationCreation;
import org.gridsuite.modification.server.utils.NetworkCreation;
import org.junit.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Tag;

Expand All @@ -29,16 +26,14 @@
import java.util.Map;
import java.util.UUID;

import static com.vladmihalcea.sql.SQLStatementCountValidator.assertSelectCount;
import static com.vladmihalcea.sql.SQLStatementCountValidator.reset;
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
import static org.junit.Assert.assertEquals;

/**
* @author Franck Lecuyer <franck.lecuyer at rte-france.com>
*/
@Tag("IntegrationTest")
public class TabularBatteryModificationsTest extends AbstractNetworkModificationTest {
public class TabularBatteryModificationsTest extends AbstractTabularModificationTest {
@Override
protected Network createNetwork(UUID networkUuid) {
return NetworkCreation.create(networkUuid, true);
Expand Down Expand Up @@ -104,30 +99,8 @@ protected void testUpdateModificationMessage(ModificationInfos modificationInfos
Assertions.assertEquals(ModificationType.BATTERY_MODIFICATION.name(), updatedValues.get("tabularModificationType"));
}

@Test
public void testSqlRequestsCountOnGetModification() throws Exception {
UUID tabularWith1ModificationUuid = createTabularBatteryModification(1);
reset();
ApiUtils.getModification(mockMvc, tabularWith1ModificationUuid); // Getting one tabular modification with one sub-modification
assertSelectCount(3);

UUID tabularWith3ModificationUuid = createTabularBatteryModification(3);
reset();
ApiUtils.getModification(mockMvc, tabularWith3ModificationUuid); // Getting one tabular modification with three sub-modifications
assertSelectCount(3);
}

@Test
public void testSqlRequestsCountOnGetGroupModifications() throws Exception {
createTabularBatteryModification(1);
createTabularBatteryModification(3);

reset();
ApiUtils.getGroupModifications(mockMvc, getGroupId()); // Getting two tabular modifications with respectively one and three sub-modifications
assertSelectCount(6);
}

private UUID createTabularBatteryModification(int qty) {
@Override
protected UUID createTabularModification(int qty) {
ModificationInfos tabularModification = TabularModificationInfos.builder()
.modificationType(ModificationType.BATTERY_MODIFICATION)
.modifications(createBatteryModificationList(qty))
Expand All @@ -137,7 +110,7 @@ private UUID createTabularBatteryModification(int qty) {

private List<ModificationInfos> createBatteryModificationList(int qty) {
List<ModificationInfos> modifications = new ArrayList<>();
for (int i = 0; i <= qty; i++) {
for (int i = 0; i < qty; i++) {
modifications.add(
BatteryModificationInfos.builder()
.equipmentId(UUID.randomUUID().toString())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
import lombok.SneakyThrows;
import org.gridsuite.modification.server.ModificationType;
import org.gridsuite.modification.server.dto.*;
import org.gridsuite.modification.server.modifications.AbstractNetworkModificationTest;
import org.gridsuite.modification.server.utils.ApiUtils;
import org.gridsuite.modification.server.utils.ModificationCreation;
import org.gridsuite.modification.server.utils.NetworkCreation;
import org.junit.Test;
Expand All @@ -26,8 +24,6 @@
import java.util.Map;
import java.util.UUID;

import static com.vladmihalcea.sql.SQLStatementCountValidator.assertSelectCount;
import static com.vladmihalcea.sql.SQLStatementCountValidator.reset;
import static org.gridsuite.modification.server.utils.TestUtils.assertLogMessage;
import static org.junit.Assert.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
Expand All @@ -37,7 +33,7 @@
* @author Etienne Homer <etienne.homer at rte-france.com>
*/
@Tag("IntegrationTest")
public class TabularGeneratorModificationsTest extends AbstractNetworkModificationTest {
public class TabularGeneratorModificationsTest extends AbstractTabularModificationTest {
@Override
protected Network createNetwork(UUID networkUuid) {
return NetworkCreation.create(networkUuid, true);
Expand Down Expand Up @@ -87,30 +83,8 @@ protected void assertAfterNetworkModificationDeletion() {
assertEquals(1000., getNetwork().getGenerator("v6generator").getMaxP(), 0.001);
}

@Test
public void testSqlRequestsCountOnGetModification() throws Exception {
UUID tabularWith1ModificationUuid = createTabularGeneratorModification(1);
reset();
ApiUtils.getModification(mockMvc, tabularWith1ModificationUuid); // Getting one tabular modification with one sub-modification
assertSelectCount(3);

UUID tabularWith3ModificationUuid = createTabularGeneratorModification(3);
reset();
ApiUtils.getModification(mockMvc, tabularWith3ModificationUuid); // Getting one tabular modification with three sub-modifications
assertSelectCount(3);
}

@Test
public void testSqlRequestsCountOnGetGroupModifications() throws Exception {
createTabularGeneratorModification(1);
createTabularGeneratorModification(3);

reset();
ApiUtils.getGroupModifications(mockMvc, getGroupId()); // Getting two tabular modifications with respectively one and three sub-modifications
assertSelectCount(6);
}

private UUID createTabularGeneratorModification(int qty) {
@Override
protected UUID createTabularModification(int qty) {
ModificationInfos tabularModification = TabularModificationInfos.builder()
.modificationType(ModificationType.GENERATOR_MODIFICATION)
.modifications(createGeneratorModificationList(qty))
Expand Down
Loading

0 comments on commit 9123432

Please sign in to comment.