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;
     }
+
 }

Reply via email to