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