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>