blob: dab4d3dd8e8287ec07a558de48db78b07a195a8d [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.core.api.config;
import org.apache.deltaspike.core.api.config.ConfigResolver;
import org.apache.deltaspike.core.api.projectstage.ProjectStage;
import org.apache.deltaspike.core.util.ProjectStageProducer;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.concurrent.TimeUnit;
public class TypedResolverTest
{
@Before
public void init()
{
ProjectStageProducer.setProjectStage(ProjectStage.UnitTest);
}
@Test
public void testValidTypes()
{
Assert.assertEquals("configured", ConfigResolver.resolve("deltaspike.test.string-value").getValue());
Assert.assertEquals(Boolean.FALSE, ConfigResolver.resolve("deltaspike.test.boolean-value").as(Boolean.class)
.getValue());
Assert.assertEquals(TestConfigSource.class, ConfigResolver.resolve("deltaspike.test.class-value").as(Class
.class).getValue());
Assert.assertEquals(5l, (int) ConfigResolver.resolve("deltaspike.test.integer-value").as(Integer.class)
.getValue());
Assert.assertEquals(8589934592l, (long) ConfigResolver.resolve("deltaspike.test.long-value").as(Long.class)
.getValue());
Assert.assertEquals(-1.1f, (float) ConfigResolver.resolve("deltaspike.test.float-value").as(Float.class)
.getValue(), 0);
Assert.assertEquals(4e40d, (double) ConfigResolver.resolve("deltaspike.test.double-value").as(Double.class)
.getValue(), 0);
}
@Test
public void testConverter()
{
Assert.assertEquals(new GregorianCalendar(2014, 12, 24).getTime(),
ConfigResolver.resolve("deltaspike.test.date-value")
.as(Date.class, new TestDateConverter()).getValue());
// test fallback to default
Assert.assertEquals(new GregorianCalendar(2015, 01, 01).getTime(),
ConfigResolver.resolve("deltaspike.test.INVALID-date-value")
.as(Date.class, new TestDateConverter())
.withDefault(new GregorianCalendar(2015, 01, 01).getTime())
.getValue());
}
@Test
public void testProjectStageAware()
{
Assert.assertEquals("unittestvalue",
ConfigResolver.resolve("testkey")
.withCurrentProjectStage(true)
.getValue());
Assert.assertEquals("testvalue",
ConfigResolver.resolve("testkey")
.withCurrentProjectStage(false)
.getValue());
// property without PS, with PS-aware
Assert.assertEquals("testvalue",
ConfigResolver.resolve("testkey2")
.withCurrentProjectStage(true)
.getValue());
}
@Test
public void testParameterized()
{
// param OK, ps OK
Assert.assertEquals("TestDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor")
.getValue());
// param OK, NO ps
Assert.assertEquals("PostgreDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(false)
.parameterizedBy("dbvendor")
.getValue());
// param doesn't resolve, ps OK
Assert.assertEquals("UnitTestDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("INVALIDPARAMETER")
.getValue());
// param OK, ps OK, NO base.param.ps, NO base.param, fall back to base.ps
Assert.assertEquals("UnitTestDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor3")
.getValue());
// param OK, NO ps, base.param undefined, fall back to base
Assert.assertEquals("DefaultDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(false)
.parameterizedBy("dbvendor3")
.getValue());
}
@Test
public void testDefault()
{
Assert.assertEquals(10l,
(long) ConfigResolver.resolve("INVALIDKEY")
.as(Long.class)
.withDefault(10l).getValue());
// string default
Assert.assertEquals(10l,
(long) ConfigResolver.resolve("INVALIDKEY")
.as(Long.class)
.withStringDefault("10").getValue());
}
@Test
public void testStrict()
{
Assert.assertEquals("TestDataSource",
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor")
.strictly(true)
.getValue());
// no base.param, no value for base.param.ps
Assert.assertEquals(null,
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor3")
.strictly(true)
.getValue());
// valid base.param, but no base.param.ps
Assert.assertEquals(null,
ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor2")
.strictly(true)
.getValue());
}
@Test
public void testGets()
{
ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor")
.withDefault("TESTDEFAULT");
Assert.assertEquals("TestDataSource", resolver.getValue());
Assert.assertEquals("dataSource", resolver.getKey());
Assert.assertEquals("TESTDEFAULT", resolver.getDefaultValue());
Assert.assertEquals("dataSource.mysql.UnitTest", resolver.getResolvedKey());
ConfigResolver.TypedResolver<String> resolver2 = ConfigResolver.resolve("testkey2")
.withCurrentProjectStage(true)
.parameterizedBy("INVALIDPARAMETER");
Assert.assertEquals("testvalue", resolver2.getValue());
Assert.assertEquals("testkey2", resolver2.getResolvedKey());
}
@Test
public void testWithCacheTime() throws Exception
{
ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve("dataSource")
.withCurrentProjectStage(true)
.parameterizedBy("dbvendor")
.cacheFor(TimeUnit.MILLISECONDS, 5)
.withDefault("TESTDEFAULT");
Assert.assertEquals("TestDataSource", resolver.getValue());
Assert.assertEquals("TestDataSource", resolver.getValue());
Assert.assertEquals("dataSource", resolver.getKey());
Assert.assertEquals("TESTDEFAULT", resolver.getDefaultValue());
Assert.assertEquals("dataSource.mysql.UnitTest", resolver.getResolvedKey());
// because the clock steps in certain OS is only 16ms
Thread.sleep(35L);
Assert.assertEquals("TestDataSource", resolver.getValue());
}
public static class TestDateConverter implements ConfigResolver.Converter<Date> {
@Override
public Date convert(String value)
{
String[] parts = value.split("-");
return new GregorianCalendar(Integer.valueOf(parts[0]), Integer.valueOf(parts[1]),
Integer.valueOf(parts[2])).getTime();
}
}
}