blob: 82a9aeaa8e7a0da40befd103e20f72be0b96d437 [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.tamaya.core;
import org.apache.tamaya.Configuration;
import org.apache.tamaya.TypeLiteral;
import org.apache.tamaya.core.internal.CoreConfigurationBuilder;
import org.apache.tamaya.spi.ConfigurationBuilder;
import org.apache.tamaya.spi.ConfigurationContext;
import org.apache.tamaya.spi.PropertyConverter;
import org.apache.tamaya.spi.PropertyFilter;
import org.apache.tamaya.spi.PropertySource;
import org.junit.Test;
import java.util.Arrays;
import java.util.Comparator;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link ConfigurationBuilder} by atsticks on 06.09.16.
*/
public class ConfigurationBuilderTest {
private TestPropertySource testPropertySource = new TestPropertySource(){};
@Test
public void setContext() throws Exception {
Configuration cfg = Configuration.current();
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.setConfiguration(cfg);
assertThat(b.build()).isEqualTo(cfg);
}
@Test
public void addPropertySources_Array() throws Exception {
PropertySource testPS2 = new TestPropertySource("addPropertySources_Array", 1);
ConfigurationBuilder b = new CoreConfigurationBuilder()
.addPropertySources(testPropertySource, testPS2);
Configuration cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
// Ensure no sorting happens during add, so switch ordinals!
testPS2 = new TestPropertySource("addPropertySources_Array", 1);
b = Configuration.createConfigurationBuilder()
.addPropertySources(testPS2, testPropertySource);
cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
assertThat("TestPropertySource").isEqualTo(cfg.getContext().getPropertySources().get(1).getName());
assertThat("addPropertySources_Array").isEqualTo(cfg.getContext().getPropertySources().get(0).getName());
}
@Test
public void addPropertySources_Collection() throws Exception {
PropertySource testPS2 = new TestPropertySource("addPropertySources_Collection", 1);
ConfigurationBuilder b = new CoreConfigurationBuilder()
.addPropertySources(Arrays.asList(new PropertySource[]{testPropertySource, testPS2}));
Configuration cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
assertThat("TestPropertySource").isEqualTo(cfg.getContext().getPropertySources().get(0).getName());
assertThat("addPropertySources_Collection").isEqualTo(cfg.getContext().getPropertySources().get(1).getName());
// Ensure no sorting happens during add, so switch ordinals!
testPS2 = new TestPropertySource("addPropertySources_Collection", 1);
b = Configuration.createConfigurationBuilder()
.addPropertySources(Arrays.asList(new PropertySource[]{testPS2, testPropertySource}));
cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
assertThat("TestPropertySource").isEqualTo(cfg.getContext().getPropertySources().get(1).getName());
assertThat("addPropertySources_Collection").isEqualTo(cfg.getContext().getPropertySources().get(0).getName());
}
@Test
public void removePropertySources_Array() throws Exception {
PropertySource testPS2 = new TestPropertySource("removePropertySources_Array", 1);
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertySources(testPropertySource, testPS2);
Configuration cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
b = Configuration.createConfigurationBuilder()
.addPropertySources(testPropertySource, testPS2);
b.removePropertySources(testPropertySource);
cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(1).contains(testPS2).doesNotContain(testPropertySource);
}
@Test
public void removePropertySources_Collection() throws Exception {
PropertySource testPS2 = new TestPropertySource("removePropertySources_Array", 1);
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertySources(testPropertySource, testPS2);
Configuration cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(2).contains(testPropertySource, testPS2);
b = Configuration.createConfigurationBuilder()
.addPropertySources(testPropertySource, testPS2);
b.removePropertySources(testPropertySource);
cfg = b.build();
assertThat(cfg.getContext().getPropertySources()).hasSize(1).doesNotContain(testPropertySource).contains(testPS2);
}
@Test
public void addPropertyFilters_Array() throws Exception {
PropertyFilter filter1 = (value, ctx) -> value;
PropertyFilter filter2 = (value, ctx) -> value;
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
b.addPropertyFilters(filter1, filter2);
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(2).contains(filter1, filter2);
b = Configuration.createConfigurationBuilder();
b.addPropertyFilters(filter1, filter2);
b.addPropertyFilters(filter1, filter2);
assertThat(ctx.getPropertyFilters()).hasSize(2);
}
@Test
public void addPropertyFilters_Collection() throws Exception {
PropertyFilter filter1 = (value, ctx) -> value;
PropertyFilter filter2 = (value, ctx) -> value;
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
b.addPropertyFilters(Arrays.asList(new PropertyFilter[]{filter1, filter2}));
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(2).contains(filter1, filter2);
b = Configuration.createConfigurationBuilder();
b.addPropertyFilters(filter1, filter2);
b.addPropertyFilters(filter1, filter2);
assertThat(ctx.getPropertyFilters()).hasSize(2);
}
@Test
public void removePropertyFilters_Array() throws Exception {
PropertyFilter filter1 = (value, ctx) -> value;
PropertyFilter filter2 = (value, ctx) -> value;
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyFilters(filter1, filter2);
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(2).contains(filter1, filter2);
b = Configuration.createConfigurationBuilder()
.addPropertyFilters(filter1, filter2);
b.removePropertyFilters(filter1);
cfg = b.build();
ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(1).doesNotContain(filter1).contains(filter2);
}
@Test
public void removePropertyFilters_Collection() throws Exception {
PropertyFilter filter1 = (value, ctx) -> value;
PropertyFilter filter2 = (value, ctx) -> value;
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyFilters(Arrays.asList(new PropertyFilter[]{filter1, filter2}));
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(2).contains(filter1, filter2);
b = Configuration.createConfigurationBuilder()
.addPropertyFilters(Arrays.asList(new PropertyFilter[]{filter1, filter2}));
b.removePropertyFilters(filter1);
cfg = b.build();
ctx = cfg.getContext();
assertThat(ctx.getPropertyFilters()).hasSize(1).doesNotContain(filter1).contains(filter2);
}
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void addPropertyConverters_Array() throws Exception {
PropertyConverter converter = (value, ctx) -> value.toLowerCase();
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), converter);
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).contains(converter);
assertThat(ctx.getPropertyConverters()).hasSize(1);
b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), converter);
b.addPropertyConverters(TypeLiteral.of(String.class), converter);
assertThat(ctx.getPropertyConverters()).hasSize(1);
}
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void addPropertyConverters_Collection() throws Exception {
PropertyConverter converter = (value, ctx) -> value.toLowerCase();
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class),
Arrays.<PropertyConverter<Object>>asList(new PropertyConverter[]{converter}));
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).contains(converter);
assertThat(ctx.getPropertyConverters()).hasSize(1);
b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class),
Arrays.<PropertyConverter<Object>>asList(new PropertyConverter[]{converter}));
b.addPropertyConverters(TypeLiteral.of(String.class), converter);
assertThat(ctx.getPropertyConverters()).hasSize(1);
}
@Test
@SuppressWarnings({ "rawtypes", "unchecked" })
public void removePropertyConverters_Array() throws Exception {
PropertyConverter converter = (value, ctx) -> value.toLowerCase();
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), converter);
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).hasSize(1).contains(converter);
b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), converter);
b.removePropertyConverters(TypeLiteral.of(String.class), converter);
cfg = b.build();
ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).isEmpty();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Test
public void removePropertyConverters_Collection() throws Exception {
PropertyConverter converter = (value, ctx) -> value.toLowerCase();
ConfigurationBuilder b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), Arrays.<PropertyConverter<Object>>asList(new PropertyConverter[]{converter}));
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).hasSize(1).contains(converter);
b = Configuration.createConfigurationBuilder()
.addPropertyConverters(TypeLiteral.of(String.class), Arrays.<PropertyConverter<Object>>asList(new PropertyConverter[]{converter}));
b.removePropertyConverters(TypeLiteral.of(String.class), Arrays.<PropertyConverter<Object>>asList(new PropertyConverter[]{converter}));
cfg = b.build();
ctx = cfg.getContext();
assertThat(ctx.getPropertyConverters(TypeLiteral.of(String.class))).isEmpty();
}
@Test
public void increasePriority(){
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
TestPropertySource[] propertySources = new TestPropertySource[10];
for(int i=0;i<propertySources.length;i++){
propertySources[i] = new TestPropertySource("ps"+i,i);
}
b.addPropertySources(propertySources);
b.increasePriority(propertySources[propertySources.length-1]);
for(int i=0;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
b.increasePriority(propertySources[propertySources.length-2]);
for(int i=0;i<propertySources.length-2;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
assertThat(b.getPropertySources().get(propertySources.length-2)).isEqualTo(propertySources[propertySources.length-1]);
assertThat(b.getPropertySources().get(propertySources.length-1)).isEqualTo(propertySources[propertySources.length-2]);
}
@Test
public void decreasePriority(){
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
TestPropertySource[] propertySources = new TestPropertySource[10];
for(int i=0;i<propertySources.length;i++){
propertySources[i] = new TestPropertySource("ps"+i,i);
}
b.addPropertySources(propertySources);
b.decreasePriority(propertySources[0]);
for(int i=0;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
b.decreasePriority(propertySources[1]);
for(int i=2;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
assertThat(b.getPropertySources().get(1)).isEqualTo(propertySources[0]);
assertThat(b.getPropertySources().get(0)).isEqualTo(propertySources[1]);
}
@Test
public void lowestPriority(){
// setup
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
TestPropertySource[] propertySources = new TestPropertySource[10];
for(int i=0;i<propertySources.length;i++){
propertySources[i] = new TestPropertySource("ps"+i,i);
}
b.addPropertySources(propertySources);
// test
b.lowestPriority(propertySources[0]);
for(int i=0;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
b.lowestPriority(propertySources[1]);
for(int i=2;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
assertThat(b.getPropertySources().get(1)).isEqualTo(propertySources[0]);
assertThat(b.getPropertySources().get(0)).isEqualTo(propertySources[1]);
b.lowestPriority(propertySources[5]);
assertThat(b.getPropertySources().get(0)).isEqualTo(propertySources[5]);
}
@Test
public void highestPriority(){
// setup
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
TestPropertySource[] propertySources = new TestPropertySource[10];
for(int i=0;i<propertySources.length;i++){
propertySources[i] = new TestPropertySource("ps"+i,i);
}
b.addPropertySources(propertySources);
// test
b.highestPriority(propertySources[propertySources.length-1]);
for(int i=0;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
b.highestPriority(propertySources[propertySources.length-2]);
for(int i=0;i<propertySources.length-2;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
assertThat(b.getPropertySources().get(propertySources.length-1)).isEqualTo(propertySources[propertySources.length-2]);
assertThat(b.getPropertySources().get(propertySources.length-2)).isEqualTo(propertySources[propertySources.length-1]);
b.highestPriority(propertySources[5]);
assertThat(b.getPropertySources().get(propertySources.length-1)).isEqualTo(propertySources[5]);
}
@Test
public void sortPropertySources(){
// setup
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
TestPropertySource[] propertySources = new TestPropertySource[10];
for(int i=0;i<propertySources.length;i++){
propertySources[i] = new TestPropertySource("ps"+i,i);
}
b.addPropertySources(propertySources);
Comparator<PropertySource> psComp = (o1, o2) -> o1.toString().compareTo(o2.toString());
// test
b.sortPropertySources(psComp);
Arrays.sort(propertySources, psComp);
for(int i=0;i<propertySources.length;i++){
assertThat(b.getPropertySources().get(i)).isEqualTo(propertySources[i]);
}
}
@Test
public void sortPropertyFilter(){
// setup
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
PropertyFilter[] propertyFilters = new PropertyFilter[10];
for(int i=0;i<propertyFilters.length;i++){
propertyFilters[i] = (value, ctx) -> value.setValue(toString() + " - ");
}
b.addPropertyFilters(propertyFilters);
Comparator<PropertyFilter> pfComp = (o1, o2) -> o1.toString().compareTo(o2.toString());
// test
b.sortPropertyFilter(pfComp);
Arrays.sort(propertyFilters, pfComp);
for(int i=0;i<propertyFilters.length;i++){
assertThat(b.getPropertyFilters().get(i)).isEqualTo(propertyFilters[i]);
}
}
@Test
public void build() throws Exception {
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
Configuration cfg = b.build();
ConfigurationContext ctx = cfg.getContext();
assertThat(ctx).isNotNull();
assertThat(ctx.getPropertySources()).isEmpty();
assertThat(ctx.getPropertyFilters()).isEmpty();
}
@Test
public void testRemoveAllFilters() throws Exception {
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
b.addPropertyFilters((value, ctx) -> value.setValue(toString() + " - "));
assertThat(b.getPropertyFilters()).isNotEmpty();
b.removePropertyFilters(b.getPropertyFilters());
assertThat(b.getPropertyFilters()).isEmpty();
}
@Test
public void testRemoveAllSources() throws Exception {
ConfigurationBuilder b = Configuration.createConfigurationBuilder();
b.addPropertySources(new TestPropertySource());
assertThat(b.getPropertySources()).isNotEmpty();
b.removePropertySources(b.getPropertySources());
assertThat(b.getPropertyFilters()).isEmpty();
}
}