You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by np...@apache.org on 2022/01/17 14:25:44 UTC

[sling-org-apache-sling-pipes] branch master updated: SLING-11041 - closing the InputStream (#13)

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

npeltier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-pipes.git


The following commit(s) were added to refs/heads/master by this push:
     new ae3c588  SLING-11041 - closing the InputStream  (#13)
ae3c588 is described below

commit ae3c588f328d221489d92eaae13b00f907fcb2c7
Author: luckyluke-adobe <91...@users.noreply.github.com>
AuthorDate: Mon Jan 17 15:24:33 2022 +0100

    SLING-11041 - closing the InputStream  (#13)
    
    * SLING-11041: closing the InputStream in the after hook instead in the finally block
    
    * SLING-11041: providing unit test, which fails, if InputStream is closed too early.
    * standardTest.csv needs to be added again to __files folder. WireMock insists on this folder
---
 .../sling/pipes/AbstractInputStreamPipe.java       |  8 +++++--
 .../org/apache/sling/pipes/AbstractPipeTest.java   |  3 +++
 .../pipes/internal/inputstream/CsvPipeTest.java    | 25 +++++++++++++++++++---
 .../pipes/internal/inputstream/JsonPipeTest.java   |  3 ---
 src/test/resources/__files/standardTest.csv        |  4 ++++
 5 files changed, 35 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java b/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java
index bfb29b5..ca9c3da 100644
--- a/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java
+++ b/src/main/java/org/apache/sling/pipes/AbstractInputStreamPipe.java
@@ -117,8 +117,12 @@ public abstract class AbstractInputStreamPipe extends BasePipe {
             return getOutput(is);
         }  catch (IOException e) {
             throw new IllegalArgumentException(e);
-        } finally {
-            IOUtils.closeQuietly(is);
         }
     }
+
+    @Override
+    public void after() {
+        super.after();
+        IOUtils.closeQuietly(is);
+    }
 }
diff --git a/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java b/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
index 683a6ec..4134275 100644
--- a/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
@@ -63,6 +63,9 @@ public class AbstractPipeTest {
     protected static final String NN_COMPLEX = "complex";
     protected static final String PN_INDEX = "/index";
 
+    protected static final int PORT = 1234;
+    protected static final String baseUrl = "http://127.0.0.1:" + PORT;
+
     protected Plumber plumber;
 
     protected CommandExecutor commandsExecutor;
diff --git a/src/test/java/org/apache/sling/pipes/internal/inputstream/CsvPipeTest.java b/src/test/java/org/apache/sling/pipes/internal/inputstream/CsvPipeTest.java
index 1f32459..43e28f5 100644
--- a/src/test/java/org/apache/sling/pipes/internal/inputstream/CsvPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/inputstream/CsvPipeTest.java
@@ -16,22 +16,31 @@
  */
 package org.apache.sling.pipes.internal.inputstream;
 
+import com.github.tomakehurst.wiremock.junit.WireMockRule;
 import org.apache.commons.collections.IteratorUtils;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.pipes.AbstractPipeTest;
+import org.apache.sling.pipes.ExecutionResult;
 import org.apache.sling.pipes.Pipe;
+import org.junit.Rule;
 import org.junit.Test;
 
 import java.util.Iterator;
 import java.util.List;
 import java.util.stream.Collectors;
 
+import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
+import static com.github.tomakehurst.wiremock.client.WireMock.get;
+import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;
 import static org.junit.Assert.assertEquals;
 
 /**
  * testing csv pipe
  */
-public class CsvPipeTest extends AbstractPipeTest{
+public class CsvPipeTest extends AbstractPipeTest {
+
+    @Rule
+    public WireMockRule http = new WireMockRule(PORT);
 
     @Test
     public void getOutput() throws Exception {
@@ -42,10 +51,20 @@ public class CsvPipeTest extends AbstractPipeTest{
                 .mkdir(PATH_FRUITS + "/csv/${csv.fruit}-${csv.color}-${csv.id}").build();
         Iterator<Resource> output = pipe.getOutput();
         List<Resource> resources = IteratorUtils.toList(output);
-        List<String> paths = resources.stream().map( resource -> resource.getPath()).collect(Collectors.toList());
+        List<String> paths = resources.stream().map(resource -> resource.getPath()).collect(Collectors.toList());
         assertEquals("there should be 3 elements", 3, paths.size());
         assertEquals("first should be /content/fruits/csv/apple-green-1", "/content/fruits/csv/apple-green-1", paths.get(0));
         assertEquals("second should be /content/fruits/csv/banana-yellow-2", "/content/fruits/csv/banana-yellow-2", paths.get(1));
         assertEquals("first should be /content/fruits/csv/plum-purple-3", "/content/fruits/csv/plum-purple-3", paths.get(2));
     }
-}
\ No newline at end of file
+
+    @Test
+    public void testCsvInputStream() throws IllegalAccessException {
+        http.givenThat(get(urlEqualTo("/get/standardTest.csv"))
+                .willReturn(aResponse().withStatus(200).withBodyFile("standardTest.csv")));
+        ExecutionResult results = plumber.newPipe(context.resourceResolver())
+                .csv(baseUrl + "/get/standardTest.csv").name("item").mkdir("/home/${item.fruit}").run();
+        assertEquals(3, results.size());
+        assertEquals("{\"items\":[\"/home/apple\",\"/home/banana\",\"/home/plum\"],\"size\":3}", results.toString());
+    }
+}
diff --git a/src/test/java/org/apache/sling/pipes/internal/inputstream/JsonPipeTest.java b/src/test/java/org/apache/sling/pipes/internal/inputstream/JsonPipeTest.java
index 83a8923..b935439 100644
--- a/src/test/java/org/apache/sling/pipes/internal/inputstream/JsonPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/inputstream/JsonPipeTest.java
@@ -54,9 +54,6 @@ public class JsonPipeTest extends AbstractPipeTest {
         context.load().json("/json.json", "/content/json");
     }
 
-    private static final int PORT = 1234;
-    private static final String baseUrl = "http://127.0.0.1:" + PORT;
-
     @Rule
     public WireMockRule http = new WireMockRule(PORT);
 
diff --git a/src/test/resources/__files/standardTest.csv b/src/test/resources/__files/standardTest.csv
new file mode 100644
index 0000000..7f19912
--- /dev/null
+++ b/src/test/resources/__files/standardTest.csv
@@ -0,0 +1,4 @@
+fruit,color,id
+apple,green,1
+banana,yellow,2
+plum,purple,3
\ No newline at end of file