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 562171c  SLING-9797 allow mv to have relative paths
562171c is described below

commit 562171c905f02cecd827e1852b7ff8c7050f8128
Author: Nicolas Peltier <[email protected]>
AuthorDate: Mon Nov 30 10:16:08 2020 +0100

    SLING-9797 allow mv to have relative paths
    
    also enhance a bit testing basis, with mocking closer to reality, allowing 
usage of command executor in tests, for easier test cases
---
 pom.xml                                            | 18 +++++++++--
 .../java/org/apache/sling/pipes/SuperPipe.java     |  2 +-
 .../org/apache/sling/pipes/internal/MovePipe.java  |  5 +++
 .../org/apache/sling/pipes/AbstractPipeTest.java   | 36 +++++++++++++++-------
 .../java/org/apache/sling/pipes/BasePipeTest.java  |  8 ++---
 .../org/apache/sling/pipes/ContainerPipeTest.java  | 13 +++-----
 .../org/apache/sling/pipes/ManifoldPipeTest.java   |  5 +--
 .../org/apache/sling/pipes/PipeBuilderTest.java    | 12 ++------
 .../apache/sling/pipes/internal/MovePipeTest.java  |  7 +++++
 .../sling/pipes/internal/PackagePipeTest.java      |  6 ++--
 .../pipes/internal/ShallowReferencePipeTest.java   |  6 ++--
 .../apache/sling/pipes/internal/WritePipeTest.java |  6 +---
 .../org.apache.sling.event.jobs.JobManager.xml     |  7 +++++
 ...he.sling.pipes.internal.CommandExecutorImpl.xml |  8 +++++
 ...org.apache.sling.pipes.internal.PlumberImpl.xml |  9 ++++++
 15 files changed, 96 insertions(+), 52 deletions(-)

diff --git a/pom.xml b/pom.xml
index 0bc4fd4..8eeb3f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,6 +82,7 @@
           <excludes combine.children="append">
             <!-- test csv files can't have licenses embedded -->
             <exclude>src/test/resources/**/*.csv</exclude>
+            <exclude>src/test/resources/OSGI-INF/*.xml</exclude>
           </excludes>
         </configuration>
       </plugin>
@@ -142,6 +143,19 @@
     <dependency>
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.annotation.versioning</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.component.annotations</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.service.metatype.annotations</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.osgi</groupId>
+      <artifactId>osgi.cmpn</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -284,8 +298,8 @@
     </dependency>
     <dependency>
       <groupId>org.apache.sling</groupId>
-      <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-      <version>2.2.18</version>
+      <artifactId>org.apache.sling.testing.sling-mock.junit4</artifactId>
+      <version>2.6.2</version>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/src/main/java/org/apache/sling/pipes/SuperPipe.java 
b/src/main/java/org/apache/sling/pipes/SuperPipe.java
index 93f8ad8..37df2c6 100644
--- a/src/main/java/org/apache/sling/pipes/SuperPipe.java
+++ b/src/main/java/org/apache/sling/pipes/SuperPipe.java
@@ -25,7 +25,7 @@ import java.util.Iterator;
 import java.util.List;
 
 /**
- * Pipe that outputs some other pipes output, managing for them what is their 
outputs, and bindings
+ * Pipe that outputs a configured set of pipes output, managing for them what 
is their outputs, and bindings
  */
 public abstract class SuperPipe extends BasePipe {
     private static final Logger LOG = LoggerFactory.getLogger(SuperPipe.class);
diff --git a/src/main/java/org/apache/sling/pipes/internal/MovePipe.java 
b/src/main/java/org/apache/sling/pipes/internal/MovePipe.java
index 1e62713..46b0a76 100644
--- a/src/main/java/org/apache/sling/pipes/internal/MovePipe.java
+++ b/src/main/java/org/apache/sling/pipes/internal/MovePipe.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.pipes.internal;
 
+import org.apache.commons.lang3.StringUtils;
 import org.apache.jackrabbit.api.JackrabbitNode;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
@@ -154,6 +155,10 @@ public class MovePipe extends BasePipe {
             return output;
         }
         String targetPath = getExpr();
+        if (! targetPath.startsWith(SLASH)) {
+            logger.debug("relative path requested as target path: we'll take 
current path's parent");
+            targetPath = StringUtils.substringBeforeLast(input.getPath(), 
SLASH) + SLASH + targetPath;
+        }
         Resource targetResource = resolver.getResource(targetPath);
         try {
             if (targetResource == null) {
diff --git a/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java 
b/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
index dac24f1..8eb8932 100644
--- a/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/AbstractPipeTest.java
@@ -18,21 +18,25 @@ package org.apache.sling.pipes;
 
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.event.jobs.JobManager;
+
 import org.apache.sling.pipes.dummies.DummyNull;
 import org.apache.sling.pipes.dummies.DummySearch;
+import org.apache.sling.pipes.internal.CommandExecutorImpl;
 import org.apache.sling.pipes.internal.PlumberImpl;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Rule;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
 
 /**
  * this abstract class for pipes implements a plumber with all registered 
pipes, plus some test ones, and give some paths,
@@ -58,22 +62,23 @@ public class AbstractPipeTest {
 
     protected Plumber plumber;
 
+    protected CommandExecutor commandsExecutor;
+
     @Rule
     public SlingContext context = new 
SlingContext(ResourceResolverType.JCR_MOCK);
 
     @Before
     public void setup() throws PersistenceException {
-        PlumberImpl plumberImpl = new PlumberImpl();
-        PlumberImpl.Configuration configuration = 
mock(PlumberImpl.Configuration.class);
-        when(configuration.authorizedUsers()).thenReturn(new String[]{});
-        when(configuration.serviceUser()).thenReturn(null);
-        
when(configuration.bufferSize()).thenReturn(PlumberImpl.DEFAULT_BUFFER_SIZE);
-        
when(configuration.executionPermissionResource()).thenReturn(PATH_FRUITS);
-        plumberImpl.activate(configuration);
-        plumberImpl.registerPipe("slingPipes/dummyNull", DummyNull.class);
-        plumberImpl.registerPipe("slingPipes/dummySearch", DummySearch.class);
-        plumber = plumberImpl;
         context.load().json("/initial-content/content/fruits.json", 
PATH_FRUITS);
+        plumber = new PlumberImpl();
+        context.registerService(mock(JobManager.class));
+        context.registerInjectActivateService(plumber, "authorizedUsers", new 
String[]{},
+                "bufferSize", PlumberImpl.DEFAULT_BUFFER_SIZE,
+                "executionPermissionResource", PATH_FRUITS);
+        plumber.registerPipe("slingPipes/dummyNull", DummyNull.class);
+        plumber.registerPipe("slingPipes/dummySearch", DummySearch.class);
+        commandsExecutor = new CommandExecutorImpl();
+        context.registerInjectActivateService(commandsExecutor);
     }
 
     protected Pipe getPipe(String path){
@@ -87,6 +92,15 @@ public class AbstractPipeTest {
         return pipe.getOutput();
     }
 
+    protected ExecutionResult execute(String command) throws 
InvocationTargetException, IllegalAccessException {
+        return execute(context.resourceResolver(), command);
+    }
+
+    protected ExecutionResult execute(ResourceResolver resolver, String 
command) throws InvocationTargetException, IllegalAccessException {
+        PipeBuilder builder = commandsExecutor.parse(resolver, 
command.trim().split("\\s"));
+        return builder.run();
+    }
+
     /**
      * tests given pipe (pipePath) outputs at least one resource, which path 
is resourcepath
      * @param pipePath
diff --git a/src/test/java/org/apache/sling/pipes/BasePipeTest.java 
b/src/test/java/org/apache/sling/pipes/BasePipeTest.java
index 0679f1f..9921644 100644
--- a/src/test/java/org/apache/sling/pipes/BasePipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/BasePipeTest.java
@@ -62,12 +62,8 @@ public class BasePipeTest extends AbstractPipeTest {
 
     @Test
     public void testRelativeInput() throws Exception {
-        Resource resource = plumber.newPipe(context.resourceResolver())
-                .echo(ROOT)
-                .echo(NN_FRUITS)
-                .build().getOutput().next();
-        assertNotNull("there should be an output", resource);
-        assertEquals("it should be fruits root", PATH_FRUITS, 
resource.getPath());
+        ExecutionResult results = execute("echo /content | echo fruits");
+        assertEquals("it should be fruits root", PATH_FRUITS, 
results.currentPathSet.iterator().next());
     }
 
     @Test
diff --git a/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java 
b/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java
index 8af9021..f9bd565 100644
--- a/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/ContainerPipeTest.java
@@ -23,6 +23,7 @@ import org.apache.sling.pipes.internal.ContainerPipe;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 
 import static org.junit.Assert.assertEquals;
@@ -108,14 +109,10 @@ public class ContainerPipeTest extends AbstractPipeTest {
      * one "empty" sub pipe in the middle of the execution should cut the pipe
      */
     @Test
-    public void testContainerCut() throws PersistenceException {
-        Pipe pipe = plumber.newPipe(context.resourceResolver())
-                .echo(PATH_FRUITS) //should return fruit root
-                .echo("nonexisting") // /content/fruits/nonexisting does not 
exist
-                .echo(PATH_APPLE) // existing apple
-                .build();
-        assertFalse("there should be no output to that pipe because some empty 
pipe is in the middle",
-                pipe.getOutput().hasNext());
+    public void testContainerCut() throws PersistenceException, 
InvocationTargetException, IllegalAccessException {
+        ExecutionResult result = execute("echo /content/fruits | echo 
nonexisting | echo /content/fruits/apple");
+        assertEquals("there should be no output to that pipe because some 
empty pipe is in the middle",
+                0, result.size());
     }
 
     @Test
diff --git a/src/test/java/org/apache/sling/pipes/ManifoldPipeTest.java 
b/src/test/java/org/apache/sling/pipes/ManifoldPipeTest.java
index 93a8b51..e1fb7a2 100644
--- a/src/test/java/org/apache/sling/pipes/ManifoldPipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/ManifoldPipeTest.java
@@ -23,6 +23,7 @@ import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.lang.reflect.InvocationTargetException;
 import java.util.Iterator;
 
 import static org.junit.Assert.assertEquals;
@@ -64,8 +65,8 @@ public class ManifoldPipeTest extends AbstractPipeTest {
     }
 
     @Test
-    public void testStrainedFromReference() {
-        ExecutionResult result = 
plumber.newPipe(context.resourceResolver()).ref(PATH_PIPE + "/" + 
NN_STRAINED).run();
+    public void testStrainedFromReference() throws InvocationTargetException, 
IllegalAccessException {
+        ExecutionResult result = execute( "ref " + PATH_PIPE + "/" + 
NN_STRAINED);
         assertEquals("All the sub-pipes output should be present exactly once 
in Executor output", 10*6, result.size());
     }
 
diff --git a/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java 
b/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java
index 428b9dd..e2a5564 100644
--- a/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java
+++ b/src/test/java/org/apache/sling/pipes/PipeBuilderTest.java
@@ -83,15 +83,9 @@ public class PipeBuilderTest extends AbstractPipeTest {
 
     @Test
     public void bindings() throws Exception {
-        PipeBuilder defaultNames = plumber.newPipe(context.resourceResolver());
-        ExecutionResult result = defaultNames
-                .echo(PATH_FRUITS)
-                .children("nt:unstructured")
-                .grep("slingPipesFilter_test","${two.worm}")
-                .children("nt:unstructured#isnota")
-                .children("nt:unstructured").name("thing")
-                .write("jcr:path", "${path.thing}")
-                .run();
+        ExecutionResult result = execute("echo /content/fruits | children 
nt:unstructured " +
+                "| grep slingPipesFilter_test=${two.worm} | children 
nt:unstructured#isnota " +
+                "| children nt:unstructured @ name thing | write 
jcr:path=${path.thing}");
         assertEquals("There should be 3 resources", 3, result.size());
         String pea = "/content/fruits/apple/isnota/pea";
         String carrot = "/content/fruits/apple/isnota/carrot";
diff --git a/src/test/java/org/apache/sling/pipes/internal/MovePipeTest.java 
b/src/test/java/org/apache/sling/pipes/internal/MovePipeTest.java
index ca9e526..907b29f 100644
--- a/src/test/java/org/apache/sling/pipes/internal/MovePipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/MovePipeTest.java
@@ -119,4 +119,11 @@ public class MovePipeTest extends AbstractPipeTest {
         assertTrue("new property path should exists", 
session.propertyExists(PATH_FRUITS + MOVED_PROPERTY_PATH));
         Assert.assertFalse("old property path should not", 
session.propertyExists(PATH_FRUITS + PN_INDEX));
     }
+
+    @Test
+    public void testRelativeMove() throws Exception {
+        ExecutionResult results = execute(oak.resourceResolver(), "mkdir 
/content/foo | mv bar");
+        assertEquals("there should be 1 result", 1 , results.size());
+        assertEquals(results.getCurrentPathSet().iterator().next(), 
"/content/bar");
+    }
 }
diff --git a/src/test/java/org/apache/sling/pipes/internal/PackagePipeTest.java 
b/src/test/java/org/apache/sling/pipes/internal/PackagePipeTest.java
index 980be4a..abe7bc6 100644
--- a/src/test/java/org/apache/sling/pipes/internal/PackagePipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/PackagePipeTest.java
@@ -38,10 +38,8 @@ public class PackagePipeTest extends AbstractPipeTest {
     public void filterModeTest() throws Exception {
         oak.load().json("/initial-content/content/fruits.json", PATH_FRUITS);
         String packagePath = "/content/package";
-        ExecutionResult result = plumber.newPipe(oak.resourceResolver())
-                .echo("/content/fruits")
-                .children("nt:unstructured")
-                .pkg(packagePath).run();
+        ExecutionResult result = execute(oak.resourceResolver(),
+                "echo /content/fruits | children nt:unstructured | package 
/content/package");
         assertTrue("there should be more than one output", result.size() > 0);
         Resource packageResource = 
context.resourceResolver().getResource(packagePath);
         assertNotNull(packageResource);
diff --git 
a/src/test/java/org/apache/sling/pipes/internal/ShallowReferencePipeTest.java 
b/src/test/java/org/apache/sling/pipes/internal/ShallowReferencePipeTest.java
index 801f8e8..aa48de3 100644
--- 
a/src/test/java/org/apache/sling/pipes/internal/ShallowReferencePipeTest.java
+++ 
b/src/test/java/org/apache/sling/pipes/internal/ShallowReferencePipeTest.java
@@ -46,10 +46,8 @@ public class ShallowReferencePipeTest extends 
AbstractPipeTest {
         plumber.newPipe(context.resourceResolver()).echo(PATH_FRUITS + 
"/apple").build(PATH_PIPE + "/applePipe");
         plumber.newPipe(context.resourceResolver()).echo(PATH_FRUITS + 
"/banana").build(PATH_PIPE + "/bananaPipe");
 
-        ExecutionResult result = plumber.newPipe(context.resourceResolver())
-                .json("['apple','banana']").name("fruit")
-                .shallowRef(PATH_PIPE + "/${fruit}Pipe")
-                .run();
+        ExecutionResult result = execute("json ['apple','banana'] @ name 
fruit" +
+                " | shallowRef " + PATH_PIPE + "/${fruit}Pipe");
         assertEquals("there should be two outputs", 2, result.size());
         assertTrue("apple should be returned", 
result.getCurrentPathSet().contains(PATH_FRUITS + "/apple"));
         assertTrue("banana should be returned", 
result.getCurrentPathSet().contains(PATH_FRUITS + "/banana"));
diff --git a/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java 
b/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java
index e1bce7b..43981ce 100644
--- a/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java
+++ b/src/test/java/org/apache/sling/pipes/internal/WritePipeTest.java
@@ -136,11 +136,7 @@ public class WritePipeTest extends AbstractPipeTest {
     public void testReferencedSource() throws Exception {
         String path = "/content/test/referenced/source";
         ResourceResolver resolver = context.resourceResolver();
-        ExecutionResult result = plumber.newPipe(resolver)
-                .mkdir(path)
-                .pipe(WritePipe.RESOURCE_TYPE)
-                .expr("/content/fruits")
-                .run();
+        ExecutionResult result = execute("mkdir " + path + " | write @ expr 
/content/fruits");
         assertEquals("result should have 1", 1, result.size());
         Resource root = resolver.getResource(path);
         assertNotNull("target resource should be created", root);
diff --git 
a/src/test/resources/OSGI-INF/org.apache.sling.event.jobs.JobManager.xml 
b/src/test/resources/OSGI-INF/org.apache.sling.event.jobs.JobManager.xml
new file mode 100644
index 0000000..0f09e25
--- /dev/null
+++ b/src/test/resources/OSGI-INF/org.apache.sling.event.jobs.JobManager.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0"; 
name="org.apache.sling.event.jobs.JobManager" configuration-policy="require" 
immediate="true">
+    <implementation class="org.apache.sling.event.jobs.JobManager"/>
+    <service>
+        <provide interface="org.apache.sling.event.jobs.JobManager"/>
+    </service>
+</scr:component>
diff --git 
a/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.CommandExecutorImpl.xml
 
b/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.CommandExecutorImpl.xml
new file mode 100644
index 0000000..e207c3f
--- /dev/null
+++ 
b/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.CommandExecutorImpl.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0"; 
name="org.apache.sling.pipes.internal.CommandExecutorImpl" 
configuration-policy="require" immediate="true" activate="activate">
+    <implementation 
class="org.apache.sling.pipes.internal.CommandExecutorImpl"/>
+    <service>
+        <provide interface="org.apache.sling.pipes.CommandExecutor"/>
+    </service>
+    <reference name="plumber" interface="org.apache.sling.pipes.Plumber" 
field="plumber"/>
+</scr:component>
diff --git 
a/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.PlumberImpl.xml 
b/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.PlumberImpl.xml
new file mode 100644
index 0000000..47bd3c9
--- /dev/null
+++ 
b/src/test/resources/OSGI-INF/org.apache.sling.pipes.internal.PlumberImpl.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.3.0"; 
name="org.apache.sling.pipes.internal.PlumberImpl" 
configuration-policy="require" immediate="true" activate="activate">
+    <implementation class="org.apache.sling.pipes.internal.PlumberImpl"/>
+    <service>
+        <provide interface="org.apache.sling.pipes.Plumber"/>
+    </service>
+    <reference name="factory" 
interface="org.apache.sling.api.resource.ResourceResolverFactory" 
field="factory"/>
+    <reference interface="org.apache.sling.event.jobs.JobManager" 
name="jobManager" field="jobManager"/>
+</scr:component>

Reply via email to