OutageReaderTest.java
/*
* Copyright (c) 2022, 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.fbconstraint;
import com.powsybl.openrao.data.crac.api.Crac;
import com.powsybl.openrao.data.crac.api.CracFactory;
import com.powsybl.openrao.data.crac.io.fbconstraint.xsd.OutageType;
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.Network;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Baptiste Seguinot{@literal <baptiste.seguinot at rte-france.com>}
*/
class OutageReaderTest {
private Crac crac;
private OutageType outageType;
private Network network;
private UcteNetworkAnalyzer ucteNetworkAnalyzer;
private OutageType.Branch validBranch1;
private OutageType.Branch validBranch2;
private OutageType.Branch invalidBranch;
private OutageType.HvdcVH validHvdc;
private OutageType.HvdcVH invalidHvdc;
@BeforeEach
public void setUp() {
network = Network.read("TestCase_severalVoltageLevels_Xnodes.uct", getClass().getResourceAsStream("/network/TestCase_severalVoltageLevels_Xnodes.uct"));
ucteNetworkAnalyzer = new UcteNetworkAnalyzer(network, new UcteNetworkAnalyzerProperties(UcteNetworkAnalyzerProperties.BusIdMatchPolicy.COMPLETE_WITH_WHITESPACES));
crac = CracFactory.findDefault().create("cracId");
outageType = new OutageType();
outageType.setId("outageId");
outageType.setName("outageName");
outageType.setLocation("outageLocation");
validBranch1 = new OutageType.Branch();
validBranch1.setFrom("XBEFR11 ");
validBranch1.setTo("BBE2AA1 ");
validBranch1.setElementName("TL BE2X");
validBranch2 = new OutageType.Branch();
validBranch2.setFrom("FFR1AA1 ");
validBranch2.setTo("FFR1AA2 ");
validBranch2.setElementName("5");
invalidBranch = new OutageType.Branch();
invalidBranch.setFrom("XBEFR22 ");
invalidBranch.setTo("BBE2AA1 ");
invalidBranch.setOrder("8");
validHvdc = new OutageType.HvdcVH();
validHvdc.setFrom("XBE2AL1 ");
validHvdc.setTo("XDE2AL1 ");
invalidHvdc = new OutageType.HvdcVH();
invalidHvdc.setFrom("XBE2AL1 ");
invalidHvdc.setTo("XUNKNOWN");
}
@Test
void testNeitherBranchNorHvdcVh() {
assertFalse(new OutageReader(outageType, ucteNetworkAnalyzer).isOutageValid());
}
@Test
void testOneValidBranch() {
outageType.getBranch().add(validBranch1);
OutageReader outageReader = new OutageReader(outageType, ucteNetworkAnalyzer);
outageReader.addContingency(crac);
assertTrue(outageReader.isOutageValid());
assertNotNull(crac.getContingency("outageId"));
assertEquals("outageName", crac.getContingency("outageId").getName().get());
assertEquals(1, crac.getContingency("outageId").getElements().size());
assertTrue(crac.getContingency("outageId").getElements().stream().anyMatch(ne -> ne.getId().equals("FFR3AA1 XBEFR11 1 + XBEFR11 BBE2AA1 1")));
}
@Test
void testTwoValidBranches() {
outageType.getBranch().add(validBranch1);
outageType.getBranch().add(validBranch2);
OutageReader outageReader = new OutageReader(outageType, ucteNetworkAnalyzer);
outageReader.addContingency(crac);
assertTrue(outageReader.isOutageValid());
assertNotNull(crac.getContingency("outageId"));
assertEquals(2, crac.getContingency("outageId").getElements().size());
assertTrue(crac.getContingency("outageId").getElements().stream().anyMatch(ne -> ne.getId().equals("FFR3AA1 XBEFR11 1 + XBEFR11 BBE2AA1 1")));
assertTrue(crac.getContingency("outageId").getElements().stream().anyMatch(ne -> ne.getId().equals("FFR1AA2 FFR1AA1 5")));
}
@Test
void testOneInvalidBranch() {
outageType.getBranch().add(invalidBranch);
assertFalse(new OutageReader(outageType, ucteNetworkAnalyzer).isOutageValid());
}
@Test
void testOneValidAndOneInvalidBranch() {
outageType.getBranch().add(invalidBranch);
outageType.getBranch().add(validBranch1);
assertFalse(new OutageReader(outageType, ucteNetworkAnalyzer).isOutageValid());
}
@Test
void testOneValidHvdc() {
outageType.getHvdcVH().add(validHvdc);
OutageReader outageReader = new OutageReader(outageType, ucteNetworkAnalyzer);
outageReader.addContingency(crac);
assertTrue(outageReader.isOutageValid());
assertNotNull(crac.getContingency("outageId"));
assertEquals("outageName", crac.getContingency("outageId").getName().get());
assertEquals(2, crac.getContingency("outageId").getElements().size());
assertTrue(crac.getContingency("outageId").getElements().stream().anyMatch(ne -> ne.getId().equals("BBE2AA1 XBE2AL1 1")));
assertTrue(crac.getContingency("outageId").getElements().stream().anyMatch(ne -> ne.getId().equals("XDE2AL1 DDE2AA1 1")));
}
@Test
void testOneInvalidHvdc() {
outageType.getHvdcVH().add(invalidHvdc);
assertFalse(new OutageReader(outageType, ucteNetworkAnalyzer).isOutageValid());
}
@Test
void testOneValidAndOneInvalidHvdc() {
outageType.getHvdcVH().add(invalidHvdc);
outageType.getHvdcVH().add(validHvdc);
assertFalse(new OutageReader(outageType, ucteNetworkAnalyzer).isOutageValid());
}
}