diff --git a/config-standard/pom.xml b/config-standard/pom.xml
index e62f3760fde..eac0dfa8d81 100644
--- a/config-standard/pom.xml
+++ b/config-standard/pom.xml
@@ -53,6 +53,16 @@
powsybl-commons
${project.version}
+
+ junit
+ junit
+ test
+
+
+ com.google.jimfs
+ jimfs
+ test
+
diff --git a/config-standard/src/main/java/com/powsybl/configstandard/StandardPlatformConfigProvider.java b/config-standard/src/main/java/com/powsybl/configstandard/StandardPlatformConfigProvider.java
index fc5bc54551e..eea3edfcbbc 100644
--- a/config-standard/src/main/java/com/powsybl/configstandard/StandardPlatformConfigProvider.java
+++ b/config-standard/src/main/java/com/powsybl/configstandard/StandardPlatformConfigProvider.java
@@ -50,9 +50,8 @@ public String getName() {
* "powsybl.config.dirs" or "itools.config.dir".
* If none is defined, it defaults to the single directory ${HOME}/.itools.
*/
- private static Path[] getDefaultConfigDirs(FileSystem fileSystem) {
+ static Path[] getDefaultConfigDirs(FileSystem fileSystem, String directories, String userHome) {
Objects.requireNonNull(fileSystem);
- String directories = System.getProperty("powsybl.config.dirs", System.getProperty("itools.config.dir"));
Path[] configDirs = null;
if (directories != null) {
configDirs = Arrays.stream(directories.split(":"))
@@ -61,7 +60,7 @@ private static Path[] getDefaultConfigDirs(FileSystem fileSystem) {
.toArray(Path[]::new);
}
if (configDirs == null || configDirs.length == 0) {
- configDirs = new Path[] {fileSystem.getPath(System.getProperty("user.home"), ".itools") };
+ configDirs = new Path[] {fileSystem.getPath(userHome, ".itools")};
}
return configDirs;
}
@@ -73,7 +72,7 @@ private static Path[] getDefaultConfigDirs(FileSystem fileSystem) {
* Configuration properties encountered in environment variables take precedence
* over the values defined in config directories.
*/
- private static ModuleConfigRepository loadModuleRepository(Path[] configDirs, String configName) {
+ static ModuleConfigRepository loadModuleRepository(Path[] configDirs, String configName) {
List repositoriesFromPath = Arrays.stream(configDirs)
.map(configDir -> PlatformConfig.loadModuleRepository(configDir, configName))
.collect(Collectors.toList());
@@ -83,16 +82,15 @@ private static ModuleConfigRepository loadModuleRepository(Path[] configDirs, St
return new StackedModuleConfigRepository(repositories);
}
- private static ModuleConfigRepository getDefaultModuleRepository(Path[] configDirs) {
- String configName = System.getProperty("powsybl.config.name", System.getProperty("itools.config.name", "config"));
- return loadModuleRepository(configDirs, configName);
- }
-
@Override
public PlatformConfig getPlatformConfig() {
FileSystem fileSystem = FileSystems.getDefault();
- Path[] configDirs = getDefaultConfigDirs(fileSystem);
- ModuleConfigRepository repository = getDefaultModuleRepository(configDirs);
+ String directories = System.getProperty("powsybl.config.dirs", System.getProperty("itools.config.dir"));
+ String configName = System.getProperty("powsybl.config.name",
+ System.getProperty("itools.config.name", "config"));
+ String userHome = System.getProperty("user.home");
+ Path[] configDirs = getDefaultConfigDirs(fileSystem, directories, userHome);
+ ModuleConfigRepository repository = loadModuleRepository(configDirs, configName);
return new PlatformConfig(repository, configDirs[0]);
}
diff --git a/config-standard/src/test/java/com/powsybl/configstandard/StandardConfigTest.java b/config-standard/src/test/java/com/powsybl/configstandard/StandardConfigTest.java
new file mode 100644
index 00000000000..c9aef5c90da
--- /dev/null
+++ b/config-standard/src/test/java/com/powsybl/configstandard/StandardConfigTest.java
@@ -0,0 +1,73 @@
+/**
+ * Copyright (c) 2019, 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/.
+ */
+package com.powsybl.configstandard;
+
+import static org.junit.Assert.assertEquals;
+
+import com.google.common.jimfs.Configuration;
+import com.google.common.jimfs.Jimfs;
+import com.powsybl.commons.config.ModuleConfigRepository;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.BufferedWriter;
+import java.nio.file.FileSystem;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class StandardConfigTest {
+
+ FileSystem fileSystem;
+
+ @Before
+ public void setUp() throws Exception {
+ fileSystem = Jimfs.newFileSystem(Configuration.unix());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ fileSystem.close();
+ }
+
+ private List getAbsolutePaths(String configDirs) {
+ Path[] paths = StandardPlatformConfigProvider.getDefaultConfigDirs(fileSystem, configDirs, "/");
+ return Arrays.stream(paths).map(Path::toAbsolutePath).map(Path::toString).collect(Collectors.toList());
+ }
+
+ @Test
+ public void testNoUserHome() {
+ assertEquals(Arrays.asList("/.itools"), getAbsolutePaths(null));
+ }
+
+ @Test
+ public void testEmptyConfigDirs() {
+ // "FIXME: should return the same as with null but currently returns the working
+ // dir")
+ // assertEquals(Arrays.asList("/.itools"), getAbsolutePaths(""));
+ assertEquals(Arrays.asList("/work"), getAbsolutePaths(""));
+ }
+
+ @Test
+ public void testNormalConfigDirs() {
+ assertEquals(Arrays.asList("/foo", "/bar"), getAbsolutePaths("/foo:/bar/"));
+ }
+
+ @Test
+ public void testModuleRepository() throws Exception {
+ try (BufferedWriter newBufferedWriter = Files.newBufferedWriter(fileSystem.getPath("/config.yml"))) {
+ newBufferedWriter.write("foo:\n bar: baz");
+ }
+ ModuleConfigRepository loadModuleRepository = StandardPlatformConfigProvider
+ .loadModuleRepository(new Path[] {fileSystem.getPath("/") }, "config");
+ assertEquals("baz", loadModuleRepository.getModuleConfig("foo").get().getStringProperty("bar"));
+ }
+}