SLING-7251 Fix pipes plumber servlet IT
diff --git a/pom.xml b/pom.xml
index 26a41d4..30384cf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
<parent>
<groupId>org.apache.sling</groupId>
<artifactId>sling</artifactId>
- <version>32</version>
+ <version>33-SNAPSHOT</version>
<relativePath />
</parent>
@@ -71,13 +71,10 @@
<plugin>
<groupId>org.apache.servicemix.tooling</groupId>
<artifactId>depends-maven-plugin</artifactId>
- <executions>
- <execution>
- <goals>
- <goal>generate-depends-file</goal>
- </goals>
- </execution>
- </executions>
+ <!-- see SLING-7351, switch to bnd-maven-plugin and remove configuration -->
+ <configuration>
+ <outputFile>${project.build.directory}/test-classes/META-INF/maven/dependencies.properties</outputFile>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.rat</groupId>
@@ -142,6 +139,11 @@
</dependency>
<dependency>
<groupId>org.osgi</groupId>
+ <artifactId>org.osgi.annotation.versioning</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
<artifactId>osgi.core</artifactId>
<scope>provided</scope>
</dependency>
@@ -257,6 +259,12 @@
<scope>test</scope>
</dependency>
<dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.resource.presence</artifactId>
+ <version>0.0.2</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.ops4j.pax.exam</groupId>
<artifactId>pax-exam</artifactId>
<version>${org.ops4j.pax.exam.version}</version>
@@ -289,7 +297,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.testing.paxexam</artifactId>
- <version>0.0.4</version>
+ <version>1.0.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
<!-- jsoup -->
@@ -314,7 +322,13 @@
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.framework</artifactId>
- <version>5.6.6</version>
+ <version>5.6.10</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>2.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
diff --git a/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java b/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java
index a29e63b..5b69c5d 100644
--- a/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java
+++ b/src/test/java/org/apache/sling/pipes/it/PipesTestSupport.java
@@ -20,37 +20,39 @@
import javax.inject.Inject;
+import org.apache.commons.codec.binary.Base64;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.pipes.Plumber;
-import org.apache.sling.testing.paxexam.SlingOptions;
-import org.apache.sling.testing.paxexam.TestSupport;
import org.apache.sling.auth.core.AuthenticationSupport;
-
+import org.apache.sling.pipes.Plumber;
+import org.apache.sling.resource.presence.ResourcePresence;
+import org.apache.sling.testing.paxexam.TestSupport;
import org.ops4j.pax.exam.Configuration;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.ProbeBuilder;
import org.ops4j.pax.exam.TestProbeBuilder;
-import org.ops4j.pax.exam.util.PathUtils;
+import org.ops4j.pax.exam.util.Filter;
import static org.apache.sling.testing.paxexam.SlingOptions.slingCommonsHtml;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingExtensionDistribution;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingExtensionEvent;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingExtensionQuery;
-import static org.apache.sling.testing.paxexam.SlingOptions.slingLaunchpadOakTar;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingDistribution;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingEvent;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingQuery;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingResourcePresence;
import static org.apache.sling.testing.paxexam.SlingOptions.slingScriptingSightly;
import static org.ops4j.pax.exam.CoreOptions.composite;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.systemPackages;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
public abstract class PipesTestSupport extends TestSupport {
protected static final String NN_TEST = "test";
+ protected static final String ADMIN_CREDENTIALS = "admin:admin";
+
@Inject
protected Plumber plumber;
@@ -62,6 +64,10 @@
final protected int httpPort = findFreePort();
+ @Inject
+ @Filter(value = "(path=/etc/pipes-it)")
+ private ResourcePresence resourcePresence;
+
@Configuration
public Option[] configuration() {
return new Option[]{
@@ -69,65 +75,57 @@
launchpad(),
// Sling Pipes
testBundle("bundle.filename"),
+ factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
+ .put("path", "/etc/pipes-it")
+ .asOption(),
+ factoryConfiguration("org.apache.sling.jcr.repoinit.RepositoryInitializer")
+ .put("scripts", new String[]{"create service user sling-pipes\n\n set ACL for sling-pipes\n\n allow jcr:all on /\n\n end"})
+ .asOption(),
+ factoryConfiguration("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended")
+ .put("user.mapping", new String[]{"org.apache.sling.pipes=sling-pipes"})
+ .asOption(),
// testing
+ slingResourcePresence(),
newConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist")
.put("whitelist.bundles.regexp", "^PAXEXAM.*$")
.asOption(),
+ mavenBundle().groupId("com.google.code.gson").artifactId("gson").versionAsInProject(),
+ mavenBundle().groupId("org.jsoup").artifactId("jsoup").versionAsInProject(),
+ mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(),
junitBundles()
};
}
+ protected String basicAuthorizationHeader(final String credentials) {
+ return "Basic ".concat(new String(Base64.encodeBase64(credentials.getBytes())));
+ }
+
protected void mkdir(ResourceResolver resolver, String path) throws Exception {
plumber.newPipe(resolver).mkdir(path).run();
}
protected Option launchpad() {
final String workingDirectory = workingDirectory();
- SlingOptions.versionResolver.setVersion("org.apache.sling", "org.apache.sling.xss", "1.0.18");
return composite(
- slingLaunchpadOakTar(workingDirectory, httpPort),
- slingExtensionEvent(),
- slingExtensionDistribution(),
- slingExtensionQuery(),
+ slingQuickstartOakTar(workingDirectory, httpPort),
+ slingEvent(),
+ slingDistribution(),
+ slingQuery(),
slingCommonsHtml(),
- mavenBundle().groupId("javax.mail").artifactId("mail").version("1.5.0-b01"),
- slingScriptingSightly(),
- // TODO remove johnzon bundle (should be part of sling in upcoming release of org.apache.sling.testing.paxexam)
- mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.commons.johnzon").versionAsInProject(),
- // TODO required by Jackrabbit Vault (Sling Distribution)
- mavenBundle().groupId("org.jsoup").artifactId("jsoup").versionAsInProject(),
- mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(),
- systemPackages(
- "org.w3c.dom.css",
- "org.w3c.dom.html",
- "org.w3c.dom.ranges",
- "org.w3c.dom.traversal"
- ),
- logging()
+ slingScriptingSightly()
);
}
@ProbeBuilder
public TestProbeBuilder probeConfiguration(final TestProbeBuilder testProbeBuilder) {
testProbeBuilder.setHeader("Sling-Initial-Content",
- "SLING-INF/jcr_root/apps/pipes-it;path:=/apps/pipes-it;overwrite:=true," +
+ "SLING-INF/jcr_root/apps/pipes-it;path:=/apps/pipes-it;overwrite:=true," +
"SLING-INF/jcr_root/etc/pipes-it;path:=/etc/pipes-it;overwrite:=true," +
"SLING-INF/jcr_root/content;path:=/content;overwrite:=true"
);
return testProbeBuilder;
}
- protected Option logging() {
- final String filename = String.format("file:%s/src/test/resources/logback.xml", PathUtils.getBaseDir());
- return composite(
- systemProperty("logback.configurationFile").value(filename),
- mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").version("1.7.21"),
- mavenBundle().groupId("org.slf4j").artifactId("jcl-over-slf4j").version("1.7.21"),
- mavenBundle().groupId("ch.qos.logback").artifactId("logback-core").version("1.1.7"),
- mavenBundle().groupId("ch.qos.logback").artifactId("logback-classic").version("1.1.7")
- );
- }
-
ResourceResolver resolver() throws LoginException {
return resourceResolverFactory.getAdministrativeResourceResolver(null);
}
diff --git a/src/test/java/org/apache/sling/pipes/it/PlumberServletIT.java b/src/test/java/org/apache/sling/pipes/it/PlumberServletIT.java
index 20c08ee..9fc8e83 100644
--- a/src/test/java/org/apache/sling/pipes/it/PlumberServletIT.java
+++ b/src/test/java/org/apache/sling/pipes/it/PlumberServletIT.java
@@ -16,9 +16,12 @@
*/
package org.apache.sling.pipes.it;
-import org.apache.commons.io.IOUtils;
-import org.apache.sling.pipes.internal.JsonWriter;
-import org.apache.sling.pipes.internal.JsonUtil;
+import java.io.IOException;
+import java.util.HashMap;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.jsoup.Jsoup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
@@ -27,33 +30,28 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.json.JsonObject;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.net.URL;
-import java.nio.charset.Charset;
-
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(PaxExam.class)
@ExamReactorStrategy(PerClass.class)
public class PlumberServletIT extends PipesTestSupport {
- private static final Logger LOGGER = LoggerFactory.getLogger(PipeModelIT.class);
+
+ private final GsonBuilder gsonBuilder = new GsonBuilder();
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PlumberServletIT.class);
@Test
public void testListComponentJson() throws IOException {
- final String urlString = String.format("http://localhost:%s/etc/pipes-it/another-list.json", httpPort());
- LOGGER.info("fetching {}", urlString);
- URL url = new URL(urlString);
- StringWriter writer = new StringWriter();
- IOUtils.copy(url.openStream(), writer, Charset.defaultCharset());
- String response = writer.toString();
+ final String url = String.format("http://localhost:%s/etc/pipes-it/another-list.json", httpPort());
+ LOGGER.info("fetching {}", url);
+ final String response = Jsoup.connect(url).header("Authorization", basicAuthorizationHeader(ADMIN_CREDENTIALS)).ignoreContentType(true).execute().body();
LOGGER.info("retrieved following response {}", response);
- JsonObject main = JsonUtil.parseObject(response);
- assertTrue("there should be an items key", main.containsKey(JsonWriter.KEY_ITEMS));
- assertTrue("there should be a size key", main.containsKey(JsonWriter.KEY_SIZE));
- assertEquals("there should be 2 elements", 2, main.getInt(JsonWriter.KEY_SIZE));
+ final Gson gson = gsonBuilder.create();
+ final HashMap main = gson.fromJson(response, HashMap.class);
+ assertTrue("there should be an items key", main.containsKey("items"));
+ assertTrue("there should be a size key", main.containsKey("size"));
+ assertEquals("there should be 2 elements", 2, ((Double) main.get("size")).intValue());
}
}
diff --git a/src/test/resources/logback.xml b/src/test/resources/logback.xml
deleted file mode 100644
index d46a4ae..0000000
--- a/src/test/resources/logback.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<configuration>
- <appender name="file" class="ch.qos.logback.core.FileAppender">
- <file>target/testing.log</file>
- <encoder>
- <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern>
- </encoder>
- </appender>
- <root level="debug">
- <appender-ref ref="file"/>
- </root>
-</configuration>