This is an automated email from the ASF dual-hosted git repository. anatole pushed a commit to branch 0.4-incubating-vote-RC4 in repository https://gitbox.apache.org/repos/asf/incubator-tamaya-sandbox.git
commit ad67bcb15ff0797ebbc50bc7017501b2caa9a028 Author: Anatole Tresch <atsti...@gmail.com> AuthorDate: Wed Sep 11 01:25:50 2019 +0200 Added missing license headers. --- .travis.yml | 16 ++ README.md | 17 +++ jodatime/pom.xml | 2 +- .../org/apache/tamaya/metamodel/CachedFilter.java | 40 ++++- .../org/apache/tamaya/metamodel/MaskFilter.java | 23 --- .../org/apache/tamaya/metamodel/MetaContext.java | 2 +- .../org/apache/tamaya/metamodel/SecuredFilter.java | 60 ++++---- .../metamodel/internal/ComponentFactory.java | 17 --- .../apache/tamaya/metamodel/CachedFilterTest.java | 160 ++++++++++++++++++++ .../metamodel/EnabledPropertySourceTest.java | 92 ++++++++++++ .../{MaskFilterTest.java => HideFilterTest.java} | 50 +------ .../org/apache/tamaya/metamodel/MapFilterTest.java | 90 ++++++++++++ .../apache/tamaya/metamodel/MaskFilterTest.java | 14 +- .../tamaya/metamodel/MetaConfigurationTest.java | 65 ++++++++ .../apache/tamaya/metamodel/MetaContextTest.java | 163 +++++++++++++++++++++ .../apache/tamaya/metamodel/SecuredFilterTest.java | 147 +++++++++++++++++++ .../tamaya/metamodel/TestContextInializer.java | 32 ++++ .../metamodel/spi/ItemFactoryManagerTest.java | 85 +++++++++++ ....apache.tamaya.metamodel.spi.ContextInitializer | 19 +++ 19 files changed, 964 insertions(+), 130 deletions(-) diff --git a/.travis.yml b/.travis.yml index a545c25..0b9f026 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,19 @@ +// 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. language: java jdk: - openjdk8 diff --git a/README.md b/README.md index 6f338b8..4125beb 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,20 @@ +<!-- +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. +--> # Apache Tamaya (incubating) Sandbox This is the sandbox of [Apache Tamaya](https://tamaya.incubator.apache.org). diff --git a/jodatime/pom.xml b/jodatime/pom.xml index 3d21d20..995c9c8 100644 --- a/jodatime/pom.xml +++ b/jodatime/pom.xml @@ -25,7 +25,7 @@ under the License. <parent> <groupId>org.apache.tamaya.ext</groupId> <artifactId>tamaya-sandbox</artifactId> - <version>0.4-incubating-SNAPSHOT</version> + <version>0.5-incubating-SNAPSHOT</version> <relativePath>..</relativePath> </parent> diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java index 73f1388..5119eb9 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/CachedFilter.java @@ -24,6 +24,7 @@ import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; @@ -37,7 +38,8 @@ public class CachedFilter implements PropertyFilter{ private String matches; private Map<String, CachedEntry> cachedEntries = new ConcurrentHashMap<>(); private int maxSize = -1; - private long timeout = TimeUnit.MINUTES.toMillis(5); + private TimeUnit timeUnit = TimeUnit.MINUTES; + private long timeout = 5; /** * Factory for configuring immutable property filter. @@ -68,6 +70,33 @@ public class CachedFilter implements PropertyFilter{ return this; } + public CachedFilter setTimeout(long timeout){ + this.timeout = timeout; + return this; + } + + public CachedFilter setTimeUnit(TimeUnit timeUnit){ + this.timeUnit = Objects.requireNonNull(timeUnit); + return this; + } + + public TimeUnit getTimeUnit(){ + return timeUnit; + } + + public long getTimeout(){ + return timeout; + } + + public CachedFilter setMaxSize(int maxSize){ + this.maxSize = maxSize; + return this; + } + + public int getMaxSize(){ + return maxSize; + } + @Override public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ @@ -85,17 +114,17 @@ public class CachedFilter implements PropertyFilter{ * @return */ private PropertyValue resolveCachedEntry(PropertyValue value) { - if(maxSize>0 && maxSize<=this.cachedEntries.size()){ + if(maxSize>0 && maxSize<this.cachedEntries.size()){ return value; } CachedEntry ce = cachedEntries.get(value.getKey()); if(ce==null || !ce.isValid()){ if(value!=null) { - ce = new CachedEntry(value, System.currentTimeMillis() + timeout); + ce = new CachedEntry(value, System.currentTimeMillis() + timeUnit.toMillis(timeout)); this.cachedEntries.put(value.getKey(), ce); } } - return value; + return ce.value; } @Override @@ -105,6 +134,7 @@ public class CachedFilter implements PropertyFilter{ ", cache-getNumChilds=" + cachedEntries.size() + ", max-getNumChilds=" + maxSize + ", timeout=" + timeout + + ", timeUnit=" + timeUnit + '}'; } @@ -121,7 +151,7 @@ public class CachedFilter implements PropertyFilter{ } public boolean isValid(){ - return System.currentTimeMillis() > ttl; + return System.currentTimeMillis() < ttl; } } } diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java index b92be5d..82b71b7 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MaskFilter.java @@ -36,7 +36,6 @@ import java.util.Map; public class MaskFilter implements PropertyFilter{ private String matches; - private List<String> roles = new ArrayList<>(); private String mask = "*****"; private boolean filterSingleValues; private boolean filterAllValues = true; @@ -71,27 +70,6 @@ public class MaskFilter implements PropertyFilter{ return this; } - public List<String> getRoles() { - return roles; - } - - public MaskFilter setRoles(List<String> roles) { - this.roles.clear(); - for(String role:roles) { - this.roles.add(role.trim()); - } - return this; - } - - public MaskFilter setRoles(String... roles) { - return setRoles(Arrays.asList(roles)); - } - - public MaskFilter setRoles(String roles){ - setRoles(roles.split(",")); - return this; - } - public String getMask() { return mask; } @@ -134,7 +112,6 @@ public class MaskFilter implements PropertyFilter{ return "MaskFilter{" + "matches='" + matches + '\'' + ", mask='" + mask + '\'' + - ", roles='" + roles + '\'' + ", filterAllValues='" + filterAllValues + '\'' + ", filterSingleValues='" + filterSingleValues + '\'' + '}'; diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaContext.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaContext.java index d4bf5b5..d41fe0b 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaContext.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/MetaContext.java @@ -209,7 +209,7 @@ public final class MetaContext { */ public boolean checkPropertiesArePresent(String... keys){ for(String key:keys) { - if (getProperty(key, null) == null) { + if (!getProperty(key, null).isPresent()) { return false; } } diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java index e49b170..4f43d47 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/SecuredFilter.java @@ -24,10 +24,8 @@ import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyFilter; import org.apache.tamaya.spi.PropertyValue; -import javax.security.auth.Subject; -import java.security.AccessController; -import java.security.Principal; -import java.util.Map; +import java.util.*; +import java.util.function.Supplier; import java.util.logging.Logger; /** @@ -40,8 +38,8 @@ public class SecuredFilter implements PropertyFilter{ private static final Logger LOG = Logger.getLogger(SecuredFilter.class.getName()); private String matches; - private String roles; - private String[]rolesArray; + private Set<String> roles = new HashSet<>(); + private Supplier<Set<String>> roleSupplier = () -> null; private SecurePolicy policy = SecurePolicy.HIDE; /** @@ -73,13 +71,16 @@ public class SecuredFilter implements PropertyFilter{ return this; } - public String getRoles() { - return roles; + public Set<String> getRoles() { + return Collections.unmodifiableSet(roles); } - public SecuredFilter setRoles(String roles) { - this.roles = roles; - this.rolesArray = roles.split(","); + public SecuredFilter setRoles(String... roles) { + return setRoles(Arrays.asList(roles)); + } + + public SecuredFilter setRoles(Collection<String> roles) { + this.roles.addAll(roles); return this; } @@ -92,6 +93,14 @@ public class SecuredFilter implements PropertyFilter{ return this; } + public Supplier<Set<String>> getRoleSupplier() { + return roleSupplier; + } + + public void setRoleSupplier(Supplier<Set<String>> roleSupplier) { + this.roleSupplier = Objects.requireNonNull(roleSupplier); + } + @Override public PropertyValue filterProperty(PropertyValue value, FilterContext context) { if(matches !=null){ @@ -99,24 +108,25 @@ public class SecuredFilter implements PropertyFilter{ return value; } } - Subject s = javax.security.auth.Subject.getSubject(AccessController.getContext()); - for(Principal principal:s.getPrincipals()){ - for(String role:rolesArray) { - if(principal.getName().equals(role)){ + Set<String> assignedRoles = this.roleSupplier.get(); + if(assignedRoles!=null) { + for (String role : this.roles) { + if (assignedRoles.contains(role)) { return value; } } + switch (policy) { + case THROW_EXCPETION: + throw new ConfigException("Unauthorized access to '" + value.getKey() + "', not in " + roles); + case WARN_ONLY: + LOG.warning("Unauthorized access to '" + value.getKey() + "', not in " + roles); + return value; + case HIDE: + default: + return null; + } } - switch(policy){ - case THROW_EXCPETION: - throw new ConfigException("Unauthorized access to '"+value.getKey()+"', not in " + roles); - case WARN_ONLY: - LOG.warning("Unauthorized access to '"+value.getKey()+"', not in " + roles); - return value; - case HIDE: - default: - return null; - } + return value; } @Override diff --git a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentFactory.java b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentFactory.java index 59d4b69..9cf492a 100644 --- a/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentFactory.java +++ b/metamodel/src/main/java/org/apache/tamaya/metamodel/internal/ComponentFactory.java @@ -80,23 +80,6 @@ public final class ComponentFactory<T> { return comp; } -// public Collection<T> loadInstances(NodeList nodeList) { -// List<T> items = new ArrayList<>(); -// for(int i=0;i<nodeList.getLength();i++){ -// Node node = nodeList.item(i); -// if(node.getNodeName().equals("filter")){ -// String type = node.getNodeValue(); -// try { -// T item = getComponent(type); -// ComponentConfigurator.configure(item, node); -// items.addPropertyValue(item); -// } catch (Exception e) { -// e.printStackTrace(); -// } -// } -// } -// return items; -// } @Override public String toString() { diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/CachedFilterTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/CachedFilterTest.java new file mode 100644 index 0000000..d3696aa --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/CachedFilterTest.java @@ -0,0 +1,160 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.spi.PropertyValue; +import org.junit.Test; + +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class CachedFilterTest { + + @Test + public void getSetMatches() { + CachedFilter filter = new CachedFilter(); + assertThat(filter.getMatches()).isNull(); + filter.setMatches("foo"); + assertThat(filter.getMatches()).isNotNull().isEqualTo("foo"); + } + + @Test + public void getSetMaxSize() { + CachedFilter filter = new CachedFilter(); + assertThat(filter.getMaxSize()).isEqualTo(-1); + filter.setMaxSize(10); + assertThat(filter.getMaxSize()).isEqualTo(10); + } + + @Test + public void getSetTimeout() { + CachedFilter filter = new CachedFilter(); + assertThat(filter.getTimeout()).isEqualTo(5); + filter.setTimeout(10); + assertThat(filter.getTimeout()).isEqualTo(10); + } + + @Test + public void getSetTineUnit() { + CachedFilter filter = new CachedFilter(); + assertThat(filter.getTimeUnit()).isEqualTo(TimeUnit.MINUTES); + assertThat(filter.setTimeUnit(TimeUnit.HOURS)).isSameAs(filter); + assertThat(filter.getTimeUnit()).isEqualTo(TimeUnit.HOURS); + } + + @Test + public void filterNullProperty() { + CachedFilter filter = new CachedFilter(); + PropertyValue val = filter.filterProperty(null, null); + assertThat(val).isNull(); + } + + @Test + public void filterExceedingProperty() { + CachedFilter filter = new CachedFilter(); + filter.setMatches(".*"); + filter.setMaxSize(1); + PropertyValue val = PropertyValue.createValue("a", "b"); + PropertyValue cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + PropertyValue val2 = PropertyValue.createValue("a", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + // exceeding property is not cached anymore + val = PropertyValue.createValue("b", "b"); + cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + val2 = PropertyValue.createValue("b", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val2); + } + + @Test + public void filterWithTimeout() throws InterruptedException { + CachedFilter filter = new CachedFilter(); + filter.setMatches(".*"); + filter.setTimeout(50).setTimeUnit(TimeUnit.MILLISECONDS); + PropertyValue val = PropertyValue.createValue("a", "b"); + PropertyValue cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + PropertyValue val2 = PropertyValue.createValue("a", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + // After timeout cache entry is renewed... + Thread.sleep(100L); + val = PropertyValue.createValue("a", "b3"); + cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + val2 = PropertyValue.createValue("a", "b4"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + } + + @Test + public void filterMacthingProperty() { + CachedFilter filter = new CachedFilter(); + filter.setMatches("a"); + PropertyValue val = PropertyValue.createValue("a", "b"); + PropertyValue cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + PropertyValue val2 = PropertyValue.createValue("a", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + } + + @Test + public void filterMacthingPropertyExpression() { + CachedFilter filter = new CachedFilter(); + filter.setMatches("a.*"); + PropertyValue val = PropertyValue.createValue("a", "b"); + PropertyValue cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + PropertyValue val2 = PropertyValue.createValue("a", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + + val = PropertyValue.createValue("a2", "b"); + cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + val2 = PropertyValue.createValue("a2", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val); + + val = PropertyValue.createValue("b", "b"); + cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + val2 = PropertyValue.createValue("b", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val2); + } + + @Test + public void filterNonMacthingProperty() { + CachedFilter filter = new CachedFilter(); + filter.setMatches("b"); + PropertyValue val = PropertyValue.createValue("a", "b"); + PropertyValue cached = filter.filterProperty(val, null); + assertThat(cached).isNotNull().isEqualTo(val); + PropertyValue val2 = PropertyValue.createValue("a", "b2"); + cached = filter.filterProperty(val2, null); + assertThat(cached).isNotNull().isEqualTo(val2); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/EnabledPropertySourceTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/EnabledPropertySourceTest.java new file mode 100644 index 0000000..282e75a --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/EnabledPropertySourceTest.java @@ -0,0 +1,92 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.spisupport.propertysource.SystemPropertySource; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class EnabledPropertySourceTest { + + private SystemPropertySource systemPropertySource = new SystemPropertySource(); + private EnabledPropertySource enabledPropertySource = new EnabledPropertySource( + systemPropertySource, "true" + ); + + @Test + public void calculateEnabled() { + assertThat(enabledPropertySource.calculateEnabled()).isTrue(); + enabledPropertySource = new EnabledPropertySource( + systemPropertySource, "false" + ); + assertThat(enabledPropertySource.calculateEnabled()).isFalse(); + } + + @Test + public void setEnabled() { + enabledPropertySource.setEnabled(false); + assertThat(enabledPropertySource.isEnabled()); + enabledPropertySource.setEnabled(true); + assertThat(enabledPropertySource.isEnabled()); + + } + + @Test + public void getOrdinal() { + assertThat(enabledPropertySource.getOrdinal()).isEqualTo(systemPropertySource.getOrdinal()); + + } + + @Test + public void getName() { + assertThat(enabledPropertySource.getName()).isEqualTo(systemPropertySource.getName()); + } + + @Test + public void get() { + assertThat(enabledPropertySource.get("java.version")).isEqualTo(systemPropertySource.get("java.version")); + enabledPropertySource.setEnabled(false); + assertThat(enabledPropertySource.get("java.version")).isNull(); + } + + @Test + public void getProperties() { + assertThat(enabledPropertySource.getProperties()).isEqualTo(systemPropertySource.getProperties()); + enabledPropertySource.setEnabled(false); + assertThat(enabledPropertySource.getProperties()).isEmpty(); + } + + @Test + public void isScannable() { + assertThat(enabledPropertySource.isScannable()).isTrue(); + } + + @Test + public void testToString() { + assertThat(enabledPropertySource.toString()).isNotNull().isEqualTo("EnabledPropertySource{\n" + + " enabled=true\n" + + " wrapped=SystemPropertySource{ defaultOrdinal=1000\n" + + " ordinal=null\n" + + " disabled=false\n" + + " name='system-properties'\n" + + "}}"); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/HideFilterTest.java similarity index 53% copy from metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java copy to metamodel/src/test/java/org/apache/tamaya/metamodel/HideFilterTest.java index 9d30b49..9e9a294 100644 --- a/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/HideFilterTest.java @@ -23,74 +23,34 @@ import org.apache.tamaya.spi.FilterContext; import org.apache.tamaya.spi.PropertyValue; import org.junit.Test; -import java.util.Arrays; import java.util.Collections; import static org.assertj.core.api.Assertions.assertThat; -public class MaskFilterTest { +public class HideFilterTest { + + private HideFilter filter = new HideFilter(); @Test public void getSetMatches() { - MaskFilter filter = new MaskFilter(); filter.setMatches("*.SEC"); assertThat(filter.getMatches()).isNotNull().isEqualTo("*.SEC"); } @Test - public void getSetRoles() { - MaskFilter filter = new MaskFilter(); - filter.setRoles("a", "b"); - assertThat(Arrays.asList("a", "b")).isEqualTo(filter.getRoles()); - - filter = new MaskFilter(); - filter.setRoles(Arrays.asList("a", "b")); - assertThat(Arrays.asList("a", "b")).isEqualTo(filter.getRoles()); - } - - @Test - public void getSetMask() { - MaskFilter filter = new MaskFilter(); - filter.setMask("*"); - assertThat(filter.getMask()).isEqualTo("*"); - } - - @Test - public void setGetFilterAllValues() { - MaskFilter filter = new MaskFilter(); - filter.setFilterAllValues(true); - assertThat(filter.isFilterAllValues()).isTrue(); - } - - @Test - public void setGetFilterSingleValues() { - MaskFilter filter = new MaskFilter(); - filter.setFilterSingleValues(true); - assertThat(filter.isFilterSingleValues()).isTrue(); - } - - - @Test public void filterProperty() { - MaskFilter filter = new MaskFilter(); filter.setMatches(".*\\.SEC"); assertThat(filter.getMatches()).isEqualTo(".*\\.SEC"); PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); PropertyValue filtered = filter.filterProperty(value, new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY)); - assertThat(filtered).isNotNull(); - assertThat(filtered.getValue()).isNotNull().isEqualTo("*****"); + assertThat(filtered).isNull(); } @Test public void testToString() { - MaskFilter filter = new MaskFilter(); filter.setMatches(".*\\.SEC"); - filter.setMask("*****"); - filter.setFilterSingleValues(true); - filter.setMask("123"); - assertThat(filter.toString()).isEqualTo("MaskFilter{matches='.*\\.SEC', mask='123', roles='[]', filterAllValues='true', " + - "filterSingleValues='true'}"); + assertThat(filter.toString()).isEqualTo("HideFilter{matches='.*\\.SEC'}"); } } \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/MapFilterTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/MapFilterTest.java new file mode 100644 index 0000000..f1218ac --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/MapFilterTest.java @@ -0,0 +1,90 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.spi.PropertyValue; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class MapFilterTest { + + private MapFilter filter = new MapFilter(); + + @Test + public void getSetTarget() { + assertThat(filter.getTarget()).isNull(); + filter.setTarget("target:"); + assertThat(filter.getTarget()).isEqualTo("target:"); + } + + @Test + public void getSetCutoff() { + assertThat(filter.getCutoff()).isNull(); + filter.setCutoff("cutoff"); + assertThat(filter.getCutoff()).isEqualTo("cutoff"); + } + + @Test + public void getSetMatches() { + filter.setMatches("*.SEC"); + assertThat(filter.getMatches()).isNotNull().isEqualTo("*.SEC"); + } + + @Test + public void filterProperty_NoMap() { + PropertyValue pv = PropertyValue.createValue("k", "v"); + PropertyValue value = filter.filterProperty(pv, null); + assertThat(value).isNotNull().isEqualTo(pv); + } + + @Test + public void filterProperty_Mapped() { + PropertyValue pv = PropertyValue.createValue("k", "v"); + filter.setTarget("a:"); + PropertyValue value = filter.filterProperty(pv, null); + assertThat(value).isNotNull().isEqualTo(PropertyValue.createValue("a:k", "v")); + } + + @Test + public void filterProperty_Cutoff() { + PropertyValue pv = PropertyValue.createValue("a.b:k", "v"); + filter.setCutoff("a.b:"); + PropertyValue value = filter.filterProperty(pv, null); + assertThat(value).isNotNull().isEqualTo(PropertyValue.createValue("k", "v")); + } + + @Test + public void filterProperty_CutoffAndTarget() { + PropertyValue pv = PropertyValue.createValue("a.b:k", "v"); + filter.setCutoff("a.b:"); + filter.setTarget("new."); + PropertyValue value = filter.filterProperty(pv, null); + assertThat(value).isNotNull().isEqualTo(PropertyValue.createValue("new.k", "v")); + } + + + @Test + public void testToString() { + assertThat(filter.toString()).isNotNull().isEqualTo("MapFilter{target='null', cutoff='null', matches='null'}"); + filter.setTarget("tgt").setCutoff("cutoff").setMatches("matches"); + assertThat(filter.toString()).isNotNull().isEqualTo("MapFilter{target='tgt', cutoff='cutoff', matches='matches'}"); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java index 9d30b49..fa96d47 100644 --- a/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/MaskFilterTest.java @@ -39,17 +39,6 @@ public class MaskFilterTest { } @Test - public void getSetRoles() { - MaskFilter filter = new MaskFilter(); - filter.setRoles("a", "b"); - assertThat(Arrays.asList("a", "b")).isEqualTo(filter.getRoles()); - - filter = new MaskFilter(); - filter.setRoles(Arrays.asList("a", "b")); - assertThat(Arrays.asList("a", "b")).isEqualTo(filter.getRoles()); - } - - @Test public void getSetMask() { MaskFilter filter = new MaskFilter(); filter.setMask("*"); @@ -90,7 +79,6 @@ public class MaskFilterTest { filter.setMask("*****"); filter.setFilterSingleValues(true); filter.setMask("123"); - assertThat(filter.toString()).isEqualTo("MaskFilter{matches='.*\\.SEC', mask='123', roles='[]', filterAllValues='true', " + - "filterSingleValues='true'}"); + assertThat(filter.toString()).isEqualTo("MaskFilter{matches='.*\\.SEC', mask='123', filterAllValues='true', filterSingleValues='true'}"); } } \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaConfigurationTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaConfigurationTest.java new file mode 100644 index 0000000..4664267 --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaConfigurationTest.java @@ -0,0 +1,65 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.Configuration; +import org.apache.tamaya.spi.ConfigurationBuilder; +import org.junit.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class MetaConfigurationTest { + + @Test + public void configure() { + Configuration config = Configuration.current(); + MetaConfiguration.configure(); + Configuration config2 = Configuration.current(); + assertThat(config).isNotEqualTo(config2); + } + + @Test + public void configure_with_URL() { + Configuration config = Configuration.current(); + MetaConfiguration.configure(getClass().getResource("/integrationTests/empty-config.conf")); + Configuration config2 = Configuration.current(); + assertThat(config).isNotEqualTo(config2); + assertThat(config2.getContext().getPropertySources()).isEmpty(); + assertThat(config2.getContext().getPropertyConverters()).isEmpty(); + assertThat(config2.getContext().getPropertyFilters()).isEmpty(); + } + + @Test + public void createConfigBuilder() { + ConfigurationBuilder builder = MetaConfiguration.createConfigBuilder( + getClass().getResource("/integrationTests/empty-config.conf")); + assertThat(builder).isNotNull(); + assertThat(builder.getPropertySources()).isEmpty(); + assertThat(builder.getPropertyConverter()).isEmpty(); + assertThat(builder.getPropertyFilters()).isEmpty(); + } + + @Test + public void createConfiguration() { + Configuration config = MetaConfiguration.createConfiguration(getClass().getResource("/integrationTests/empty-config.conf")); + assertThat(config.getContext().getPropertySources()).isEmpty(); + assertThat(config.getContext().getPropertyConverters()).isEmpty(); + assertThat(config.getContext().getPropertyFilters()).isEmpty(); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaContextTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaContextTest.java new file mode 100644 index 0000000..a165409 --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/MetaContextTest.java @@ -0,0 +1,163 @@ +/* + * 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.metamodel; + +import org.junit.Test; + +import java.net.URL; +import java.net.URLClassLoader; +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class MetaContextTest { + + @Test + public void getInstance() { + assertThat(MetaContext.getInstance()).isNotNull(); + } + + @Test + public void getId() { + assertThat(MetaContext.getInstance().getId()).isNotNull().isNotEmpty(); + } + + @Test + public void initialize() { + MetaContext meta = new MetaContext(); + meta.initialize(); + assertThat(meta.getProperty("key", String.class)).isEqualTo(Optional.of("value")); + } + + @Test + public void initialize_WithClassLoader() { + MetaContext meta = new MetaContext(); + meta.initialize(new URLClassLoader(new URL[0])); + assertThat(meta.getProperty("key", String.class)).isEqualTo(Optional.of("value")); + } + + @Test + public void combineWith() { + MetaContext meta = new MetaContext(); + meta.initialize(); + MetaContext meta2 = new MetaContext(); + meta2.setProperty("foo", String.class, "bar"); + meta.initialize(new URLClassLoader(new URL[0])); + MetaContext meta3 = meta.combineWith(meta2); + assertThat(meta3.getProperty("key", String.class)).isEqualTo(Optional.of("value")); + assertThat(meta3.getProperty("foo", String.class)).isEqualTo(Optional.of("bar")); + assertThat(meta2.getProperty("key", String.class)).isEqualTo(Optional.empty()); + assertThat(meta.getProperty("foo", String.class)).isEqualTo(Optional.empty()); + } + + @Test + public void getStringProperty() { + assertThat(MetaContext.getInstance().getProperty("key", String.class)).isEqualTo(Optional.of("value")); + } + + @Test + public void getBooleanProperty() { + assertThat(MetaContext.getInstance().getProperty("boolean", boolean.class)).isEqualTo(Optional.of(true)); + } + + @Test + public void getNumberProperty() { + assertThat(MetaContext.getInstance().getProperty("int", Number.class)).isEqualTo(Optional.of(Integer.valueOf(1))); + } + + @Test + public void getProperty() { + assertThat(MetaContext.getInstance().getProperty("key", String.class)).isNotNull(); + } + + @Test + public void setStringProperty() { + MetaContext.getInstance().setStringProperty("a", "b"); + assertThat(MetaContext.getInstance().getProperty("key", String.class)).isEqualTo(Optional.of("value")); + assertThat(MetaContext.getInstance().getProperty("a", String.class)).isEqualTo(Optional.of("b")); + } + + @Test + public void setBooleanProperty() { + assertThat(MetaContext.getInstance().getProperty("boolean", Boolean.class)).isEqualTo(Optional.of(true)); + } + + @Test + public void setNumberProperty() { + assertThat(MetaContext.getInstance().getProperty("int", Number.class)).isEqualTo(Optional.of(Integer.valueOf(1))); + } + + @Test + public void setProperty() { + MetaContext.getInstance().setProperty("test", String.class, "testValue"); + assertThat(MetaContext.getInstance().getProperty("test", String.class)).isEqualTo(Optional.of("testValue")); + } + + @Test + public void setPropertyIfAbsent() { + MetaContext.getInstance().setPropertyIfAbsent("test", String.class, "testValue"); + assertThat(MetaContext.getInstance().getProperty("test", String.class)).isEqualTo(Optional.of("testValue")); + MetaContext.getInstance().setPropertyIfAbsent("test", String.class, "testValue2"); + assertThat(MetaContext.getInstance().getProperty("test", String.class)).isEqualTo(Optional.of("testValue")); + } + + @Test + public void checkPropertiesArePresent() { + assertThat(MetaContext.getInstance().checkPropertiesArePresent()).isTrue(); + assertThat(MetaContext.getInstance().checkPropertiesArePresent("boolean", "int", "key")).isTrue(); + assertThat(MetaContext.getInstance().checkPropertiesArePresent("boolean", "boolean")).isTrue(); + assertThat(MetaContext.getInstance().checkPropertiesArePresent("boolean", "int", "foo")).isFalse(); + assertThat(MetaContext.getInstance().checkPropertiesArePresent("foo")).isFalse(); + } + + @Test + public void getProperties() { + assertThat(MetaContext.getInstance().getProperties()) + .containsEntry("int", 1) + .containsEntry("boolean", true) + .containsEntry("key", "value"); + } + + @Test + public void testEquals() { + MetaContext meta = new MetaContext(); + meta.initialize(); + MetaContext meta2 = new MetaContext(); + meta2.initialize(); + assertThat(meta).isNotEqualTo(meta2); + } + + @Test + public void testHashCode() { + MetaContext meta = new MetaContext(); + meta.initialize(); + MetaContext meta2 = new MetaContext(); + meta2.initialize(); + assertThat(meta.hashCode()).isNotEqualTo(meta2.hashCode()); + } + + @Test + public void testToString() { + assertThat(MetaContext.getInstance().toString()).isNotNull() + .contains("properties={boolean=true, test=testValue") + .contains("float=23.45, key=value, int=1") + .contains("MetaContext"); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/SecuredFilterTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/SecuredFilterTest.java new file mode 100644 index 0000000..58576f6 --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/SecuredFilterTest.java @@ -0,0 +1,147 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.ConfigException; +import org.apache.tamaya.functions.Supplier; +import org.apache.tamaya.spi.ConfigurationContext; +import org.apache.tamaya.spi.FilterContext; +import org.apache.tamaya.spi.PropertyValue; +import org.junit.Test; + +import java.security.Security; +import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class SecuredFilterTest { + + private Set<String> testRoles = new HashSet<>(Collections.singletonList("test")); + + @Test + public void getSetMatches() { + SecuredFilter filter = new SecuredFilter(); + filter.setMatches("*.SEC"); + assertThat(filter.getMatches()).isNotNull().isEqualTo("*.SEC"); + } + + @Test + public void getSetRoleSupplier() { + Supplier<Set<String>> testSupplier = () -> testRoles; + SecuredFilter filter = new SecuredFilter(); + assertThat(filter.getRoleSupplier()).isNotNull(); + assertThat(filter.getRoleSupplier().get()).isNull(); + filter.setRoleSupplier(testSupplier); + assertThat(filter.getRoleSupplier()).isEqualTo(testSupplier); + } + + @Test + public void getSetRoles() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoles("myrole"); + assertThat(filter.getRoles()).containsExactly("myrole"); + } + + @Test + public void setGetPolicy() { + SecuredFilter filter = new SecuredFilter(); + filter.setPolicy(SecuredFilter.SecurePolicy.HIDE); + assertThat(filter.getPolicy()).isEqualTo(SecuredFilter.SecurePolicy.HIDE); + } + + @Test + public void filterProperty_Hide() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoleSupplier(() -> testRoles); + filter.setRoles("test2"); + filter.setPolicy(SecuredFilter.SecurePolicy.HIDE); + filter.setMatches(".*\\.SEC"); + assertThat(filter.getMatches()).isEqualTo(".*\\.SEC"); + PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); + PropertyValue filtered = filter.filterProperty(value, + new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY)); + assertThat(filtered).isNull(); + } + + @Test + public void filterProperty_ThrowException_matching() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoleSupplier(() -> testRoles); + filter.setRoles("test"); + filter.setPolicy(SecuredFilter.SecurePolicy.THROW_EXCPETION); + filter.setMatches(".*\\.SEC"); + assertThat(filter.getMatches()).isEqualTo(".*\\.SEC"); + PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); + assertThat(filter.filterProperty(value, + new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY))) + .isEqualTo(value); + } + + @Test(expected = ConfigException.class) + public void filterProperty_ThrowException() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoleSupplier(() -> testRoles); + filter.setRoles("test2"); + filter.setPolicy(SecuredFilter.SecurePolicy.THROW_EXCPETION); + filter.setMatches(".*\\.SEC"); + assertThat(filter.getMatches()).isEqualTo(".*\\.SEC"); + PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); + filter.filterProperty(value, + new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY)); + } + + @Test + public void filterProperty_Warn() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoleSupplier(() -> testRoles); + filter.setRoles("test2"); + filter.setPolicy(SecuredFilter.SecurePolicy.WARN_ONLY); + filter.setMatches(".*\\.SEC"); + assertThat(filter.getMatches()).isEqualTo(".*\\.SEC"); + PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); + PropertyValue filtered = filter.filterProperty(value, + new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY)); + assertThat(filtered).isNotNull(); + assertThat(filtered.getValue()).isNotNull().isEqualTo("someValue"); + } + + @Test + public void filterProperty_NoRoleSupplier() { + SecuredFilter filter = new SecuredFilter(); + filter.setRoles("test"); + filter.setPolicy(SecuredFilter.SecurePolicy.THROW_EXCPETION); + filter.setMatches(".*\\.SEC"); + PropertyValue value = PropertyValue.createValue("foo.SEC", "someValue"); + assertThat(filter.filterProperty(value, + new FilterContext(value, Collections.emptyMap(), ConfigurationContext.EMPTY))) + .isEqualTo(value); + } + + @Test + public void testToString() { + SecuredFilter filter = new SecuredFilter(); + filter.setMatches(".*\\.SEC"); + filter.setPolicy(SecuredFilter.SecurePolicy.HIDE); + assertThat(filter.toString()).isEqualTo("SecuredFilter{matches='.*\\.SEC', roles='[]', policy='HIDE'}"); + } +} \ No newline at end of file diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/TestContextInializer.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/TestContextInializer.java new file mode 100644 index 0000000..f290b0b --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/TestContextInializer.java @@ -0,0 +1,32 @@ +/* + * 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.metamodel; + +import org.apache.tamaya.metamodel.spi.ContextInitializer; + +public class TestContextInializer implements ContextInitializer { + @Override + public void initializeContext(MetaContext metaContext) { + metaContext.setProperty("key", String.class, "value"); + metaContext.setProperty("int", Integer.class, Integer.valueOf(1)); + metaContext.setProperty("float", Float.class, 23.45F); + metaContext.setProperty("boolean", Boolean.class, true); + + } +} diff --git a/metamodel/src/test/java/org/apache/tamaya/metamodel/spi/ItemFactoryManagerTest.java b/metamodel/src/test/java/org/apache/tamaya/metamodel/spi/ItemFactoryManagerTest.java new file mode 100644 index 0000000..29c8206 --- /dev/null +++ b/metamodel/src/test/java/org/apache/tamaya/metamodel/spi/ItemFactoryManagerTest.java @@ -0,0 +1,85 @@ +/* + * 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.metamodel.spi; + +import org.apache.tamaya.metamodel.internal.factories.SysPropertiesFactory; +import org.apache.tamaya.spi.PropertySource; +import org.apache.tamaya.spi.PropertyValue; +import org.junit.Test; + +import java.util.Collections; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class ItemFactoryManagerTest { + + @Test + public void getInstance() { + assertThat(ItemFactoryManager.getInstance()).isNotNull(); + } + + @Test + public void getType() { + assertThat(ItemFactoryManager.getType(PropertyValue.createObject())).isNull(); + assertThat(ItemFactoryManager.getType(PropertyValue.createObject().setValue("type", "test"))) + .isNotNull().isEqualTo("test"); + assertThat(ItemFactoryManager.getType(PropertyValue.createObject().setValue("class", "test"))) + .isNotNull().isEqualTo("test"); + } + + @Test + public void getFactories() { + assertThat(ItemFactoryManager.getInstance().getFactories(PropertySource.class)) + .isNotEmpty() + .hasSize(9); + } + + @Test + public void getFactory() { + ItemFactory ifact = new SysPropertiesFactory(); + assertThat(ItemFactoryManager.getInstance().getFactory(PropertySource.class, ifact.getName())) + .isNotNull(); + } + + @Test + public void registerItemFactory() { + ItemFactory ifact = new ItemFactory(){ + @Override + public String getName() { + return "foo"; + } + + @Override + public Class getType() { + return String.class; + } + + @Override + public Object create(Map parameters) { + return Collections.emptyMap(); + } + }; + ItemFactoryManager.getInstance().registerItemFactory(ifact); + assertThat(ItemFactoryManager.getInstance().getFactory(String.class, ifact.getName())) + .isNotNull() + .isEqualTo(ifact); + } +} \ No newline at end of file diff --git a/metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ContextInitializer b/metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ContextInitializer new file mode 100644 index 0000000..5eefb34 --- /dev/null +++ b/metamodel/src/test/resources/META-INF/services/org.apache.tamaya.metamodel.spi.ContextInitializer @@ -0,0 +1,19 @@ +# +# 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. +# +org.apache.tamaya.metamodel.TestContextInializer \ No newline at end of file