blob: 54e47ac5fbddee8d160ea4d53ee6b1b098d787da [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.deltaspike.test.api.config;
import org.apache.deltaspike.core.api.config.ConfigResolver;
import org.apache.deltaspike.core.api.projectstage.ProjectStage;
import org.apache.deltaspike.core.spi.config.ConfigFilter;
import org.apache.deltaspike.core.spi.config.ConfigSource;
import org.apache.deltaspike.core.util.ProjectStageProducer;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.List;
public class ConfigResolverTest
{
private static final String DEFAULT_VALUE = "defaultValue";
@Before
public void init()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
}
@Test
public void testOverruledValue()
{
String result = ConfigResolver.getPropertyValue("test");
Assert.assertEquals("test2", result);
}
@Test
public void testOrderOfAllValues()
{
List<String> result = ConfigResolver.getAllPropertyValues("test");
Assert.assertEquals(2, result.size());
Assert.assertEquals("test1", result.get(0));
Assert.assertEquals("test2", result.get(1));
}
@Test
public void testStandaloneConfigSource()
{
Assert.assertNull(ConfigResolver.getPropertyValue("notexisting"));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey"));
}
@Test
public void testGetProjectStageAwarePropertyValue()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
Assert.assertNull(ConfigResolver.getProjectStageAwarePropertyValue("notexisting", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey"));
Assert.assertEquals("unittestvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey"));
Assert.assertEquals("unittestvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey2"));
Assert.assertEquals("testvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey2"));
Assert.assertEquals("testvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey2", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey3"));
Assert.assertEquals("", ConfigResolver.getProjectStageAwarePropertyValue("testkey3"));
Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getProjectStageAwarePropertyValue("testkey3", DEFAULT_VALUE));
Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getProjectStageAwarePropertyValue("deltaspike.test.projectstagefallback", DEFAULT_VALUE));
Assert.assertEquals("", ConfigResolver.getProjectStageAwarePropertyValue("deltaspike.test.projectstagefallback"));
Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.resolve("deltaspike.test.projectstagefallback").as(String.class).withDefault(DEFAULT_VALUE).withCurrentProjectStage(true).getValue());
Assert.assertEquals("", ConfigResolver.resolve("deltaspike.test.projectstagefallback").as(String.class).withCurrentProjectStage(true).getValue());
}
@Test
public void testGetPropertyAwarePropertyValue()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
Assert.assertNull(ConfigResolver.getPropertyAwarePropertyValue("notexisting", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey"));
Assert.assertEquals("unittestvalue", ConfigResolver.getPropertyAwarePropertyValue("testkey", "dbvendor"));
Assert.assertEquals("unittestvalue", ConfigResolver.getPropertyAwarePropertyValue("testkey", "dbvendor", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey2"));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyAwarePropertyValue("testkey2", "dbvendor"));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyAwarePropertyValue("testkey2", "dbvendor", null));
Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey3"));
Assert.assertEquals("", ConfigResolver.getPropertyAwarePropertyValue("testkey3", "dbvendor"));
Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getPropertyAwarePropertyValue("testkey3", "dbvendor", DEFAULT_VALUE));
Assert.assertEquals("TestDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendor"));
Assert.assertEquals("PostgreDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendor2"));
Assert.assertEquals("UnitTestDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendorX"));
Assert.assertEquals("TestDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendor", null));
Assert.assertEquals("PostgreDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendor2", null));
Assert.assertEquals("UnitTestDataSource", ConfigResolver.getPropertyAwarePropertyValue("dataSource", "dbvendorX", null));
Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getPropertyAwarePropertyValue("dataSourceX", "dbvendorX", DEFAULT_VALUE));
}
@Test
public void testConfigFilter()
{
ConfigFilter configFilter = new TestConfigFilter();
Assert.assertEquals("shouldGetDecrypted: value", configFilter.filterValue("somekey.encrypted", "value"));
Assert.assertEquals("**********", configFilter.filterValueForLog("somekey.password", "value"));
ConfigResolver.addConfigFilter(configFilter);
Assert.assertEquals("shouldGetDecrypted: value", ConfigResolver.getPropertyValue("testkey4.encrypted"));
Assert.assertEquals("shouldGetDecrypted: value", ConfigResolver.getProjectStageAwarePropertyValue("testkey4.encrypted"));
Assert.assertEquals("shouldGetDecrypted: value", ConfigResolver.getProjectStageAwarePropertyValue("testkey4.encrypted", null));
Assert.assertEquals("shouldGetDecrypted: value", ConfigResolver.getPropertyAwarePropertyValue("testkey4.encrypted", "dbvendor"));
Assert.assertEquals("shouldGetDecrypted: value", ConfigResolver.getPropertyAwarePropertyValue("testkey4.encrypted", "dbvendor", null));
List<String> allPropertyValues = ConfigResolver.getAllPropertyValues("testkey4.encrypted");
Assert.assertNotNull(allPropertyValues);
Assert.assertEquals(1, allPropertyValues.size());
Assert.assertEquals("shouldGetDecrypted: value", allPropertyValues.get(0));
}
@Test
public void testConfigVariableReplacement()
{
{
String url = ConfigResolver.getPropertyValue("deltaspike.test.someapp.soap.endpoint", "", true);
Assert.assertEquals("http://localhost:12345/someservice/myendpoint", url);
}
{
String url = ConfigResolver.getPropertyValue("deltaspike.test.someapp.soap.endpoint", true);
Assert.assertEquals("http://localhost:12345/someservice/myendpoint", url);
}
}
@Test
public void testConfigVariableNotExisting()
{
{
String url = ConfigResolver.getPropertyValue("deltaspike.test.nonexisting.variable", "", true);
Assert.assertEquals("${does.not.exist}/someservice/myendpoint", url);
}
{
String url = ConfigResolver.getPropertyValue("deltaspike.test.nonexisting.variable", true);
Assert.assertEquals("${does.not.exist}/someservice/myendpoint", url);
}
}
@Test
public void testConfigVariableRecursiveDeclaration()
{
String url = ConfigResolver.getPropertyValue("deltaspike.test.recursive.variable1", "", true);
Assert.assertEquals("pre-crazy-post/ohgosh/crazy", url);
ConfigResolver.TypedResolver<String> tr = ConfigResolver.resolve("deltaspike.test.recursive.variable1")
.evaluateVariables(true).logChanges(true);
Assert.assertEquals("pre-crazy-post/ohgosh/crazy", tr.getValue());
}
@Test
public void testTypedResolver_NonExistingValue()
{
final String key = "non.existing.key";
ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve(key)
.logChanges(true);
Assert.assertNull(resolver.getValue());
setTestConfigSourceValue(key, "somevalue");
Assert.assertEquals("somevalue", resolver.getValue());
setTestConfigSourceValue(key, null);
Assert.assertNull(resolver.getValue());
}
@Test
public void testProjectStageAwarePropertyValueReference() {
final String expected =
"projectStageAware-exampleEntry-1-is-tomato-UnitTest";
final String projectStageAwareExampleEntry1 =
ConfigResolver.getProjectStageAwarePropertyValue(
"deltaspike.test.exampleEntry-2",
"");
Assert.assertEquals(expected, projectStageAwareExampleEntry1);
}
private void setTestConfigSourceValue(String key, String value)
{
ConfigSource[] configSources = ConfigResolver.getConfigSources();
for (ConfigSource configSource : configSources)
{
if (configSource instanceof TestConfigSource)
{
if (value == null)
{
configSource.getProperties().remove(key);
}
else
{
configSource.getProperties().put(key, value);
}
break;
}
}
}
public static class TestConfigFilter implements ConfigFilter
{
@Override
public String filterValue(String key, String value)
{
if (key.contains("encrypted"))
{
return "shouldGetDecrypted: " + value;
}
return value;
}
@Override
public String filterValueForLog(String key, String value)
{
if (key.contains("password"))
{
return "**********";
}
return value;
}
}
}