You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2016/09/29 18:32:41 UTC

svn commit: r1762824 - in /sling/trunk/contrib/extensions/sling-pipes/src: main/java/org/apache/sling/pipes/ main/java/org/apache/sling/pipes/impl/ test/java/org/apache/sling/pipes/ test/java/org/apache/sling/pipes/impl/

Author: olli
Date: Thu Sep 29 18:32:41 2016
New Revision: 1762824

URL: http://svn.apache.org/viewvc?rev=1762824&view=rev
Log:
move DefaultOutputWriter and PlumberServlet to package impl

Added:
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/DefaultOutputWriter.java
      - copied, changed from r1762817, sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/DefaultOutputWriter.java
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberServlet.java
      - copied, changed from r1762817, sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/PlumberServletTest.java
Removed:
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/DefaultOutputWriter.java
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/PlumberServletTest.java
Modified:
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java
    sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/CustomWriter.java
    sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java?rev=1762824&r1=1762823&r2=1762824&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/BasePipe.java Thu Sep 29 18:32:41 2016
@@ -16,6 +16,11 @@
  */
 package org.apache.sling.pipes;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -23,18 +28,13 @@ import org.apache.sling.api.resource.Val
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
 /**
  * provides generic utilities for a pipe
  */
 public class BasePipe implements Pipe {
     Logger logger = LoggerFactory.getLogger(BasePipe.class);
     public static final String RESOURCE_TYPE = "slingPipes/base";
-    protected static final String DRYRUN_KEY = "dryRun";
+    public static final String DRYRUN_KEY = "dryRun";
     protected static final String DRYRUN_EXPR = "${" + DRYRUN_KEY + "}";
 
     protected ResourceResolver resolver;

Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/CustomWriter.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/CustomWriter.java?rev=1762824&r1=1762823&r2=1762824&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/CustomWriter.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/CustomWriter.java Thu Sep 29 18:32:41 2016
@@ -16,15 +16,14 @@
  */
 package org.apache.sling.pipes.impl;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.commons.json.JSONException;
 import org.apache.sling.pipes.BasePipe;
-import org.apache.sling.pipes.DefaultOutputWriter;
-
-import java.util.HashMap;
-import java.util.Map;
 
 /**
  * writes current resource, dubbing a given child resource "writer" property/value pairs, allowing expressions

Copied: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/DefaultOutputWriter.java (from r1762817, sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/DefaultOutputWriter.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/DefaultOutputWriter.java?p2=sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/DefaultOutputWriter.java&p1=sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/DefaultOutputWriter.java&r1=1762817&r2=1762824&rev=1762824&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/DefaultOutputWriter.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/DefaultOutputWriter.java Thu Sep 29 18:32:41 2016
@@ -14,15 +14,17 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.pipes;
+package org.apache.sling.pipes.impl;
+
+import java.io.IOException;
 
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.commons.json.JSONException;
 import org.apache.sling.commons.json.io.JSONWriter;
-
-import java.io.IOException;
+import org.apache.sling.pipes.OutputWriter;
+import org.apache.sling.pipes.Pipe;
 
 /**
  * default output writer with size and output resources' path
@@ -60,4 +62,4 @@ public class DefaultOutputWriter impleme
         writer.key(KEY_SIZE).value(size);
         writer.endObject();
     }
-}
\ No newline at end of file
+}

Copied: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberServlet.java (from r1762817, sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java)
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberServlet.java?p2=sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberServlet.java&p1=sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java&r1=1762817&r2=1762824&rev=1762824&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/PlumberServlet.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/impl/PlumberServlet.java Thu Sep 29 18:32:41 2016
@@ -14,7 +14,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.sling.pipes;
+package org.apache.sling.pipes.impl;
+
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.servlet.ServletException;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.felix.scr.annotations.Reference;
@@ -26,17 +33,18 @@ import org.apache.sling.api.resource.Res
 import org.apache.sling.api.servlets.SlingAllMethodsServlet;
 import org.apache.sling.commons.json.JSONException;
 import org.apache.sling.commons.json.JSONObject;
-import org.apache.sling.pipes.impl.CustomJsonWriter;
-import org.apache.sling.pipes.impl.CustomWriter;
+import org.apache.sling.pipes.AuthorizablePipe;
+import org.apache.sling.pipes.BasePipe;
+import org.apache.sling.pipes.ContainerPipe;
+import org.apache.sling.pipes.OutputWriter;
+import org.apache.sling.pipes.Pipe;
+import org.apache.sling.pipes.PipeBindings;
+import org.apache.sling.pipes.Plumber;
+import org.apache.sling.pipes.SlingQueryPipe;
+import org.apache.sling.pipes.WritePipe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.servlet.ServletException;
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
 /**
  * Servlet executing plumber for a pipe path given as 'path' parameter,
  * it can also be launched against a container pipe resource directly (no need for path parameter)
@@ -137,4 +145,4 @@ public class PlumberServlet extends Slin
         }
         return null;
     }
-}
\ No newline at end of file
+}

Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java?rev=1762824&r1=1762823&r2=1762824&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java (original)
+++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java Thu Sep 29 18:32:41 2016
@@ -16,6 +16,8 @@
  */
 package org.apache.sling.pipes;
 
+import java.util.Iterator;
+
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.pipes.dummies.DummyNull;
 import org.apache.sling.pipes.dummies.DummySearch;
@@ -25,8 +27,6 @@ import org.apache.sling.testing.mock.sli
 import org.junit.Before;
 import org.junit.Rule;
 
-import java.util.Iterator;
-
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -44,7 +44,8 @@ public class AbstractPipeTest {
     protected static final String NN_SIMPLE = "simple";
     protected static final String NN_COMPLEX = "complex";
     protected static final String PN_INDEX = "/index";
-    Plumber plumber;
+
+    protected Plumber plumber;
 
     @Rule
     public SlingContext context = new SlingContext(ResourceResolverType.JCR_MOCK);

Added: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/PlumberServletTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/PlumberServletTest.java?rev=1762824&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/PlumberServletTest.java (added)
+++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/impl/PlumberServletTest.java Thu Sep 29 18:32:41 2016
@@ -0,0 +1,197 @@
+/*
+ * 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.pipes.impl;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import javax.servlet.ServletException;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ValueMap;
+import org.apache.sling.commons.json.JSONArray;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+import org.apache.sling.pipes.AbstractPipeTest;
+import org.apache.sling.pipes.BasePipe;
+import org.apache.sling.pipes.ContainerPipeTest;
+import org.apache.sling.pipes.OutputWriter;
+import org.apache.sling.pipes.WritePipeTest;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * testing the servlet logic (parameters & output)
+ */
+public class PlumberServletTest extends AbstractPipeTest {
+
+    String containersPath = PATH_PIPE + "/" + "containers";
+
+    String dummyTreePath = containersPath + "/" + ContainerPipeTest.NN_DUMMYTREE;
+
+    String writePath = PATH_PIPE + "/" + "write";
+
+    String pipedWritePath = writePath + "/" + WritePipeTest.NN_PIPED;
+
+    StringWriter stringResponse;
+
+    SlingHttpServletResponse response;
+
+    PlumberServlet servlet = new PlumberServlet();
+
+    @Before
+    public void setup() {
+        super.setup();
+        context.load().json("/plumber.json", PATH_PIPE);
+        context.load().json("/container.json", containersPath);
+        context.load().json("/write.json", writePath);
+        servlet.plumber = plumber;
+        stringResponse = new StringWriter();
+        try {
+            response = mockPlumberServletResponse(stringResponse);
+        } catch (Exception e){
+
+        }
+    }
+
+    private void assertDummyTree() throws JSONException {
+        String finalResponse = stringResponse.toString();
+        assertFalse("There should be a response", StringUtils.isBlank(finalResponse));
+        JSONObject object = new JSONObject(finalResponse);
+        assertEquals("response should be an obj with size value equals to 4", object.getInt(OutputWriter.KEY_SIZE), 4);
+        assertEquals("response should be an obj with items value equals to a 4 valued array", object.getJSONArray(OutputWriter.KEY_ITEMS).length(), 4);
+    }
+
+    @Test
+    public void testDummyTreeThroughRT() throws Exception {
+        SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, null, null, null);
+        servlet.execute(request, response, false);
+        assertDummyTree();
+    }
+
+    @Test
+    public void testDummyTreeThroughPlumber() throws Exception {
+        SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), PATH_PIPE, dummyTreePath, null, null, null);
+        servlet.execute(request, response, false);
+        assertDummyTree();
+    }
+
+    @Test
+    public void testWriteExecute() throws ServletException {
+        SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, null);
+        servlet.execute(request, response, true);
+        String finalResponse = stringResponse.toString();
+        assertFalse("There should be a response", StringUtils.isBlank(finalResponse));
+        assertFalse("There should be no more pending changes", context.resourceResolver().hasChanges());
+    }
+
+    /**
+     * in this test we execute a pipe that modifies content, with a flag mocking the GET request:
+     * the execution should fail.
+     */
+    @Test
+    public void testGetOnWriteExecute() throws ServletException {
+        SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, null);
+        boolean hasFailed = true;
+        try {
+            servlet.execute(request, response, false);
+            hasFailed = false;
+        } catch (Exception e){
+
+        }
+        assertTrue("Execution should have failed", hasFailed);
+    }
+
+    @Test
+    public void testAdditionalBindingsAndWriter() throws Exception {
+        String testBinding = "testBinding";
+        String testBindingLength = testBinding + "Length";
+        String bindingValue = "testBindingValue";
+        String pathLengthParam = "pathLength";
+        JSONObject bindings = new JSONObject("{'" + testBinding + "':'" + bindingValue + "'}");
+        JSONObject respObject = new JSONObject("{'" + pathLengthParam + "':'${path.get(\"dummyGrandChild\").length}','" + testBindingLength + "':'${" + testBinding + ".length}'}");
+        SlingHttpServletRequest request =
+                mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, bindings.toString(), respObject.toString(), null);
+        servlet.execute(request, response, false);
+        assertDummyTree();
+        JSONObject response = new JSONObject(stringResponse.toString());
+        JSONArray array = response.getJSONArray(OutputWriter.KEY_ITEMS);
+        for (int i = 0; i < array.length(); i++) {
+            JSONObject object = array.optJSONObject(i);
+            assertNotNull("there should be an object returned at each time", object);
+            String path = object.optString(CustomWriter.PATH_KEY);
+            assertNotNull("the string path should be returned for each item, containing the path of the resource");
+            String pathLength = object.optString(pathLengthParam);
+            assertNotNull("there should be a pathLength param, as specified in the writer", pathLength);
+            assertEquals("Pathlength should be the string representation of the path length", path.length() + "", pathLength);
+            String testBindingLengthValue = object.optString(testBindingLength);
+            assertNotNull("testBindingLength should be there", testBindingLengthValue);
+            assertEquals("testBindingLength should be the string representation of the additional binding length",
+                    bindingValue.length() + "", testBindingLengthValue);
+        }
+    }
+
+    @Test
+    public void testDryRun() throws Exception {
+        SlingHttpServletRequest dryRunRequest =
+                mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, "true");
+        servlet.execute(dryRunRequest, response, true);
+        Resource resource = context.resourceResolver().getResource("/content/fruits");
+        ValueMap properties = resource.adaptTo(ValueMap.class);
+        assertFalse("property fruits shouldn't have been written", properties.containsKey("fruits"));
+        SlingHttpServletRequest request =
+                mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, "false");
+        servlet.execute(request, response, true);
+        WritePipeTest.assertPiped(resource);
+    }
+
+    public static SlingHttpServletRequest mockPlumberServletRequest(ResourceResolver resolver,
+                                                                    String path,
+                                                                    String pathParam,
+                                                                    String bindings,
+                                                                    String writer,
+                                                                    String dryRun){
+        SlingHttpServletRequest request = mock(SlingHttpServletRequest.class);
+        Resource resource = resolver.getResource(path);
+        when(request.getResourceResolver()).thenReturn(resolver);
+        when(request.getResource()).thenReturn(resource);
+        when(request.getParameter(PlumberServlet.PARAM_PATH)).thenReturn(pathParam);
+        when(request.getParameter(PlumberServlet.PARAM_BINDINGS)).thenReturn(bindings);
+        when(request.getParameter(CustomWriter.PARAM_WRITER)).thenReturn(writer);
+        when(request.getParameter(BasePipe.DRYRUN_KEY)).thenReturn(dryRun);
+        return request;
+    }
+
+    public static SlingHttpServletResponse mockPlumberServletResponse(StringWriter writer) throws IOException {
+        SlingHttpServletResponse response = mock(SlingHttpServletResponse.class);
+        PrintWriter printWriter = new PrintWriter(writer);
+        when(response.getWriter()).thenReturn(printWriter);
+        return response;
+    }
+}