GeneratorHelperTest.java
/*
* Copyright (c) 2021, 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 com.powsybl.openrao.data.crac.io.cse.remedialaction;
import com.powsybl.openrao.data.crac.io.commons.api.ImportStatus;
import com.powsybl.openrao.data.crac.io.commons.ucte.UcteNetworkAnalyzer;
import com.powsybl.openrao.data.crac.io.commons.ucte.UcteNetworkAnalyzerProperties;
import com.powsybl.iidm.network.Bus;
import com.powsybl.iidm.network.Network;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
*/
class GeneratorHelperTest {
private Network network;
private UcteNetworkAnalyzer ucteNetworkAnalyzer;
private void setUp(String networkFileName) {
network = Network.read(networkFileName, getClass().getResourceAsStream(networkFileName));
ucteNetworkAnalyzer = new UcteNetworkAnalyzer(network, new UcteNetworkAnalyzerProperties(UcteNetworkAnalyzerProperties.BusIdMatchPolicy.COMPLETE_WITH_WILDCARDS));
}
@Test
void testElementNotInNetwork() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
GeneratorHelper generatorHelper = new GeneratorHelper("AAAAAAAA", ucteNetworkAnalyzer);
assertEquals(ImportStatus.ELEMENT_NOT_FOUND_IN_NETWORK, generatorHelper.getImportStatus());
assertNull(generatorHelper.getGeneratorId());
assertEquals("No bus in the network matches bus id AAAAAAAA", generatorHelper.getDetail());
assertFalse(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
@Test
void testOneMatch() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA11", ucteNetworkAnalyzer);
assertEquals(ImportStatus.IMPORTED, generatorHelper.getImportStatus());
assertEquals("BBE1AA11_generator", generatorHelper.getGeneratorId());
assertNull(generatorHelper.getDetail());
assertTrue(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
assertEquals(-9000, generatorHelper.getPmin(), 1e-3);
assertEquals(9000, generatorHelper.getPmax(), 1e-3);
assertEquals(1500, generatorHelper.getCurrentP(), 1e-3);
}
@Test
void testMultipleBusMatchesButOneGenerator() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA1*", ucteNetworkAnalyzer);
assertEquals(ImportStatus.IMPORTED, generatorHelper.getImportStatus());
assertEquals("BBE1AA11_generator", generatorHelper.getGeneratorId());
assertNull(generatorHelper.getDetail());
assertTrue(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
@Test
void testMultipleGeneratorMatches() {
setUp("/networks/TestCase12Nodes_forCSE_multipleGenerators.uct");
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA1*", ucteNetworkAnalyzer);
assertEquals(ImportStatus.INCONSISTENCY_IN_DATA, generatorHelper.getImportStatus());
assertNull(generatorHelper.getGeneratorId());
assertEquals("Too many generators match node name BBE1AA1*", generatorHelper.getDetail());
assertFalse(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
@Test
void testBusHasNoGenerator() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA12", ucteNetworkAnalyzer);
assertEquals(ImportStatus.INCONSISTENCY_IN_DATA, generatorHelper.getImportStatus());
assertNull(generatorHelper.getGeneratorId());
assertEquals("Buses matching BBE1AA12 in the network do not hold generators", generatorHelper.getDetail());
assertFalse(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
@Test
void testTwoGeneratorsOnOneBus() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
((Bus) network.getIdentifiable("BBE1AA11"))
.getVoltageLevel()
.newGenerator()
.setId("BBE1AA11_second_generator")
.setBus("BBE1AA11")
.setMaxP(100)
.setMinP(0)
.setTargetP(0)
.setTargetQ(0)
.setRatedS(100)
.setVoltageRegulatorOn(true)
.setTargetV(430)
.setConnectableBus("BBE1AA11")
.setEnsureIdUnicity(true)
.add();
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA11", ucteNetworkAnalyzer);
assertEquals(ImportStatus.IMPORTED, generatorHelper.getImportStatus());
assertEquals("BBE1AA11_generator", generatorHelper.getGeneratorId());
assertEquals("More than 1 generator associated to BBE1AA11. First generator is selected.", generatorHelper.getDetail());
assertTrue(generatorHelper.isValid());
assertTrue(generatorHelper.isAltered());
}
@Test
void testGeneratorNotConnected() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
network.getGenerator("BBE1AA11_generator").getTerminal().disconnect();
GeneratorHelper generatorHelper = new GeneratorHelper("BBE1AA11", ucteNetworkAnalyzer);
assertEquals(ImportStatus.INCONSISTENCY_IN_DATA, generatorHelper.getImportStatus());
assertNull(generatorHelper.getGeneratorId());
assertEquals("Buses matching BBE1AA11 in the network do not hold generators", generatorHelper.getDetail());
assertFalse(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
@Test
void testGeneratorNotInMainComponent() {
setUp("/networks/TestCase12Nodes_forCSE.uct");
network.getBranch("NNL1AA1 NNL2AA1 1").getTerminal1().disconnect();
network.getBranch("NNL1AA1 NNL3AA1 1").getTerminal1().disconnect();
GeneratorHelper generatorHelper = new GeneratorHelper("NNL1AA1 ", ucteNetworkAnalyzer);
assertEquals(ImportStatus.INCONSISTENCY_IN_DATA, generatorHelper.getImportStatus());
assertNull(generatorHelper.getGeneratorId());
assertEquals("Buses matching NNL1AA1 in the network do not hold generators connected to the main grid", generatorHelper.getDetail());
assertFalse(generatorHelper.isValid());
assertFalse(generatorHelper.isAltered());
}
}