ValidationLevelLogsTest.java
/**
* Copyright (c) 2025, 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.network.impl;
import com.powsybl.commons.report.PowsyblCoreReportResourceBundle;
import com.powsybl.commons.report.ReportNode;
import com.powsybl.commons.test.PowsyblCoreTestReportResourceBundle;
import com.powsybl.commons.test.TestUtil;
import com.powsybl.iidm.network.*;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.StringWriter;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
* @author Jos�� Antonio Marqu��s {@literal <marquesja at aia.es>}
*/
class ValidationLevelLogsTest {
@Test
void equipmentAndSteadyStateTest() throws IOException {
// create a network associated with a reportNode
ReportNode reportNode = ReportNode.newRootReportNode()
.withResourceBundles(
PowsyblCoreTestReportResourceBundle.TEST_BASE_NAME,
PowsyblCoreReportResourceBundle.BASE_NAME,
"i18n.iidm-test-reports")
.withMessageTemplate("testValidationLevelLogs")
.withUntypedValue("name", "test")
.build();
Network network = NetworkFactory.findDefault().createNetwork("oneLoad", "test");
ReportNodeContext reportNodeContext = network.getReportNodeContext();
reportNodeContext.pushReportNode(reportNode);
// Define the network model
network.setMinimumAcceptableValidationLevel(ValidationLevel.EQUIPMENT);
createNetworkWithEquipmentValidationLevel(network);
// We check that the SILENT option for action on error works
// While creating only network equipment if we have established validation level to EQUIPMENT,
// We should not see anything reported
assertTrue(checkReportNode("""
Test validationLevel Logs
""", network.getReportNodeContext().getReportNode()));
network.runValidationChecks(false, network.getReportNodeContext().getReportNode());
assertTrue(checkReportNode("""
+ Test validationLevel Logs
+ Running validation checks on IIDM network oneLoad
p0 is invalid
p0 is invalid
""", network.getReportNodeContext().getReportNode()));
ValidationException e = assertThrows(ValidationException.class, () -> network.setMinimumAcceptableValidationLevel(ValidationLevel.STEADY_STATE_HYPOTHESIS));
assertTrue(e.getMessage().contains("Network 'oneLoad': Network should be corrected in order to correspond to validation level STEADY_STATE_HYPOTHESIS"));
// Define the steady-state attributes
network.getLoads().iterator().next().setP0(10.0).setQ0(-5.0);
network.runValidationChecks(false, network.getReportNodeContext().getReportNode());
assertTrue(checkReportNode("""
+ Test validationLevel Logs
+ Running validation checks on IIDM network oneLoad
p0 is invalid
p0 is invalid
Running validation checks on IIDM network oneLoad
""", network.getReportNodeContext().getReportNode()));
assertEquals(ValidationLevel.STEADY_STATE_HYPOTHESIS, network.getValidationLevel());
}
private static boolean checkReportNode(String expected, ReportNode reportNode) throws IOException {
StringWriter sw = new StringWriter();
reportNode.print(sw);
assertEquals(expected, TestUtil.normalizeLineSeparator(sw.toString()));
return true;
}
public static void createNetworkWithEquipmentValidationLevel(Network network) {
Substation s1 = network.newSubstation()
.setId("S1")
.setCountry(Country.FR)
.setTso("RTE")
.setGeographicalTags("A")
.add();
VoltageLevel vl1 = s1.newVoltageLevel()
.setId("VL1")
.setNominalV(24.0)
.setTopologyKind(TopologyKind.BUS_BREAKER)
.add();
Bus loadBus = vl1.getBusBreakerView().newBus()
.setId("LoadBus")
.add();
vl1.newLoad()
.setId("LOAD")
.setBus(loadBus.getId())
.setConnectableBus(loadBus.getId())
.add();
}
}