ShortCircuitAnalysisToolTest.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.shortcircuit;
import com.powsybl.shortcircuit.tools.ShortCircuitAnalysisTool;
import com.powsybl.tools.CommandLineTools;
import com.powsybl.tools.test.AbstractToolTest;
import com.powsybl.tools.Tool;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.nio.file.Files;
import java.util.Collections;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.assertEquals;
/**
* @author Boubakeur Brahimi
*/
class ShortCircuitAnalysisToolTest extends AbstractToolTest {
private final ShortCircuitAnalysisTool shortCircuitTool = new ShortCircuitAnalysisTool();
private static final String COMMAND_NAME = "shortcircuit";
@Override
@BeforeEach
public void setUp() throws Exception {
super.setUp();
Files.copy(Objects.requireNonNull(getClass().getResourceAsStream("/network.xiidm")), fileSystem.getPath("network.xiidm"));
createFile("test.uct", "");
createFile("out.txt", "");
createFile("emptyInput.txt", "{ }");
Files.copy(Objects.requireNonNull(getClass().getResourceAsStream("/FaultsFile.json")), fileSystem.getPath("faults.json"));
Files.copy(Objects.requireNonNull(getClass().getResourceAsStream("/ShortCircuitParameters.json")), fileSystem.getPath("parameters.json"));
Files.copy(Objects.requireNonNull(getClass().getResourceAsStream("/FaultParametersFile.json")), fileSystem.getPath("faultParameters.json"));
}
@Override
protected Iterable<Tool> getTools() {
return Collections.singleton(shortCircuitTool);
}
@Test
void testGetCommand() {
assertCommand();
}
@Override
public void assertCommand() {
assertEquals("shortcircuit", shortCircuitTool.getCommand().getName());
assertEquals("Computation", shortCircuitTool.getCommand().getTheme());
assertEquals("Run short circuit analysis", shortCircuitTool.getCommand().getDescription());
assertCommand(shortCircuitTool.getCommand(), COMMAND_NAME, 6, 2);
assertOption(shortCircuitTool.getCommand().getOptions(), "input-file", true, true);
assertOption(shortCircuitTool.getCommand().getOptions(), "case-file", true, true);
assertOption(shortCircuitTool.getCommand().getOptions(), "output-file", false, true);
assertOption(shortCircuitTool.getCommand().getOptions(), "output-format", false, true);
assertOption(shortCircuitTool.getCommand().getOptions(), "parameters-file", false, true);
assertOption(shortCircuitTool.getCommand().getOptions(), "fault-parameters-file", false, true);
}
@Test
void checkFailsWhenInputFileNotFound() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "wrongFile.txt", "--case-file", "network.xiidm"}, "java.io.UncheckedIOException: java.nio.file.NoSuchFileException: wrongFile.txt");
}
@Test
void checkFailsWhenNetworkFileNotFound() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "input.txt", "--case-file", "wrongFile.uct"}, "com.powsybl.commons.PowsyblException: File wrongFile.uct does not exist");
}
@Test
void checkThrowsWhenOutputFileAndNoFormat() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "faults.json", "--case-file", "test.uct", "--output-file", "out.txt"}, CommandLineTools.INVALID_COMMAND_STATUS, "error: Missing required option: output-format");
}
@Test
void checkThrowsWhenNetworkFileIsEmpty() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "faults.json", "--case-file", "test.uct"}, "com.powsybl.commons.PowsyblException: Unsupported file format or invalid file.");
}
@Test
void checkFailsWhenParametersFileNotFound() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "faults.json", "--case-file", "network.xiidm", "--fault-parameters-file", "wrongFile.txt"}, "java.io.UncheckedIOException: java.nio.file.NoSuchFileException: wrongFile.txt");
}
@Test
void checkFailsWhenFaultParametersFileNotFound() {
assertCommandErrorMatch(new String[] {COMMAND_NAME, "--input-file", "faults.json", "--case-file", "network.xiidm", "--fault-parameters-file", "wrongFile.txt"}, "java.io.UncheckedIOException: java.nio.file.NoSuchFileException: wrongFile.txt");
}
@Test
void test() {
String expectedOut = """
Loading network 'network.xiidm'
Loading input 'faults.json'
Loading parameters 'parameters.json'
Loading fault parameters 'faultParameters.json'
Short circuit analysis:
+----+---------------------------+
| ID | Three Phase Fault Current |
+----+---------------------------+
Limit violations:
+----+---------------+---------+--------------+------------+-------+-------+
| ID | Voltage level | Country | Base voltage | Limit type | Limit | Value |
+----+---------------+---------+--------------+------------+-------+-------+
""";
assertCommandSuccessful(new String[] {COMMAND_NAME, "--input-file", "faults.json", "--case-file", "network.xiidm", "--parameters-file", "parameters.json", "--fault-parameters-file", "faultParameters.json"}, expectedOut);
}
}