This is an automated email from the ASF dual-hosted git repository. bdelacretaz pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git
commit cdf3410b8f91699dc540ad1e0c5ee37b4aa7de0e Author: Bertrand Delacretaz <[email protected]> AuthorDate: Wed Jun 20 15:28:11 2018 +0200 Add CapabilitesServletTest --- capabilities/pom.xml | 12 ++++ .../capabilities/internal/CapabilitiesServlet.java | 3 + .../demo/OsgiFrameworkCapabilitiesSource.java | 61 ----------------- .../internal/CapabilitesServletTest.java | 78 ++++++++++------------ .../internal/JSONCapabilitiesWriterTest.java | 39 ++--------- .../sling/capabilities/internal/MockSource.java} | 43 ++++++------ 6 files changed, 77 insertions(+), 159 deletions(-) diff --git a/capabilities/pom.xml b/capabilities/pom.xml index d201d81..c566b9e 100644 --- a/capabilities/pom.xml +++ b/capabilities/pom.xml @@ -104,6 +104,18 @@ <scope>test</scope> </dependency> <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.testing.osgi-mock</artifactId> + <version>2.3.8</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.sling</groupId> + <artifactId>org.apache.sling.testing.sling-mock</artifactId> + <version>2.2.18</version> + <scope>test</scope> + </dependency> + <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java index 53e6e36..35e2819 100644 --- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java +++ b/capabilities/src/main/java/org/apache/sling/capabilities/internal/CapabilitiesServlet.java @@ -48,6 +48,9 @@ public class CapabilitiesServlet extends SlingSafeMethodsServlet { policyOption=ReferencePolicyOption.GREEDY) volatile List<CapabilitiesSource> sources; + CapabilitiesServlet() { + } + @Override protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServletException, IOException { response.setContentType("application/json"); diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java b/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java deleted file mode 100644 index fd0ed5a..0000000 --- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java +++ /dev/null @@ -1,61 +0,0 @@ -/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~ 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.sling.capabilities.internal.demo; - -import java.util.HashMap; -import java.util.Map; -import org.osgi.service.component.annotations.Component; -import org.apache.sling.capabilities.CapabilitiesSource; -import org.osgi.framework.Bundle; -import org.osgi.framework.BundleContext; -import org.osgi.framework.Constants; -import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Activate; - -/** - * Builds Probes that provide basic JVM information, as an example. - */ -@Component(service = CapabilitiesSource.class) -public class OsgiFrameworkCapabilitiesSource implements CapabilitiesSource { - - private BundleContext bundleContext; - - @Activate - public void activate(ComponentContext ctx) { - bundleContext = ctx.getBundleContext(); - } - - @Override - public String getNamespace() { - return "org.apache.sling.capabilities.DEMO." + getClass().getSimpleName(); - } - - @Override - public Map<String, Object> getCapabilities() throws Exception { - final Map<String, Object> result = new HashMap<>(); - - final Bundle frameworkBundle = bundleContext.getBundle(0); - - result.put("framework.bundle.symbolic.name", frameworkBundle.getSymbolicName()); - result.put("framework.bundle.version", frameworkBundle.getHeaders(Constants.BUNDLE_VERSION).get(Constants.BUNDLE_VERSION).toString()); - - - return result; - } -} \ No newline at end of file diff --git a/capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java b/capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java index 78e6b75..80017e0 100644 --- a/capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java +++ b/capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java @@ -20,63 +20,59 @@ package org.apache.sling.capabilities.internal; import java.io.IOException; import java.io.StringReader; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; +import javax.servlet.ServletException; +import org.apache.sling.api.resource.ResourceResolver; +import org.apache.sling.api.servlets.SlingSafeMethodsServlet; import org.apache.sling.capabilities.CapabilitiesSource; -import static org.junit.Assert.assertEquals; +import org.apache.sling.servlethelpers.MockSlingHttpServletRequest; +import org.apache.sling.servlethelpers.MockSlingHttpServletResponse; +import org.apache.sling.testing.mock.osgi.MockOsgi; +import org.junit.Before; +import org.junit.Rule; import org.junit.Test; +import org.apache.sling.testing.mock.osgi.junit.OsgiContext; +import org.apache.sling.testing.mock.sling.MockSling; +import static org.junit.Assert.assertEquals; +import org.osgi.framework.BundleContext; /** Test the JSONCapabilitiesWriter */ -public class JSONCapabilitiesWriterTest { +public class CapabilitesServletTest { - static class TestSource implements CapabilitiesSource { - private final String namespace; - private final Map<String, Object> props = new HashMap<>(); - - TestSource(String namespace, int propsCount) { - this.namespace = namespace; - for(int i=0; i < propsCount; i++) { - props.put("KEY_" + i + "_" + namespace, "VALUE_" + i + "_" + namespace); - } - } + private SlingSafeMethodsServlet servlet; - @Override - public Map<String, Object> getCapabilities() throws Exception { - return Collections.unmodifiableMap(props); - } + @Rule + public final OsgiContext context = new OsgiContext(); + + private BundleContext bundleContext; + + @Before + public void setup() { + servlet = new CapabilitiesServlet(); + bundleContext = MockOsgi.newBundleContext(); - @Override - public String getNamespace() { - return namespace; - } + bundleContext.registerService(CapabilitiesSource.class.getName(), new MockSource("F", 2), null); + bundleContext.registerService(CapabilitiesSource.class.getName(), new MockSource("G", 43), null); + MockOsgi.injectServices(servlet, bundleContext); } @Test - public void testWithTwoSources() throws IOException { - final List<CapabilitiesSource> sources = new ArrayList<>(); - sources.add(new TestSource("A", 2)); - sources.add(new TestSource("B", 1)); - - final StringWriter w = new StringWriter(); - new JSONCapabilitiesWriter().writeJson(w, sources); + public void testServlet() throws ServletException, IOException { + final ResourceResolver resolver = MockSling.newResourceResolver(bundleContext); + MockSlingHttpServletRequest req = new MockSlingHttpServletRequest(resolver); + MockSlingHttpServletResponse resp = new MockSlingHttpServletResponse(); - final JsonReader r = Json.createReader(new StringReader(w.toString())); + servlet.service(req, resp); + + // Just verify that both sources are taken into account + // the JSON format details are tested elsewhere + final JsonReader r = Json.createReader(new StringReader(resp.getOutputAsString())); final JsonObject rootJson = r.readObject(); final JsonObject json = rootJson.getJsonObject(JSONCapabilitiesWriter.CAPS_KEY); - assertEquals("VALUE_0_A", json.getJsonObject("A").getString("KEY_0_A")); - assertEquals("VALUE_1_A", json.getJsonObject("A").getString("KEY_1_A")); - assertEquals("VALUE_0_B", json.getJsonObject("B").getString("KEY_0_B")); - - assertEquals("Expecting 1 root key", 1, rootJson.keySet().size()); - assertEquals("Expecting 2 keys at A", 2, json.getJsonObject("A").keySet().size()); - assertEquals("Expecting 1 key at B", 1, json.getJsonObject("B").keySet().size()); + assertEquals("VALUE_1_F", json.getJsonObject("F").getString("KEY_1_F")); + assertEquals("VALUE_42_G", json.getJsonObject("G").getString("KEY_42_G")); } } \ No newline at end of file diff --git a/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java b/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java index c08034c..dd7227a 100644 --- a/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java +++ b/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java @@ -22,10 +22,7 @@ import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonReader; @@ -36,37 +33,11 @@ import org.junit.Test; /** Test the JSONCapabilitiesWriter */ public class JSONCapabilitiesWriterTest { - static class TestSource implements CapabilitiesSource { - private final String namespace; - private final Map<String, Object> props = new HashMap<>(); - - TestSource(String namespace, int propsCount) { - this.namespace = namespace; - for(int i=0; i < propsCount; i++) { - props.put("KEY_" + i + "_" + namespace, "VALUE_" + i + "_" + namespace); - } - } - - @Override - public Map<String, Object> getCapabilities() throws Exception { - if(namespace.contains("EXCEPTION")) { - throw new IllegalArgumentException("Simulating a problem"); - } - return Collections.unmodifiableMap(props); - } - - @Override - public String getNamespace() { - return namespace; - } - - } - @Test public void testWithTwoSources() throws IOException { final List<CapabilitiesSource> sources = new ArrayList<>(); - sources.add(new TestSource("A", 2)); - sources.add(new TestSource("B", 1)); + sources.add(new MockSource("A", 2)); + sources.add(new MockSource("B", 1)); final StringWriter w = new StringWriter(); new JSONCapabilitiesWriter().writeJson(w, sources); @@ -86,9 +57,9 @@ public class JSONCapabilitiesWriterTest { @Test public void testWithException() throws IOException { final List<CapabilitiesSource> sources = new ArrayList<>(); - sources.add(new TestSource("A", 1)); - sources.add(new TestSource("EXCEPTION", 2)); - sources.add(new TestSource("B", 1)); + sources.add(new MockSource("A", 1)); + sources.add(new MockSource("EXCEPTION", 2)); + sources.add(new MockSource("B", 1)); final StringWriter w = new StringWriter(); new JSONCapabilitiesWriter().writeJson(w, sources); diff --git a/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java b/capabilities/src/test/java/org/apache/sling/capabilities/internal/MockSource.java similarity index 61% rename from capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java rename to capabilities/src/test/java/org/apache/sling/capabilities/internal/MockSource.java index 7116da0..50b8652 100644 --- a/capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java +++ b/capabilities/src/test/java/org/apache/sling/capabilities/internal/MockSource.java @@ -16,39 +16,36 @@ ~ specific language governing permissions and limitations ~ under the License. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ -package org.apache.sling.capabilities.internal.demo; +package org.apache.sling.capabilities.internal; +import java.util.Collections; import java.util.HashMap; import java.util.Map; -import org.osgi.service.component.annotations.Component; import org.apache.sling.capabilities.CapabilitiesSource; -/** - * Builds Probes that provide basic JVM information, as an example. - */ -@Component(service = CapabilitiesSource.class) -public class JvmCapabilitiesSource implements CapabilitiesSource { +class MockSource implements CapabilitiesSource { - @Override - public String getNamespace() { - return "org.apache.sling.capabilities.DEMO." + getClass().getSimpleName(); + private final String namespace; + private final Map<String, Object> props = new HashMap<>(); + + MockSource(String namespace, int propsCount) { + this.namespace = namespace; + for (int i = 0; i < propsCount; i++) { + props.put("KEY_" + i + "_" + namespace, "VALUE_" + i + "_" + namespace); + } } - + @Override public Map<String, Object> getCapabilities() throws Exception { - // Return semi-useful JVM properties for our proof of concept - final Map<String, Object> result = new HashMap<>(); - - final String[] props = { - "java.specification.version", - "java.vm.vendor", - "java.vm.version" - }; - - for (String prop : props) { - result.put(prop, System.getProperty(prop)); + if (namespace.contains("EXCEPTION")) { + throw new IllegalArgumentException("Simulating a problem"); } + return Collections.unmodifiableMap(props); + } - return result; + @Override + public String getNamespace() { + return namespace; } + }
