Skip to content

Commit

Permalink
Add tests for StandardPlatformConfigProvider and refactor to make it …
Browse files Browse the repository at this point in the history
…more testable

Signed-off-by: Jon Harper <jon.harper87@gmail.com>
  • Loading branch information
jonenst committed Sep 6, 2019
1 parent c7a83c1 commit d098912
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 11 deletions.
10 changes: 10 additions & 0 deletions config-standard/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@
<artifactId>powsybl-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.jimfs</groupId>
<artifactId>jimfs</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

Original file line number Diff line number Diff line change
Expand Up @@ -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(":"))
Expand All @@ -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;
}
Expand All @@ -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<ModuleConfigRepository> repositoriesFromPath = Arrays.stream(configDirs)
.map(configDir -> PlatformConfig.loadModuleRepository(configDir, configName))
.collect(Collectors.toList());
Expand All @@ -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]);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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<String> 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"));
}
}

0 comments on commit d098912

Please sign in to comment.