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")); + } +}