You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2018/06/20 13:28:23 UTC

[sling-whiteboard] branch master updated (cf3ccc2 -> cdf3410)

This is an automated email from the ASF dual-hosted git repository.

bdelacretaz pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git.


    from cf3ccc2  Add JSONCapabilitiesWriterTest
     new a059dc1  Test exception behavior as well
     new cdf3410  Add CapabilitesServletTest

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 capabilities/pom.xml                               | 12 ++++
 .../capabilities/internal/CapabilitiesServlet.java |  3 +
 .../demo/OsgiFrameworkCapabilitiesSource.java      | 61 -----------------
 .../internal/CapabilitesServletTest.java           | 78 ++++++++++++++++++++++
 .../internal/JSONCapabilitiesWriterTest.java       | 50 ++++++--------
 .../sling/capabilities/internal/MockSource.java}   | 43 ++++++------
 6 files changed, 135 insertions(+), 112 deletions(-)
 delete mode 100644 capabilities/src/main/java/org/apache/sling/capabilities/internal/demo/OsgiFrameworkCapabilitiesSource.java
 create mode 100644 capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java
 rename capabilities/src/{main/java/org/apache/sling/capabilities/internal/demo/JvmCapabilitiesSource.java => test/java/org/apache/sling/capabilities/internal/MockSource.java} (61%)


[sling-whiteboard] 01/02: Test exception behavior as well

Posted by bd...@apache.org.
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 a059dc1bd0d54e1d8dc1b07675ad34ca2ddaf8a1
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Wed Jun 20 15:10:47 2018 +0200

    Test exception behavior as well
---
 ...WriterTest.java => CapabilitesServletTest.java} |  0
 .../internal/JSONCapabilitiesWriterTest.java       | 23 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java b/capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java
similarity index 100%
copy from capabilities/src/test/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriterTest.java
copy to capabilities/src/test/java/org/apache/sling/capabilities/internal/CapabilitesServletTest.java
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 78e6b75..c08034c 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
@@ -49,6 +49,9 @@ public class JSONCapabilitiesWriterTest {
 
         @Override
         public Map<String, Object> getCapabilities() throws Exception {
+            if(namespace.contains("EXCEPTION")) {
+                throw new IllegalArgumentException("Simulating a problem");
+            }
             return Collections.unmodifiableMap(props);
         }
         
@@ -79,4 +82,24 @@ public class JSONCapabilitiesWriterTest {
         assertEquals("Expecting 2 keys at A", 2, json.getJsonObject("A").keySet().size());
         assertEquals("Expecting 1 key at B", 1, json.getJsonObject("B").keySet().size());
     }
+
+    @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));
+        
+        final StringWriter w = new StringWriter();
+        new JSONCapabilitiesWriter().writeJson(w, sources);
+        
+        final JsonReader r = Json.createReader(new StringReader(w.toString()));
+        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("java.lang.IllegalArgumentException:Simulating a problem", json.getJsonObject("EXCEPTION").getString("_EXCEPTION_"));
+        assertEquals("VALUE_0_B", json.getJsonObject("B").getString("KEY_0_B"));
+        
+        assertEquals("Expecting 1 key at EXCEPTION", 1, json.getJsonObject("EXCEPTION").keySet().size());
+   }
 }
\ No newline at end of file


[sling-whiteboard] 02/02: Add CapabilitesServletTest

Posted by bd...@apache.org.
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 <bd...@apache.org>
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;
     }
+
 }