ImportExportPerformanceTest.java
/**
* Copyright (c) 2017-2018, 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.cgmes.conversion.test;
import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
import com.powsybl.cgmes.conformity.CgmesConformity1Catalog;
import com.powsybl.cgmes.conversion.CgmesExport;
import com.powsybl.cgmes.conversion.CgmesImport;
import com.powsybl.cgmes.conversion.CgmesModelExtension;
import com.powsybl.cgmes.model.CgmesModel;
import com.powsybl.cgmes.model.GridModelReference;
import com.powsybl.commons.datasource.DataSource;
import com.powsybl.commons.datasource.DirectoryDataSource;
import com.powsybl.commons.datasource.ReadOnlyDataSource;
import com.powsybl.iidm.network.Network;
import com.powsybl.iidm.network.NetworkFactory;
import com.powsybl.triplestore.api.TripleStoreFactory;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Properties;
/**
* @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
*/
class ImportExportPerformanceTest {
// TODO We should build tests that check that re-imported exported models
// are equivalent to the original models
@Test
void microGridBaseCaseNL() throws IOException {
importExport(TripleStoreFactory.onlyDefaultImplementation(), CgmesConformity1Catalog.microGridBaseCaseNL());
}
private void importExport(List<String> tsImpls, GridModelReference gm) throws IOException {
try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) {
ReadOnlyDataSource ds = gm.dataSource();
int size = tsImpls.size();
long[] startTimes = new long[size];
long[] endTimes = new long[size];
for (int k = 0; k < size; k++) {
String impl = tsImpls.get(k);
LOG.info("importExport performance, TS implementation {}, model {}", impl, gm.name());
startTimes[k] = System.currentTimeMillis();
importExport(impl, ds, fs);
endTimes[k] = System.currentTimeMillis();
}
for (int k = 0; k < size; k++) {
String impl = tsImpls.get(k);
LOG.info("importExport {} took {} milliseconds", impl, endTimes[k] - startTimes[k]);
}
}
}
private void importExport(String ts, ReadOnlyDataSource ds, FileSystem fs) throws IOException {
CgmesImport i = new CgmesImport();
Properties importParameters = new Properties();
importParameters.put("powsyblTripleStore", ts);
importParameters.put("storeCgmesModelAsNetworkExtension", "true");
importParameters.put(CgmesImport.IMPORT_CGM_WITH_SUBNETWORKS, "false");
Network n = i.importData(ds, NetworkFactory.findDefault(), importParameters);
CgmesModel cgmes = n.getExtension(CgmesModelExtension.class).getCgmesModel();
cgmes.print(LOG::info);
CgmesExport e = new CgmesExport();
Path exportFolder = fs.getPath("impl-" + ts);
Files.createDirectories(exportFolder);
DataSource exportDataSource = new DirectoryDataSource(exportFolder, "");
Properties exportParameters = new Properties();
exportParameters.put(CgmesExport.CIM_VERSION, "16");
e.export(n, exportParameters, exportDataSource);
}
private static final Logger LOG = LoggerFactory.getLogger(ImportExportPerformanceTest.class);
}