Author: pauls Date: Tue Aug 1 09:13:21 2017 New Revision: 1803629 URL: http://svn.apache.org/viewvc?rev=1803629&view=rev Log: Add some tests for Capability and Requirements and move some util classes around.
Added: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/CapabilityMatcher.java - copied, changed from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/CapabilityMatcher.java sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/SimpleFilter.java - copied, changed from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/SimpleFilter.java sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/StringComparator.java - copied, changed from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/StringComparator.java sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/VersionRange.java - copied, changed from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/VersionRange.java sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/ sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/CapabilityMatcherTest.java Removed: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/ Modified: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestParser.java sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestUtil.java sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONReaderTest.java sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONWriterTest.java sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/U.java sling/whiteboard/cziegeler/feature-support/src/test/resources/features/test.json Modified: sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java (original) +++ sling/whiteboard/cziegeler/feature-analyser/src/main/java/org/apache/sling/feature/analyser/impl/CheckRequirementsCapabilities.java Tue Aug 1 09:13:21 2017 @@ -23,7 +23,7 @@ import org.apache.sling.feature.analyser import org.apache.sling.feature.analyser.BundleDescriptor; import org.apache.sling.feature.analyser.task.AnalyserTask; import org.apache.sling.feature.analyser.task.AnalyserTaskContext; -import org.apache.sling.feature.support.impl.CapabilityMatcher; +import org.apache.sling.feature.support.util.CapabilityMatcher; import java.util.ArrayList; import java.util.List; Copied: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/CapabilityMatcher.java (from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/CapabilityMatcher.java) URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/CapabilityMatcher.java?p2=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/CapabilityMatcher.java&p1=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/CapabilityMatcher.java&r1=1803628&r2=1803629&rev=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/CapabilityMatcher.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/CapabilityMatcher.java Tue Aug 1 09:13:21 2017 @@ -1,4 +1,4 @@ -package org.apache.sling.feature.support.impl; +package org.apache.sling.feature.support.util; import org.apache.sling.feature.Capability; import org.apache.sling.feature.Requirement; Modified: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestParser.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestParser.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestParser.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestParser.java Tue Aug 1 09:13:21 2017 @@ -18,8 +18,6 @@ package org.apache.sling.feature.support import org.apache.sling.feature.Capability; import org.apache.sling.feature.Requirement; -import org.apache.sling.feature.support.impl.SimpleFilter; -import org.apache.sling.feature.support.impl.VersionRange; import org.osgi.framework.BundleException; import org.osgi.framework.Constants; import org.osgi.framework.Version; Modified: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestUtil.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestUtil.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestUtil.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/ManifestUtil.java Tue Aug 1 09:13:21 2017 @@ -27,7 +27,9 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.function.BiConsumer; +import java.util.function.Function; import java.util.jar.JarFile; import java.util.jar.Manifest; import java.util.stream.Collectors; @@ -100,18 +102,18 @@ public class ManifestUtil { } public static void unmarshalAttribute(String key, Object value, BiConsumer<String, Object> sink) throws IOException { - unmarshal(key + "=" + value, sink); + unmarshal(key + "=" + value, Capability::getAttributes, sink); } public static void unmarshalDirective(String key, Object value, BiConsumer<String, Object> sink) throws IOException { - unmarshal(key + ":=" + value, sink); + unmarshal(key + ":=" + value, Capability::getDirectives, sink); } - private static void unmarshal(String header, BiConsumer<String, Object> sink) throws IOException { + private static void unmarshal(String header, Function<Capability, Map<String, Object>> lookup, BiConsumer<String, Object> sink) throws IOException { try { convertProvideCapabilities( normalizeCapabilityClauses(parseStandardHeader("foo;" + header), "2")) - .forEach(capability -> capability.getAttributes().forEach(sink)); + .forEach(capability -> lookup.apply(capability).forEach(sink)); } catch (Exception e) { throw new IOException(e); } Copied: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/SimpleFilter.java (from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/SimpleFilter.java) URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/SimpleFilter.java?p2=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/SimpleFilter.java&p1=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/SimpleFilter.java&r1=1803628&r2=1803629&rev=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/SimpleFilter.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/SimpleFilter.java Tue Aug 1 09:13:21 2017 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sling.feature.support.impl; +package org.apache.sling.feature.support.util; import java.util.ArrayList; import java.util.List; Copied: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/StringComparator.java (from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/StringComparator.java) URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/StringComparator.java?p2=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/StringComparator.java&p1=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/StringComparator.java&r1=1803628&r2=1803629&rev=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/StringComparator.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/StringComparator.java Tue Aug 1 09:13:21 2017 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sling.feature.support.impl; +package org.apache.sling.feature.support.util; import java.util.Comparator; Copied: sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/VersionRange.java (from r1803628, sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/VersionRange.java) URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/VersionRange.java?p2=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/VersionRange.java&p1=sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/VersionRange.java&r1=1803628&r2=1803629&rev=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/impl/VersionRange.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/main/java/org/apache/sling/feature/support/util/VersionRange.java Tue Aug 1 09:13:21 2017 @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.sling.feature.support.impl; +package org.apache.sling.feature.support.util; import org.osgi.framework.Version; Modified: sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONReaderTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONReaderTest.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONReaderTest.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONReaderTest.java Tue Aug 1 09:13:21 2017 @@ -16,13 +16,15 @@ */ package org.apache.sling.feature.support.json; +import org.apache.sling.feature.Capability; import org.apache.sling.feature.Configuration; import org.apache.sling.feature.Feature; import org.junit.Test; -import java.util.List; +import java.util.Arrays; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; @@ -40,29 +42,17 @@ public class FeatureJSONReaderTest { assertNull(feature.getId().getClassifier()); assertEquals(2, feature.getConfigurations().size()); - final Configuration cfg1 = findConfiguration(feature.getConfigurations(), "my.pid"); + final Configuration cfg1 = U.findConfiguration(feature.getConfigurations(), "my.pid"); assertEquals(7, cfg1.getProperties().get("number")); - final Configuration cfg2 = findFactoryConfiguration(feature.getConfigurations(), "my.factory.pid", "name"); + final Configuration cfg2 = U.findFactoryConfiguration(feature.getConfigurations(), "my.factory.pid", "name"); assertEquals("yeah", cfg2.getProperties().get("a.value")); - } - private Configuration findConfiguration(final List<Configuration> cfgs, final String pid) { - for(final Configuration c : cfgs) { - if ( !c.isFactoryConfiguration() && pid.equals(c.getPid()) ) { - return c; - } - } - fail("Configuration not found " + pid); - return null; - } + assertEquals(3, feature.getCapabilities().size()); + Capability capability = U.findCapability(feature.getCapabilities(),"osgi.service"); + assertNotNull(capability.getAttributes().get("objectClass")); + + assertEquals(Arrays.asList("org.osgi.service.http.runtime.HttpServiceRuntime"), capability.getAttributes().get("objectClass")); - private Configuration findFactoryConfiguration(final List<Configuration> cfgs, final String factoryid, final String name) { - for(final Configuration c : cfgs) { - if ( c.isFactoryConfiguration() && factoryid.equals(c.getFactoryPid()) && name.equals(c.getName())) { - return c; - } - } - fail("Factory Configuration not found " + factoryid + "~" + name); - return null; } + } Modified: sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONWriterTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONWriterTest.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONWriterTest.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/FeatureJSONWriterTest.java Tue Aug 1 09:13:21 2017 @@ -21,6 +21,7 @@ import org.junit.Test; import java.io.StringReader; import java.io.StringWriter; +import java.util.Arrays; import static org.junit.Assert.assertEquals; @@ -36,6 +37,8 @@ public class FeatureJSONWriterTest { } } assertEquals(feature.getId(), readFeature.getId()); + assertEquals(Arrays.asList("org.osgi.service.http.runtime.HttpServiceRuntime"), + U.findCapability(readFeature.getCapabilities(), "osgi.service").getAttributes().get("objectClass")); } } Modified: sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/U.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/U.java?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/U.java (original) +++ sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/json/U.java Tue Aug 1 09:13:21 2017 @@ -16,10 +16,16 @@ */ package org.apache.sling.feature.support.json; +import org.apache.sling.feature.Capability; +import org.apache.sling.feature.Configuration; import org.apache.sling.feature.Feature; +import org.apache.sling.feature.Requirement; import java.io.InputStreamReader; import java.io.Reader; +import java.util.List; + +import static org.junit.Assert.fail; /** Test utilities */ public class U { @@ -31,4 +37,46 @@ public class U { return FeatureJSONReader.read(reader, name); } } + + public static Configuration findConfiguration(final List<Configuration> cfgs, final String pid) { + for(final Configuration c : cfgs) { + if ( !c.isFactoryConfiguration() && pid.equals(c.getPid()) ) { + return c; + } + } + fail("Configuration not found " + pid); + return null; + } + + public static Configuration findFactoryConfiguration(final List<Configuration> cfgs, final String factoryid, final String name) { + for(final Configuration c : cfgs) { + if ( c.isFactoryConfiguration() && factoryid.equals(c.getFactoryPid()) && name.equals(c.getName())) { + return c; + } + } + fail("Factory Configuration not found " + factoryid + "~" + name); + return null; + } + + public static Capability findCapability(List<Capability> capabilities, final String namespace) { + for (Capability capability : capabilities) { + if (capability.getNamespace().equals(namespace)) { + return capability; + } + } + + fail(String.format("No Capability with namespace '%s' found", namespace)); + return null; + } + + public static Requirement findRequirement(List<Requirement> requirements, final String namespace) { + for (Requirement requirement : requirements) { + if (requirement.getNamespace().equals(namespace)) { + return requirement; + } + } + + fail(String.format("No Requirement with namespace '%s' found", namespace)); + return null; + } } Added: sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/CapabilityMatcherTest.java URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/CapabilityMatcherTest.java?rev=1803629&view=auto ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/CapabilityMatcherTest.java (added) +++ sling/whiteboard/cziegeler/feature-support/src/test/java/org/apache/sling/feature/support/util/CapabilityMatcherTest.java Tue Aug 1 09:13:21 2017 @@ -0,0 +1,17 @@ +package org.apache.sling.feature.support.util; + +import org.apache.sling.feature.Feature; +import org.apache.sling.feature.Requirement; +import org.apache.sling.feature.support.json.U; +import org.junit.Test; + +import static junit.framework.TestCase.assertTrue; + +public class CapabilityMatcherTest { + @Test public void testCapabilityMatching() throws Exception { + Feature feature = U.readFeature("test"); + Requirement requirement = U.findRequirement(feature.getRequirements(), "osgi.contract"); + assertTrue(CapabilityMatcher.matches(U.findCapability(feature.getCapabilities(), "osgi.contract"), + SimpleFilter.parse((String) requirement.getDirectives().get("filter")))); + } +} Modified: sling/whiteboard/cziegeler/feature-support/src/test/resources/features/test.json URL: http://svn.apache.org/viewvc/sling/whiteboard/cziegeler/feature-support/src/test/resources/features/test.json?rev=1803629&r1=1803628&r2=1803629&view=diff ============================================================================== --- sling/whiteboard/cziegeler/feature-support/src/test/resources/features/test.json (original) +++ sling/whiteboard/cziegeler/feature-support/src/test/resources/features/test.json Tue Aug 1 09:13:21 2017 @@ -18,7 +18,7 @@ { "namespace" : "osgi.contract", "directives" : { - "filter" : "(&(osgi.contract=JavaServlet)(version=3.1))" + "filter" : "(&(osgi.contract=JavaServlet)(&(version>=3.0)(!(version>=4.0))))" } } ], @@ -41,6 +41,17 @@ "directives" : { "uses" : "org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto" } + }, + { + "namespace" : "osgi.contract", + "attributes" : { + "osgi.contract" : "JavaServlet", + "osgi.implementation" : "osgi.http", + "version:Version" : "3.1" + }, + "directives" : { + "uses" : "org.osgi.service.http.runtime,org.osgi.service.http.runtime.dto" + } } ], "framework-properties" : {