MetrixDslDataLoaderInterruptionTest.java
package com.powsybl.metrix.integration;
import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
import com.powsybl.computation.AbstractTaskInterruptionTest;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.serde.NetworkSerDe;
import com.powsybl.metrix.mapping.DataTableStore;
import com.powsybl.metrix.mapping.MappingParameters;
import com.powsybl.metrix.mapping.TimeSeriesDslLoader;
import com.powsybl.metrix.mapping.TimeSeriesMappingConfig;
import com.powsybl.timeseries.ReadOnlyTimeSeriesStore;
import com.powsybl.timeseries.ReadOnlyTimeSeriesStoreCache;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Objects;
/**
* @author Nicolas Rol {@literal <nicolas.rol at rte-france.com>}
*/
class MetrixDslDataLoaderInterruptionTest extends AbstractTaskInterruptionTest {
private FileSystem fileSystem;
private Path dslFile;
private Path mappingFile;
private Network network;
private final MetrixParameters parameters = new MetrixParameters();
private final MappingParameters mappingParameters = MappingParameters.load();
@BeforeEach
public void setUp() throws Exception {
fileSystem = Jimfs.newFileSystem(Configuration.unix());
dslFile = fileSystem.getPath("/test.dsl");
mappingFile = fileSystem.getPath("/mapping.dsl");
network = NetworkSerDe.read(Objects.requireNonNull(getClass().getResourceAsStream("/simpleNetwork.xml")));
// Create mapping file for use in all tests
try (Writer writer = Files.newBufferedWriter(mappingFile, StandardCharsets.UTF_8)) {
writer.write(String.join(System.lineSeparator(),
"timeSeries['tsN'] = 1000",
"timeSeries['tsN_1'] = 2000",
"timeSeries['tsITAM'] = 3000",
"timeSeries['ts1'] = 100",
"timeSeries['ts2'] = 200",
"timeSeries['ts3'] = 300",
"timeSeries['ts4'] = 400",
"timeSeries['ts5'] = 500"
));
}
}
@AfterEach
public void tearDown() throws Exception {
fileSystem.close();
}
@ParameterizedTest
@Timeout(10)
@ValueSource(booleans = {false, true})
void testCancelMetrixDslDataLoaderShort(boolean isDelayed) throws Exception {
try (Writer writer = Files.newBufferedWriter(dslFile, StandardCharsets.UTF_8)) {
writer.write(String.join(System.lineSeparator(),
"load('FVALDI11_L') {",
" preventiveSheddingPercentage 20",
"}",
"load('FVALDI11_L2') {",
" preventiveSheddingPercentage 30",
" preventiveSheddingCost 12000",
"}",
"load('FVERGE11_L') {",
" preventiveSheddingPercentage 0",
" preventiveSheddingCost 10000",
"}",
"load('FSSV.O11_L') {",
" curativeSheddingPercentage 40",
"}"));
}
ReadOnlyTimeSeriesStore store = new ReadOnlyTimeSeriesStoreCache();
TimeSeriesMappingConfig tsConfig = new TimeSeriesDslLoader(mappingFile).load(network, mappingParameters, store, new DataTableStore(), null);
testCancelShortTask(isDelayed, () -> MetrixDslDataLoader.load(dslFile, network, parameters, store, new DataTableStore(), tsConfig));
}
@ParameterizedTest
@Timeout(10)
@ValueSource(booleans = {false, true})
void testCancelMetrixDslDataLoaderLong(boolean isDelayed) throws IOException, InterruptedException {
try (Writer writer = Files.newBufferedWriter(dslFile, StandardCharsets.UTF_8)) {
writer.write("""
for (int i = 0; i < 10; i++) {
sleep(500)
print(i)
}
""" + String.join(System.lineSeparator(),
"load('FVALDI11_L') {",
" preventiveSheddingPercentage 20",
"}",
"load('FVALDI11_L2') {",
" preventiveSheddingPercentage 30",
" preventiveSheddingCost 12000",
"}",
"load('FVERGE11_L') {",
" preventiveSheddingPercentage 0",
" preventiveSheddingCost 10000",
"}",
"load('FSSV.O11_L') {",
" curativeSheddingPercentage 40",
"}"));
}
ReadOnlyTimeSeriesStore store = new ReadOnlyTimeSeriesStoreCache();
TimeSeriesMappingConfig tsConfig = new TimeSeriesDslLoader(mappingFile).load(network, mappingParameters, store, new DataTableStore(), null);
testCancelLongTask(isDelayed, () -> MetrixDslDataLoader.load(dslFile, network, parameters, store, new DataTableStore(), tsConfig));
}
}