This is an automated email from the ASF dual-hosted git repository.
bdelacretaz pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-annotations.git
The following commit(s) were added to refs/heads/master by this push:
new 1003355 Sling-10216 - switch to verify.groovy for testing generated
service properties (#4)
1003355 is described below
commit 1003355f8b88c31861e0b685cdb5cc372d891bf7
Author: Bertrand Delacretaz <[email protected]>
AuthorDate: Tue Mar 16 13:33:56 2021 +0100
Sling-10216 - switch to verify.groovy for testing generated service
properties (#4)
---
src/it/annotations-it/pom.xml | 93 +------
.../annotations/AnnotationsTestSupport.java | 123 ---------
.../servlets/annotations/ServicePropertiesIT.java | 116 --------
.../annotations/ServletRegistrationIT.java | 115 --------
.../annotations-it/src/test/resources/logback.xml | 32 ---
src/it/annotations-it/verify.groovy | 300 +++++++++++++++++++++
6 files changed, 303 insertions(+), 476 deletions(-)
diff --git a/src/it/annotations-it/pom.xml b/src/it/annotations-it/pom.xml
index 2c3e253..427fedc 100644
--- a/src/it/annotations-it/pom.xml
+++ b/src/it/annotations-it/pom.xml
@@ -57,6 +57,9 @@
</execution>
</executions>
<configuration>
+ <redirectTestOutputToFile>true</redirectTestOutputToFile>
+ <!-- pax exam bug, often times out at exit -->
+
<forkedProcessExitTimeoutInSeconds>1</forkedProcessExitTimeoutInSeconds>
<systemPropertyVariables>
<bundle.filename>${bundle.filename}</bundle.filename>
<pax.vm.options>${pax.vm.options}</pax.vm.options>
@@ -87,7 +90,6 @@
<version>${annotations.bundle.version}</version>
<scope>provided</scope>
</dependency>
-
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
@@ -105,95 +107,6 @@
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
-
- <!-- testing dependencies -->
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.servlets.resolver</artifactId>
- <version>2.5.2</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.testing.clients</artifactId>
- <!-- for https://issues.apache.org/jira/browse/SLING-7680 -->
- <version>1.2.1-SNAPSHOT</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.testing.rules</artifactId>
- <version>1.0.8</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-api</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-simple</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>osgi.core</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.apache.felix.framework</artifactId>
- <version>6.0.3</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.apache.sling</groupId>
- <artifactId>org.apache.sling.testing.paxexam</artifactId>
- <version>3.1.0</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam</artifactId>
- <version>${org.ops4j.pax.exam.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-cm</artifactId>
- <version>${org.ops4j.pax.exam.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-container-forked</artifactId>
- <version>${org.ops4j.pax.exam.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-junit4</artifactId>
- <version>${org.ops4j.pax.exam.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.exam</groupId>
- <artifactId>pax-exam-link-mvn</artifactId>
- <version>${org.ops4j.pax.exam.version}</version>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId>org.ops4j.pax.url</groupId>
- <artifactId>pax-url-wrap</artifactId>
- <version>2.3.0</version>
- <scope>test</scope>
- </dependency>
</dependencies>
</project>
diff --git
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/AnnotationsTestSupport.java
b/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/AnnotationsTestSupport.java
deleted file mode 100644
index 49137b9..0000000
---
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/AnnotationsTestSupport.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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.
- */
-package org.apache.sling.servlets.annotations;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.servlets.annotations.services.PathBoundService;
-import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
-import org.apache.sling.testing.paxexam.TestSupport;
-import org.junit.BeforeClass;
-import org.junit.ClassRule;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.Option;
-import org.ops4j.pax.exam.junit.PaxExamServer;
-import org.ops4j.pax.exam.options.extra.VMOption;
-
-import static org.apache.sling.testing.paxexam.SlingOptions.logback;
-import static
org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
-import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.when;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.systemProperty;
-
-import java.net.URI;
-import java.net.ServerSocket;
-
-public class AnnotationsTestSupport extends TestSupport {
-
- private final static int STARTUP_WAIT_SECONDS = 30;
-
- protected static OsgiConsoleClient CLIENT;
- protected static int httpPort;
-
- @ClassRule
- public static PaxExamServer serverRule = new PaxExamServer() {
- @Override
- protected void before() throws Exception {
- // Use a different port for each OSGi framework instance
- // that's started - they can overlap if the previous one
- // is not fully stopped when the next one starts.
- setHttpPort();
- super.before();
- }
- };
-
- /** TODO this duplicates TestSupport.findFreePort, which is not static */
- static void setHttpPort() {
- try {
- final ServerSocket serverSocket = new ServerSocket(0);
- httpPort = serverSocket.getLocalPort();
- serverSocket.close();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
-
- @Configuration
- public Option[] configuration() throws Exception {
-
- final String vmOpt = System.getProperty("pax.vm.options");
- VMOption vmOption = null;
- if (StringUtils.isNotEmpty(vmOpt)) {
- vmOption = new VMOption(vmOpt);
- }
-
- final String jacocoOpt = System.getProperty("jacoco.command");
- VMOption jacocoCommand = null;
- if (StringUtils.isNotEmpty(jacocoOpt)) {
- jacocoCommand = new VMOption(jacocoOpt);
- }
-
- final String workingDirectory = workingDirectory();
-
- return composite(
- // TODO not sure why the below list of bundles is different from
- // running tests with PaxExam.class - but this setup works
- //super.baseConfiguration(),
-
- when(vmOption != null).useOptions(vmOption),
- when(jacocoCommand != null).useOptions(jacocoCommand),
-
- // For some reason, Jetty starts first on port 8080 without this
-
systemProperty("org.osgi.service.http.port").value(String.valueOf(httpPort)),
-
- slingQuickstartOakTar(workingDirectory, httpPort),
- testBundle("bundle.filename"),
-
- logback(),
-
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.log").version("1.2.4"),
-
mavenBundle().groupId("log4j").artifactId("log4j").version("1.2.17"),
-
mavenBundle().groupId("org.apache.aries.spifly").artifactId("org.apache.aries.spifly.dynamic.framework.extension").version("1.3.2"),
-
mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.webconsole.plugins.ds").version("2.1.0")
-
- ).getOptions();
- }
-
- @BeforeClass
- public static void waitForSling() throws Exception {
- final URI url = new URI(String.format("http://localhost:%d",
httpPort));
- CLIENT = new OsgiConsoleClient(url, "admin", "admin");
- CLIENT.waitExists("/", STARTUP_WAIT_SECONDS * 1000, 500);
- CLIENT.waitComponentRegistered(PathBoundService.class.getName(), 10 *
1000, 500);
-
- // Verify stable status for a bit
- for(int i=0; i < 10 ; i++) {
- CLIENT.waitComponentRegistered(PathBoundService.class.getName(),
1000, 100);
- Thread.sleep(100);
- }
- }
-}
diff --git
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServicePropertiesIT.java
b/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServicePropertiesIT.java
deleted file mode 100644
index 70171a1..0000000
---
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServicePropertiesIT.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.
- */
-package org.apache.sling.servlets.annotations;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.sling.servlets.annotations.services.PathBoundService;
-import
org.apache.sling.servlets.annotations.services.PathBoundStrictAllOptionsService;
-import
org.apache.sling.servlets.annotations.services.PathBoundStrictJustPathService;
-import org.apache.sling.testing.clients.ClientException;
-import org.apache.sling.testing.clients.util.JsonUtils;
-import org.codehaus.jackson.JsonNode;
-import org.junit.Test;
-
-/** Assuming servlet selection is tested in the servlets resolver module,
- * it's good enough to verify that the expected OSGi service properties
- * are set by our annotations - this is what this class does for some of
- * our test services.
- */
-public class ServicePropertiesIT extends AnnotationsTestSupport {
-
- private static String componentPath(Object nameOrId) {
- return "/system/console/components/" + nameOrId + ".json";
- }
-
- /** Getting service properties is not directly supported by the
OsgiConsoleClient */
- private List<String> getServiceProperties(String serviceName) throws
ClientException {
- // Need to get the component ID first, then its details
- final List<String> result = new ArrayList<>();
- final JsonNode idInfo =
JsonUtils.getJsonNodeFromString(CLIENT.doGet(componentPath(serviceName)).getContent());
- final String id = idInfo.get("data").get(0).get("id").getTextValue();
- assertTrue("Expecting non-null component ID", !id.equals("null"));
- final JsonNode details =
JsonUtils.getJsonNodeFromString(CLIENT.doGet(componentPath(id)).getContent());
- final JsonNode data = details.get("data").get(0);
- final JsonNode props = data.get("props");
- for(JsonNode prop : props) {
- if("Properties".equals(prop.get("key").getTextValue())) {
- for(JsonNode value : prop.get("value")) {
- result.add(value.getTextValue().replaceAll(" ",
"").trim());
- }
- }
- }
- return result;
- }
-
- private void assertProperty(List<String> props, String key, String value) {
- final String pattern = key + "=" + value;
- assertTrue(
- "Expecting " + pattern + " in " + props,
- props.stream().anyMatch(line -> line.equals(pattern))
- );
- }
-
- private void assertAbsentProperties(List<String> props, String ... keys) {
- for(String key : keys) {
- assertFalse(
- "Expecting " + key + " to be absent in " + props,
- props.stream().anyMatch(line -> line.startsWith(key))
- );
- }
- }
-
- @Test
- public void testPathBoundService() throws ClientException {
- final List<String> props =
getServiceProperties(PathBoundService.class.getName());
- assertProperty(props, "sling.servlet.paths", "[PathBoundServicePath]");
- assertAbsentProperties(
- props,
- "sling.servlet.extensions",
- "sling.servlet.selectors",
- "sling.servlet.methods",
- "sling.servlet.paths.strict"
- );
- }
-
- @Test
- public void testPathBoundStrictAllOptionsService() throws ClientException {
- final List<String> props =
getServiceProperties(PathBoundStrictAllOptionsService.class.getName());
- assertProperty(props, "sling.servlet.paths.strict", "true");
- assertProperty(props, "sling.servlet.paths", "[P1,P2]");
- assertProperty(props, "sling.servlet.extensions", "[E1,E2]");
- assertProperty(props, "sling.servlet.selectors", "[S1,S2]");
- assertProperty(props, "sling.servlet.methods", "[M1,M2]");
- }
-
- @Test
- public void testPathBoundStrictJustPathService() throws ClientException {
- final List<String> props =
getServiceProperties(PathBoundStrictJustPathService.class.getName());
- assertProperty(props, "sling.servlet.paths.strict", "true");
- assertProperty(props, "sling.servlet.paths", "[JustThePath]");
- assertAbsentProperties(
- props,
- "sling.servlet.extensions",
- "sling.servlet.selectors",
- "sling.servlet.methods"
- );
- }
-}
diff --git
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServletRegistrationIT.java
b/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServletRegistrationIT.java
deleted file mode 100644
index ccdf406..0000000
---
a/src/it/annotations-it/src/test/java/org/apache/sling/servlets/annotations/ServletRegistrationIT.java
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * 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.
- */
-package org.apache.sling.servlets.annotations;
-
-import java.io.UnsupportedEncodingException;
-import java.util.Collections;
-
-import org.apache.http.entity.StringEntity;
-import org.apache.sling.testing.clients.ClientException;
-import org.junit.Test;
-
-/** Verify servlet selection based on our annotations. This duplicates
- * some of the servlet resolver tests, see also {@link ServicePropertiesIT}
- * for another testing method.
- */
-public class ServletRegistrationIT extends AnnotationsTestSupport {
-
- @Test
- public void testPathBoundServlet() throws ClientException,
UnsupportedEncodingException {
- CLIENT.doGet("/bin/PathBoundServlet", 555);
- CLIENT.doGet("/bin/PathBoundServlet.with.some.selector.and.extension",
555);
-
CLIENT.doGet("/bin/PathBoundServlet.with.some.selector.and.extension/suffix",
555);
- // other methods should work as well
- CLIENT.doPut("/bin/PathBoundServlet", new StringEntity("some text"),
Collections.emptyList(), 557);
- }
-
- @Test
- public void testPathBoundServletWithFilter() throws ClientException {
- CLIENT.doGet("/bin/PathBoundServlet.html/simplefilter", 556);
-
CLIENT.doGet("/bin/PathBoundServlet.with.some.selector.and.extension/simplefilter",
556);
- }
-
- @Test
- public void testPathBoundServletWithPrefix() throws ClientException {
- CLIENT.doGet("/bin/PathBoundServletWithPrefix", 610);
-
CLIENT.doGet("/bin/PathBoundServletWithPrefix.with.some.selector.and.extension",
610);
- }
-
- @Test
- public void testResourceTypeBoundServlet() throws ClientException,
UnsupportedEncodingException {
- CLIENT.doGet("/content/servlettest/resourceTypeBoundServlet", 560);
- CLIENT.doGet("/content/servlettest/resourceTypeBoundServlet.html",
560);
- CLIENT.doGet("/content/servlettest/resourceTypeBoundServlet.json",
560);
- // only GET and HEAD are supposed to be working
- CLIENT.doPut("/content/servlettest/resourceTypeBoundServlet.json", new
StringEntity("some text"), Collections.emptyList(), 405);
- }
-
- @Test
- public void testResourceTypeBoundServletWithPrefix() throws
ClientException, UnsupportedEncodingException {
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithPrefix", 590);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithPrefix.html",
590);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithPrefix.json",
590);
- // only GET and HEAD are supposed to be working
-
CLIENT.doPut("/content/servlettest/resourceTypeBoundServletWithPrefix.json",
new StringEntity("some text"), Collections.emptyList(), 405);
- }
-
- @Test
- public void testResourceTypeBoundServletWithExtension() throws
ClientException, UnsupportedEncodingException {
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithExtension",
403); // without extension is a index listing, which is forbidden by default
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithExtension.html",
200); // DEFAULT GET Servlet
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithExtension.ext1",
570);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithExtension.ext2",
570);
-
CLIENT.doPut("/content/servlettest/resourceTypeBoundServletWithExtension.ext2",
new StringEntity("some text"), Collections.emptyList(), 571);
- // extension is considered for all methods!
-
CLIENT.doPut("/content/servlettest/resourceTypeBoundServletWithExtension.someotherext",
new StringEntity("some text"), Collections.emptyList(), 405); // DEFAULT
servlet
- }
-
- @Test
- public void testResourceTypeBoundServletWithSelectors() throws
ClientException, UnsupportedEncodingException {
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.someext",
404);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.selector1.someext",
404);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.selector3.someext",
600);
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.selector1.selector2.someext",
600);
- // some non-registered selector as first selector
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.someotherselector.selector1.selector2.someext",
404);
- // some non-registered selector as last selector
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithSelectors.selector1.selector2.someotherselector.someext",
600);
- // only GET and HEAD are supposed to be working
-
CLIENT.doPut("/content/servlettest/resourceTypeBoundServletWithSelectors.selector3.someext",
new StringEntity("some text"), Collections.emptyList(), 405);
- }
-
- @Test
- public void testResourceTypeBoundServletWithMethods() throws
ClientException, UnsupportedEncodingException {
-
CLIENT.doGet("/content/servlettest/resourceTypeBoundServletWithMethods.someext",
404); // DEFAULT Get not triggered due to weird extension
-
CLIENT.doPut("/content/servlettest/resourceTypeBoundServletWithMethods.someext",
new StringEntity("some text"), Collections.emptyList(), 581);
-
CLIENT.doPost("/content/servlettest/resourceTypeBoundServletWithMethods.someext",
new StringEntity("some text"), Collections.emptyList(), 582);
- }
-
- @Test
- public void testInheritingServlets() throws ClientException {
-
CLIENT.doGet("/content/servlettest/baseResourceTypeBoundServletWithSelectors",
403); // no selectors passed
-
CLIENT.doGet("/content/servlettest/baseResourceTypeBoundServletWithSelectors.someext",
404); // no selectors passed
-
CLIENT.doGet("/content/servlettest/baseResourceTypeBoundServletWithSelectors.sel1.someext",
610); // matches
-
CLIENT.doGet("/content/servlettest/baseResourceTypeBoundServletWithSelectors.sel2.someext",
610); // matches
-
CLIENT.doGet("/content/servlettest/inheritingResourceTypeBoundServlet", 620);
// matches
-
CLIENT.doGet("/content/servlettest/inheritingResourceTypeBoundServlet.someext",
620); // matches
-
CLIENT.doGet("/content/servlettest/inheritingResourceTypeBoundServlet.sel.someext",
620); // matches
-
CLIENT.doGet("/content/servlettest/inheritingResourceTypeBoundServlet.sel1.someext",
610); // delegated to Base
-
CLIENT.doGet("/content/servlettest/inheritingResourceTypeBoundServlet.sel2.someext",
610); // delegated to Base
- }
-}
\ No newline at end of file
diff --git a/src/it/annotations-it/src/test/resources/logback.xml
b/src/it/annotations-it/src/test/resources/logback.xml
deleted file mode 100644
index a603c15..0000000
--- a/src/it/annotations-it/src/test/resources/logback.xml
+++ /dev/null
@@ -1,32 +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/test.log</file>
- <append>true</append>
- <encoder>
- <pattern>%date level=%level thread=%thread logger=%logger
sourcefile=%file line=%line %mdc message=%msg%n</pattern>
- </encoder>
- </appender>
-
- <root level="info">
- <appender-ref ref="file"/>
- </root>
-</configuration>
diff --git a/src/it/annotations-it/verify.groovy
b/src/it/annotations-it/verify.groovy
new file mode 100644
index 0000000..637b595
--- /dev/null
+++ b/src/it/annotations-it/verify.groovy
@@ -0,0 +1,300 @@
+/*
+ * 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.
+ */
+
+// Verify the OSGI-INF xml files generated by the bnd plugin based
+// on our annotations
+
+def INVALID_CONFIG = 'Configuration is invalid'
+
+// Utility functions
+def getXml(filename) {
+ return new XmlSlurper().parse(new File(basedir, "target/classes/OSGI-INF/"
+ filename))
+}
+
+def assertTypedAttribute(xml, name, type, value) {
+ def errorMsg = name + " " + type + " attribute does not match " + value
+ assert(xml.property.find{ it.@name == name && it.@type == type &&
it.@value == value }) : errorMsg
+}
+
+def assertProperty(xml, name, type, String [] expected) {
+ def linesFromXml = xml.property.find{ it.@name == name && it.@type == type
}.toString().split('\n')
+ expected.each {
+ def errorMsg = name + " " + type + " does not contain " + it
+ assert(linesFromXml.contains(it)) : errorMsg
+ }
+ assert(linesFromXml.length == expected.length)
+}
+
+def assertNoProperty(xml, String [] names) {
+ names.each {
+ def name = it
+ xml.property.find{ it.@name == name }.each {
+ assert(false) : "did not expect " + it + " for " + name
+ }
+ }
+}
+
+// The actual tests
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.services.PathBoundService.xml")
+ assertProperty(xml, 'sling.servlet.paths', 'String',
'PathBoundServicePath')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.services.PathBoundStrictAllOptionsService.xml")
+ assertProperty(xml, 'sling.servlet.paths', 'String', 'P1', 'P2')
+ assertProperty(xml, 'sling.servlet.selectors', 'String', 'S1', 'S2')
+ assertProperty(xml, 'sling.servlet.extensions', 'String', 'E1', 'E2')
+ assertProperty(xml, 'sling.servlet.methods', 'String', 'M1', 'M2')
+ assertTypedAttribute(xml, 'sling.servlet.paths.strict', 'Boolean', 'true')
+ assertNoProperty(xml,
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.services.PathBoundStrictJustPathService.xml")
+ assertProperty(xml, 'sling.servlet.paths', 'String', 'JustThePath')
+ assertTypedAttribute(xml, 'sling.servlet.paths.strict', 'Boolean', 'true')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservletfilters.SimpleServletFilter.xml")
+ assertProperty(xml, 'sling.filter.scope', 'String', 'REQUEST')
+ assertProperty(xml, 'sling.filter.pattern', 'String', '')
+ assertProperty(xml, 'sling.filter.resource.pattern', 'String', '')
+ assertProperty(xml, 'sling.filter.request.pattern', 'String', '')
+ assertProperty(xml, 'sling.filter.suffix.pattern', 'String', '')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.servlet.selectors',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.BaseResourceTypeBoundServletWithSelectors.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'sling/testservlets/BaseResourceTypeBoundServletWithSelectors')
+ assertProperty(xml, 'sling.servlet.selectors', 'String', 'sel1', 'sel2')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.InheritingResourceTypeBoundServlet.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'sling/testservlets/InheritingResourceTypeBoundServlet')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/testservlets/BaseResourceTypeBoundServletWithSelectors')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.PathBoundServlet.xml")
+ assertProperty(xml, 'sling.servlet.paths', 'String',
'/bin/PathBoundServlet')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.PathBoundServletWithPrefix.xml")
+ assertProperty(xml, 'sling.servlet.paths', 'String',
'PathBoundServletWithPrefix')
+ assertTypedAttribute(xml, 'sling.servlet.prefix', 'String', '/bin/')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.resourceTypes',
+ 'sling.servlet.resourceSuperType',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.ResourceTypeBoundServlet.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'/apps/sling/testservlets/ResourceTypeBoundServlet')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.ResourceTypeBoundServletWithExtension.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'/apps/sling/testservlets/ResourceTypeBoundServletWithExtension')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertProperty(xml, 'sling.servlet.extensions', 'String', 'ext1', 'ext2')
+ assertProperty(xml, 'sling.servlet.methods', 'String', 'PUT', 'GET')
+ assertNoProperty(xml,
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.ResourceTypeBoundServletWithMethods.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'/apps/sling/testservlets/ResourceTypeBoundServletWithMethods')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertProperty(xml, 'sling.servlet.methods', 'String', 'PUT', 'POST')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.ResourceTypeBoundServletWithPrefix.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'ResourceTypeBoundServletWithPrefix')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertTypedAttribute(xml, 'sling.servlet.prefix', 'String',
'/apps/sling/testservlets/')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.servlet.selectors',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+
+ )
+}
+
+{
+ def
xml=getXml("org.apache.sling.servlets.annotations.testservlets.ResourceTypeBoundServletWithSelectors.xml")
+ assertProperty(xml, 'sling.servlet.resourceTypes', 'String',
'/apps/sling/testservlets/ResourceTypeBoundServletWithSelectors')
+ assertTypedAttribute(xml, 'sling.servlet.resourceSuperType', 'String',
'sling/bundle/resource')
+ assertProperty(xml, 'sling.servlet.selectors', 'String',
'selector1.selector2','selector3')
+ assertNoProperty(xml,
+ 'sling.servlet.extensions',
+ 'sling.servlet.methods',
+ 'sling.servlet.paths',
+ 'sling.servlet.paths.strict',
+ 'sling.filter.scope',
+ 'sling.filter.pattern',
+ 'sling.filter.resource.pattern',
+ 'sling.filter.request.pattern',
+ 'sling.filter.suffix.pattern',
+ 'sling.servlet.prefix',
+ )
+}
+
+return true