Author: rombert Date: Fri May 5 10:41:24 2017 New Revision: 1794006 URL: http://svn.apache.org/viewvc?rev=1794006&view=rev Log: SLING-6538: Fix Sling Pipes size parameter
Make Sling Pipes size parameter return the correct number of items. Add tests for the size parameter in the PlumberServletTest. Submitted-By: Nate Yolles This closes #200 Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java Modified: sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java?rev=1794006&r1=1794005&r2=1794006&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/main/java/org/apache/sling/pipes/internal/PlumberServlet.java Fri May 5 10:41:24 2017 @@ -130,7 +130,7 @@ public class PlumberServlet extends Slin while (resourceIterator.hasNext()){ Resource resource = resourceIterator.next(); paths.add(resource.getPath()); - if (++i < size) { + if (i++ < size) { writer.writeItem(resource); } } Modified: sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java?rev=1794006&r1=1794005&r2=1794006&view=diff ============================================================================== --- sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java (original) +++ sling/trunk/contrib/extensions/sling-pipes/src/test/java/org/apache/sling/pipes/internal/PlumberServletTest.java Fri May 5 10:41:24 2017 @@ -50,6 +50,8 @@ import static org.mockito.Mockito.when; */ public class PlumberServletTest extends AbstractPipeTest { + static final int DUMMYTREE_TEST_SIZE = 4; + String containersPath = PATH_PIPE + "/" + "containers"; String dummyTreePath = containersPath + "/" + ContainerPipeTest.NN_DUMMYTREE; @@ -79,31 +81,35 @@ public class PlumberServletTest extends } } - private void assertDummyTree() throws JSONException { + private void assertDummyTree(int size) 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); + assertEquals("response should be an obj with size value equals to " + DUMMYTREE_TEST_SIZE, object.getInt(OutputWriter.KEY_SIZE), DUMMYTREE_TEST_SIZE); + assertEquals("response should be an obj with items value equals to a " + size + " valued array", object.getJSONArray(OutputWriter.KEY_ITEMS).length(), size); + } + + private void assertDummyTree() throws JSONException { + assertDummyTree(DUMMYTREE_TEST_SIZE); } @Test public void testDummyTreeThroughRT() throws Exception { - SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, null, null, null); + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, 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); + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), PATH_PIPE, dummyTreePath, null, 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); + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, null, null); servlet.execute(request, response, true); String finalResponse = stringResponse.toString(); assertFalse("There should be a response", StringUtils.isBlank(finalResponse)); @@ -116,7 +122,7 @@ public class PlumberServletTest extends */ @Test public void testGetOnWriteExecute() throws ServletException { - SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, null); + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, null, null); boolean hasFailed = true; try { servlet.execute(request, response, false); @@ -136,7 +142,7 @@ public class PlumberServletTest extends 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); + mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, bindings.toString(), respObject.toString(), null, null); servlet.execute(request, response, false); assertDummyTree(); JSONObject response = new JSONObject(stringResponse.toString()); @@ -159,23 +165,38 @@ public class PlumberServletTest extends @Test public void testDryRun() throws Exception { SlingHttpServletRequest dryRunRequest = - mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, "true"); + mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, "true", null); 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"); + mockPlumberServletRequest(context.resourceResolver(), pipedWritePath, null, null, null, "false", null); servlet.execute(request, response, true); WritePipeTest.assertPiped(resource); } + + @Test + public void testDummyTreeSizeLimit() throws Exception { + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, null, null, null, "2"); + servlet.execute(request, response, false); + assertDummyTree(2); + } + + @Test + public void testDummyTreeInfiniteSize() throws Exception { + SlingHttpServletRequest request = mockPlumberServletRequest(context.resourceResolver(), dummyTreePath, null, null, null, null, "-1"); + servlet.execute(request, response, false); + assertDummyTree(DUMMYTREE_TEST_SIZE); + } public static SlingHttpServletRequest mockPlumberServletRequest(ResourceResolver resolver, String path, String pathParam, String bindings, String writer, - String dryRun){ + String dryRun, + String size) { SlingHttpServletRequest request = mock(SlingHttpServletRequest.class); Resource resource = resolver.getResource(path); when(request.getResourceResolver()).thenReturn(resolver); @@ -184,6 +205,7 @@ public class PlumberServletTest extends when(request.getParameter(PlumberServlet.PARAM_BINDINGS)).thenReturn(bindings); when(request.getParameter(CustomWriter.PARAM_WRITER)).thenReturn(writer); when(request.getParameter(BasePipe.DRYRUN_KEY)).thenReturn(dryRun); + when(request.getParameter(PlumberServlet.PARAM_SIZE)).thenReturn(size); return request; }