ConfiguredParameterTest.java
/**
* Copyright (c) 2024, 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.commons.parameters;
import com.google.common.jimfs.Configuration;
import com.google.common.jimfs.Jimfs;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.config.InMemoryPlatformConfig;
import com.powsybl.commons.config.MapModuleConfig;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.nio.file.FileSystem;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Antoine Bouhours {@literal <antoine.bouhours at rte-france.com>}
*/
class ConfiguredParameterTest {
private FileSystem fileSystem;
private InMemoryPlatformConfig config;
private ParameterDefaultValueConfig defaultValueConfig;
private List<Parameter> parameters;
@BeforeEach
void setup() {
fileSystem = Jimfs.newFileSystem(Configuration.unix());
config = new InMemoryPlatformConfig(fileSystem);
defaultValueConfig = new ParameterDefaultValueConfig(config);
Parameter paramBoolean = new Parameter("test-param-boolean", ParameterType.BOOLEAN, "", Boolean.FALSE);
Parameter paramBoolean2 = new Parameter("test-param-boolean2", ParameterType.BOOLEAN, "", Boolean.FALSE);
Parameter paramString = new Parameter("test-param-string", ParameterType.STRING, "", "TestParam");
Parameter paramString2 = new Parameter("test-param-string2", ParameterType.STRING, "", "TestParam2");
Parameter paramInt = new Parameter("test-param-int", ParameterType.INTEGER, "", 999, List.of(999, 888));
Parameter paramInt2 = new Parameter("test-param-int2", ParameterType.INTEGER, "", 111);
Parameter paramStringList = new Parameter("test-param-string-list", ParameterType.STRING_LIST, "", List.of("a", "b"));
Parameter paramStringList2 = new Parameter("test-param-string-list-2", ParameterType.STRING_LIST, "", List.of("a", "b", "c"));
Parameter paramDouble = new Parameter("test-param-double", ParameterType.DOUBLE, "", 0.06);
Parameter paramDouble2 = new Parameter("test-param-double2", ParameterType.DOUBLE, "", 0.08);
parameters = List.of(paramBoolean, paramBoolean2, paramString, paramString2, paramInt, paramInt2, paramStringList, paramStringList2, paramDouble, paramDouble2);
}
@AfterEach
void tearDown() throws IOException {
fileSystem.close();
}
@Test
void testConfiguredParametersModuleConfig() {
MapModuleConfig moduleConfig = config.createModuleConfig("import-export-parameters-default-value");
moduleConfig.setStringProperty("test-param-boolean", "true");
moduleConfig.setStringProperty("test-param-string", "TestDynamicParam");
moduleConfig.setStringProperty("test-param-int", "888");
moduleConfig.setStringListProperty("test-param-string-list", List.of("e", "b"));
moduleConfig.setStringProperty("test-param-double", "0.07");
List<Parameter> loadedParams = ConfiguredParameter.load(parameters, moduleConfig);
assertValuesModifiedWithConfig(loadedParams);
}
private static void assertValuesModifiedWithConfig(List<Parameter> loadedParams) {
assertEquals(true, loadedParams.get(0).getDefaultValue());
assertEquals(false, ((ConfiguredParameter) loadedParams.get(0)).getBaseDefaultValue());
assertEquals(false, loadedParams.get(1).getDefaultValue());
assertEquals("TestDynamicParam", loadedParams.get(2).getDefaultValue());
assertEquals("TestParam2", loadedParams.get(3).getDefaultValue());
assertEquals(888, loadedParams.get(4).getDefaultValue());
assertEquals(111, loadedParams.get(5).getDefaultValue());
assertEquals(List.of("e", "b"), loadedParams.get(6).getDefaultValue());
assertEquals(List.of("a", "b", "c"), loadedParams.get(7).getDefaultValue());
assertEquals(0.07, (double) loadedParams.get(8).getDefaultValue(), 1e-3);
assertEquals(0.08, (double) loadedParams.get(9).getDefaultValue(), 1e-3);
}
@Test
void testConfiguredParametersNullModuleConfig() {
List<Parameter> loadedParams = ConfiguredParameter.load(parameters, null);
assertDefaultValues(loadedParams);
}
private static void assertDefaultValues(List<Parameter> loadedParams) {
assertEquals(false, loadedParams.get(0).getDefaultValue());
assertEquals(false, loadedParams.get(1).getDefaultValue());
assertEquals("TestParam", loadedParams.get(2).getDefaultValue());
assertEquals("TestParam2", loadedParams.get(3).getDefaultValue());
assertEquals(999, loadedParams.get(4).getDefaultValue());
assertEquals(111, loadedParams.get(5).getDefaultValue());
assertEquals(List.of("a", "b"), loadedParams.get(6).getDefaultValue());
assertEquals(List.of("a", "b", "c"), loadedParams.get(7).getDefaultValue());
assertEquals(0.06, (double) loadedParams.get(8).getDefaultValue(), 1e-3);
assertEquals(0.08, (double) loadedParams.get(9).getDefaultValue(), 1e-3);
}
@Test
void testConfiguredParametersDefaultValueConfig() {
MapModuleConfig moduleConfig = config.createModuleConfig("import-export-parameters-default-value");
moduleConfig.setStringProperty("prefix_test-param-boolean", "true");
moduleConfig.setStringProperty("prefix_test-param-string", "TestDynamicParam");
moduleConfig.setStringProperty("prefix_test-param-int", "888");
moduleConfig.setStringListProperty("prefix_test-param-string-list", List.of("e", "b"));
moduleConfig.setStringProperty("prefix_test-param-double", "0.07");
List<Parameter> loadedParams = ConfiguredParameter.load(parameters, "prefix", defaultValueConfig);
assertValuesModifiedWithConfig(loadedParams);
}
@Test
void testConfiguredParametersNullDefaultValueConfig() {
List<Parameter> loadedParams = ConfiguredParameter.load(parameters, "", null);
assertDefaultValues(loadedParams);
}
@Test
void testConfiguredParametersThrows() {
MapModuleConfig moduleConfig = config.createModuleConfig("import-export-parameters-default-value");
String param = "test-param-int";
String configuredValue = "56";
moduleConfig.setStringProperty(param, configuredValue);
PowsyblException e = assertThrows(PowsyblException.class, () -> ConfiguredParameter.load(parameters, moduleConfig));
assertEquals("Default value check failed for parameter: " + param + ", with value: " + configuredValue, e.getMessage());
}
}