RefProgImporterTest.java
/*
* Copyright (c) 2020, 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.refprog.refprogxmlimporter;
import com.powsybl.openrao.commons.OpenRaoException;
import com.powsybl.openrao.data.refprog.referenceprogram.ReferenceProgram;
import com.powsybl.openrao.commons.EICode;
import com.powsybl.iidm.network.Country;
import org.junit.jupiter.api.Test;
import java.io.InputStream;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
/**
* @author Peter Mitri {@literal <peter.mitri at rte-france.com>}
*/
class RefProgImporterTest {
private static final double DOUBLE_TOLERANCE = 1e-3;
private OffsetDateTime offsetDateTime = OffsetDateTime.of(2020, 1, 6, 23, 0, 0, 0, ZoneOffset.UTC);
@Test
void testUnexistantFile() {
Path path = Paths.get("/refProg_12nodes_doesntexist.xml");
assertThrows(OpenRaoException.class, () -> RefProgImporter.importRefProg(path, offsetDateTime));
}
@Test
void testWrongXml() {
InputStream inputStream = getClass().getResourceAsStream("/wrong_refProg.xml");
assertThrows(OpenRaoException.class, () -> RefProgImporter.importRefProg(inputStream, offsetDateTime));
}
@Test
void testRefProgWithoutInterval() {
InputStream inputStream = getClass().getResourceAsStream("/refProg_noInterval.xml");
assertThrows(OpenRaoException.class, () -> RefProgImporter.importRefProg(inputStream, offsetDateTime));
}
@Test
void testWrongTimestamp() {
offsetDateTime = OffsetDateTime.of(2020, 1, 6, 23, 0, 0, 0, ZoneOffset.UTC);
InputStream inputStream = getClass().getResourceAsStream("/refProg_12nodes.xml");
assertThrows(OpenRaoException.class, () -> RefProgImporter.importRefProg(inputStream, offsetDateTime));
}
@Test
void testImportSimpleFile() {
offsetDateTime = OffsetDateTime.of(2020, 1, 6, 21, 00, 0, 0, ZoneOffset.UTC);
ReferenceProgram referenceProgram = RefProgImporter.importRefProg(getClass().getResourceAsStream("/refProg_12nodes.xml"), offsetDateTime);
assertEquals(4, referenceProgram.getReferenceExchangeDataList().size());
assertEquals(4, referenceProgram.getListOfAreas().size());
assertEquals(500, referenceProgram.getExchange("10YBE----------2", "10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(1300, referenceProgram.getExchange("10YBE----------2", "10YNL----------L"), DOUBLE_TOLERANCE);
assertEquals(-1600, referenceProgram.getExchange("10YCB-GERMANY--8", "10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(-600, referenceProgram.getExchange("10YCB-GERMANY--8", "10YNL----------L"), DOUBLE_TOLERANCE);
assertEquals(1800, referenceProgram.getGlobalNetPosition("10YBE----------2"), DOUBLE_TOLERANCE);
assertEquals(1100, referenceProgram.getGlobalNetPosition("10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(-2200, referenceProgram.getGlobalNetPosition("10YCB-GERMANY--8"), DOUBLE_TOLERANCE);
assertEquals(-700, referenceProgram.getGlobalNetPosition("10YNL----------L"), DOUBLE_TOLERANCE);
}
@Test
void testImportSimpleFileWithoutFlowForTimestamp() {
offsetDateTime = OffsetDateTime.of(2020, 1, 6, 19, 00, 0, 0, ZoneOffset.UTC);
ReferenceProgram referenceProgram = RefProgImporter.importRefProg(getClass().getResourceAsStream("/refProg_12nodes.xml"), offsetDateTime);
assertEquals(4, referenceProgram.getReferenceExchangeDataList().size());
assertEquals(4, referenceProgram.getListOfAreas().size());
assertEquals(0, referenceProgram.getExchange("10YBE----------2", "10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(0, referenceProgram.getExchange("10YBE----------2", "10YNL----------L"), DOUBLE_TOLERANCE);
assertEquals(-0, referenceProgram.getExchange("10YCB-GERMANY--8", "10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(-0, referenceProgram.getExchange("10YCB-GERMANY--8", "10YNL----------L"), DOUBLE_TOLERANCE);
assertEquals(0, referenceProgram.getGlobalNetPosition("10YBE----------2"), DOUBLE_TOLERANCE);
assertEquals(0, referenceProgram.getGlobalNetPosition("10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(-0, referenceProgram.getGlobalNetPosition("10YCB-GERMANY--8"), DOUBLE_TOLERANCE);
assertEquals(-0, referenceProgram.getGlobalNetPosition("10YNL----------L"), DOUBLE_TOLERANCE);
}
@Test
void testImportLargeFile1() {
offsetDateTime = OffsetDateTime.of(2015, 1, 11, 6, 30, 0, 0, ZoneOffset.UTC);
ReferenceProgram referenceProgram = RefProgImporter.importRefProg(getClass().getResourceAsStream("/large_refProg.xml"), offsetDateTime);
assertEquals(77, referenceProgram.getReferenceExchangeDataList().size());
assertEquals(54, referenceProgram.getListOfAreas().size());
assertEquals(191, referenceProgram.getExchange("10YFR-RTE------C", "10YCB-GERMANY--8"), DOUBLE_TOLERANCE);
assertEquals(-191, referenceProgram.getExchange("10YCB-GERMANY--8", "10YFR-RTE------C"), DOUBLE_TOLERANCE);
assertEquals(1756, referenceProgram.getExchange("10YFR-RTE------C", "10YES-REE------0"), DOUBLE_TOLERANCE);
assertEquals(-288, referenceProgram.getExchange("10YCB-ALBANIA--1", "10YCS-CG-TSO---S"), DOUBLE_TOLERANCE);
assertEquals(-2218, referenceProgram.getGlobalNetPosition("10YES-REE------0"), DOUBLE_TOLERANCE);
assertEquals(10198, referenceProgram.getGlobalNetPosition("10YFR-RTE------C"), DOUBLE_TOLERANCE);
}
@Test
void testImportLargeFile2() {
offsetDateTime = OffsetDateTime.of(2015, 1, 11, 19, 15, 0, 0, ZoneOffset.UTC);
ReferenceProgram referenceProgram = RefProgImporter.importRefProg(getClass().getResourceAsStream("/large_refProg.xml"), offsetDateTime);
assertEquals(77, referenceProgram.getReferenceExchangeDataList().size());
assertEquals(54, referenceProgram.getListOfAreas().size());
EICode areaCh = new EICode(Country.CH);
EICode areaFr = new EICode(Country.FR);
EICode areaBa = new EICode(Country.BA);
EICode areaRs = new EICode(Country.RS);
EICode areaCz = new EICode(Country.CZ);
EICode areaSk = new EICode(Country.SK);
EICode areaEs = new EICode(Country.ES);
assertEquals(-1397, referenceProgram.getExchange(areaCh, areaFr), DOUBLE_TOLERANCE);
assertEquals(-147, referenceProgram.getExchange(areaBa, areaRs), DOUBLE_TOLERANCE);
assertEquals(288, referenceProgram.getExchange("10YCS-CG-TSO---S", "10YCB-ALBANIA--1"), DOUBLE_TOLERANCE);
assertEquals(374, referenceProgram.getExchange(areaCz, areaSk), DOUBLE_TOLERANCE);
assertEquals(-4249, referenceProgram.getGlobalNetPosition(areaEs), DOUBLE_TOLERANCE);
assertEquals(11366, referenceProgram.getGlobalNetPosition(areaFr), DOUBLE_TOLERANCE);
}
}