BranchObservabilityXmlTest.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/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.iidm.serde.extensions;
import com.powsybl.commons.PowsyblException;
import com.powsybl.iidm.network.Line;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.TwoWindingsTransformer;
import com.powsybl.iidm.network.extensions.BranchObservability;
import com.powsybl.iidm.network.extensions.BranchObservabilityAdder;
import com.powsybl.iidm.network.impl.extensions.BranchObservabilityImpl;
import com.powsybl.iidm.network.test.EurostagTutorialExample1Factory;
import com.powsybl.iidm.serde.AbstractIidmSerDeTest;
import com.powsybl.iidm.serde.ExportOptions;
import com.powsybl.iidm.serde.IidmVersion;
import com.powsybl.iidm.serde.NetworkSerDe;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.stream.Stream;
import static com.powsybl.iidm.serde.IidmSerDeConstants.CURRENT_IIDM_VERSION;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Thomas Adam {@literal <tadam at silicom.fr>}
*/
class BranchObservabilityXmlTest extends AbstractIidmSerDeTest {
private static List<IidmVersion> fromMinToCurrentVersion(IidmVersion min) {
return Stream.of(IidmVersion.values())
.filter(v -> v.compareTo(min) >= 0)
.toList();
}
@Test
void test() throws IOException {
Network network = EurostagTutorialExample1Factory.create();
network.setCaseDate(ZonedDateTime.parse("2022-08-09T17:00:00.000Z"));
Line line1 = network.getLine("NHV1_NHV2_1");
assertNotNull(line1);
BranchObservability<Line> line1BranchObservability = new BranchObservabilityImpl<>(line1, true,
0.03d, false,
0.6d, false,
0.1d, false,
0.04d, true);
line1.addExtension(BranchObservability.class, line1BranchObservability);
Line line2 = network.getLine("NHV1_NHV2_2");
assertNotNull(line2);
BranchObservability<Line> line2BranchObservability = new BranchObservabilityImpl<>(line2, false,
0.1d, true,
0.2d, true,
0.3d, true,
0.4d, false);
line2.addExtension(BranchObservability.class, line2BranchObservability);
// Transfo with missing qualities
network.getTwoWindingsTransformer("NGEN_NHV1")
.newExtension(BranchObservabilityAdder.class)
.withObservable(true)
.add();
for (var version : fromMinToCurrentVersion(IidmVersion.V_1_6)) {
Network network2 = allFormatsRoundTripTest(network, "/branchObservabilityRoundTripRef.xml", version, new ExportOptions().setSorted(true));
line1 = network2.getLine("NHV1_NHV2_1");
assertNotNull(line1);
BranchObservability<Line> line1BranchObservability2 = line1.getExtension(BranchObservability.class);
assertNotNull(line1BranchObservability2);
assertEquals(line1BranchObservability.isObservable(), line1BranchObservability2.isObservable());
assertEquals(line1BranchObservability.getQualityP1().getStandardDeviation(), line1BranchObservability2.getQualityP1().getStandardDeviation(), 0.0d);
assertEquals(line1BranchObservability.getQualityP1().isRedundant(), line1BranchObservability2.getQualityP1().isRedundant());
assertEquals(line1BranchObservability.getQualityP2().getStandardDeviation(), line1BranchObservability2.getQualityP2().getStandardDeviation(), 0.0d);
assertEquals(line1BranchObservability.getQualityP2().isRedundant(), line1BranchObservability2.getQualityP2().isRedundant());
assertEquals(line1BranchObservability.getQualityQ1().getStandardDeviation(), line1BranchObservability2.getQualityQ1().getStandardDeviation(), 0.0d);
assertEquals(line1BranchObservability.getQualityQ1().isRedundant(), line1BranchObservability2.getQualityQ1().isRedundant());
assertEquals(line1BranchObservability.getQualityQ2().getStandardDeviation(), line1BranchObservability2.getQualityQ2().getStandardDeviation(), 0.0d);
assertEquals(line1BranchObservability.getQualityQ2().isRedundant(), line1BranchObservability2.getQualityQ2().isRedundant());
assertEquals(line1BranchObservability.getName(), line1BranchObservability2.getName());
line2 = network2.getLine("NHV1_NHV2_2");
assertNotNull(line2);
BranchObservability<Line> line2BranchObservability2 = line2.getExtension(BranchObservability.class);
assertNotNull(line2BranchObservability2);
assertEquals(line2BranchObservability.isObservable(), line2BranchObservability2.isObservable());
BranchObservability<TwoWindingsTransformer> transfoObs = network2.getTwoWindingsTransformer("NGEN_NHV1")
.getExtension(BranchObservability.class);
assertNotNull(transfoObs);
assertTrue(transfoObs.isObservable());
assertNull(transfoObs.getQualityP1());
assertNull(transfoObs.getQualityP2());
assertNull(transfoObs.getQualityQ1());
assertNull(transfoObs.getQualityQ2());
}
}
@Test
void invalidTest() {
PowsyblException e = assertThrows(PowsyblException.class, () -> NetworkSerDe.read(getClass().getResourceAsStream(getVersionedNetworkPath("/branchObservabilityRoundTripRefInvalid.xml", CURRENT_IIDM_VERSION))));
assertEquals("Unknown element name 'qualityV' in 'branchObservability'", e.getMessage());
}
}