You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2020/11/12 14:29:07 UTC

[sling-org-apache-sling-adapter-annotations] branch SLING-9903 created (now c3a13f0)

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

bdelacretaz pushed a change to branch SLING-9903
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-adapter-annotations.git.


      at c3a13f0  SLING-9903 - check the OSGI-INF XML files instead of running Sling for integration tests

This branch includes the following new commits:

     new c3a13f0  SLING-9903 - check the OSGI-INF XML files instead of running Sling for integration tests

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sling-org-apache-sling-adapter-annotations] 01/01: SLING-9903 - check the OSGI-INF XML files instead of running Sling for integration tests

Posted by bd...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bdelacretaz pushed a commit to branch SLING-9903
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-adapter-annotations.git

commit c3a13f04e4ff1686bd6e2c32ed641a0c6165c8c7
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Thu Nov 12 15:27:04 2020 +0100

    SLING-9903 - check the OSGI-INF XML files instead of running Sling for integration tests
---
 pom.xml                                            |    7 +
 src/it/annotations-it/pom.xml                      |  127 ---
 .../adapter/annotations/AdapterAnnotationsIT.java  |   40 -
 .../adapter/annotations/AdapterRegistrationIT.java |  128 ---
 .../sling/adapter/annotations/AdapterStatusIT.java |  104 --
 .../adapter/annotations/ServicePropertiesIT.java   |  180 ----
 .../adapter/annotations/util/AppConstants.java     |   26 -
 .../adapter/annotations/util/AppSlingClient.java   |   67 --
 .../sling/adapter/annotations/util/Util.java       |   68 --
 .../src/test/provisioning/it-model.txt             | 1038 --------------------
 src/it/annotations-it/verify.groovy                |   91 ++
 11 files changed, 98 insertions(+), 1778 deletions(-)

diff --git a/pom.xml b/pom.xml
index 758bb53..744b6d7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,13 @@
                     <!-- this causes verbose output, probably good to have for CI builds? -->
                     <streamLogs>true</streamLogs>
                 </configuration>
+                <dependencies>
+                    <dependency>
+                        <groupId>org.codehaus.groovy</groupId>
+                        <artifactId>groovy</artifactId>
+                        <version>3.0.6</version>
+                    </dependency>
+                </dependencies>
                 <executions>
                     <execution>
                         <id>integration-test</id>
diff --git a/src/it/annotations-it/pom.xml b/src/it/annotations-it/pom.xml
index c1fcc34..a26ad3f 100644
--- a/src/it/annotations-it/pom.xml
+++ b/src/it/annotations-it/pom.xml
@@ -48,113 +48,10 @@
     <build>
         <plugins>
             <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <version>3.0.0-M5</version>
-            </plugin>
-            <plugin>
                 <groupId>biz.aQute.bnd</groupId>
                 <artifactId>bnd-maven-plugin</artifactId>
                 <version>5.0.0</version>
             </plugin>
-            <plugin>
-                <!-- Find free ports to run our server -->
-                <groupId>org.codehaus.mojo</groupId>
-                <artifactId>build-helper-maven-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <id>reserve-server-port</id>
-                        <goals>
-                            <goal>reserve-network-port</goal>
-                        </goals>
-                        <phase>pre-integration-test</phase>
-                        <configuration>
-                            <portNames>
-                                <!-- used port name must be stored in property because it must be used for the base url -->
-                                <portName>http.port</portName>
-                            </portNames>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-            <plugin>
-                <!-- the Sling instance is provisioned from the model in src/main/provisioning/it-model.txt -->
-                <groupId>org.apache.sling</groupId>
-                <artifactId>slingstart-maven-plugin</artifactId>
-                <!-- for https://issues.apache.org/jira/browse/SLING-7662 -->
-                <version>1.9.8</version>
-                <extensions>true</extensions>
-                <executions>
-                    <execution>
-                        <id>customise-starter</id>
-                        <goals>
-                            <goal>prepare-package</goal>
-                        </goals>
-                        <configuration>
-                            <modelDirectory>${project.basedir}/src/test/provisioning</modelDirectory>
-                            <usePomDependencies>false</usePomDependencies>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>package-starter</id>
-                        <goals>
-                            <goal>package</goal>
-                        </goals>
-                        <configuration>
-                            <attachArtifact>false</attachArtifact>
-                            <modelDirectory>${project.basedir}/src/test/provisioning</modelDirectory>
-                            <usePomDependencies>true</usePomDependencies>
-                        </configuration>
-                    </execution>
-                    <execution>
-                        <id>start-container-before-IT</id>
-                        <goals>
-                            <goal>start</goal>
-                        </goals>
-                    </execution>
-                    <execution>
-                        <id>stop-container-after-IT</id>
-                        <goals>
-                            <goal>stop</goal>
-                        </goals>
-                        <configuration>
-                            <shouldBlockUntilKeyIsPressed>${keepITServerRunning}</shouldBlockUntilKeyIsPressed>
-                        </configuration>
-                    </execution>
-                </executions>
-                <configuration>
-                    <servers>
-                        <!-- this configuration applies to both 'start' and 'stop' -->
-                        <server>
-                            <id>singleinstance</id>
-                            <port>${http.port}</port>
-                            <vmOpts>${sling.vm.options}</vmOpts>
-                            <stdOutFile>sling/logs/stdout.log</stdOutFile>
-                        </server>
-                    </servers>
-                    <!-- this configuration only applies to 'prepare-package' and 'package' -->
-                    <disableExtendingMavenClasspath>true</disableExtendingMavenClasspath>
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-failsafe-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>integration-test</goal>
-                            <goal>verify</goal>
-                        </goals>
-                    </execution>
-                </executions>
-                <configuration>
-                    <systemPropertyVariables>
-                        <baseUrl>http://${http.host}:${http.port}/</baseUrl>
-                        <bundleFile>${project.build.directory}/${project.build.finalName}.jar</bundleFile>
-                        <bundleSymbolicName>${project.artifactId}</bundleSymbolicName>
-                    </systemPropertyVariables>
-                </configuration>
-            </plugin>
         </plugins>
     </build>
 
@@ -190,29 +87,5 @@
             <artifactId>javax.servlet-api</artifactId>
             <scope>provided</scope>
         </dependency>
-
-        <!-- testing dependencies -->
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpcore</artifactId>
-            <version>4.4.13</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.testing.clients</artifactId>
-            <version>2.0.6</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.osgi</groupId>
-            <artifactId>osgi.core</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterAnnotationsIT.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterAnnotationsIT.java
deleted file mode 100644
index a24da5b..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterAnnotationsIT.java
+++ /dev/null
@@ -1,40 +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.adapter.annotations;
-
-import org.apache.sling.testing.clients.ClientException;
-import org.junit.Test;
-
-public interface AdapterAnnotationsIT {
-    @Test
-    void testLongToIntegerIfFitsAdapterFactory() throws ClientException;
-
-    @Test
-    void testTextLengthIfFitsAdapterFactory() throws ClientException;
-
-    @Test
-    void testShortToIntegerAndLongAdapterFactory() throws ClientException;
-
-    @Test
-    void testIntegerAndShortToLongAdapterFactory() throws ClientException;
-
-    @Test
-    void testDeprecatedAdapterFactory() throws ClientException;
-
-    @Test
-    void testInvalidAdapterFactories() throws ClientException;
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterRegistrationIT.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterRegistrationIT.java
deleted file mode 100644
index 1b60716..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterRegistrationIT.java
+++ /dev/null
@@ -1,128 +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.adapter.annotations;
-
-import com.google.common.collect.ImmutableMap;
-import org.apache.sling.adapter.Adaption;
-import org.apache.sling.adapter.annotations.util.AppSlingClient;
-import org.apache.sling.adapter.annotations.util.Util;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.adapter.AdapterFactory;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.testing.clients.ClientException;
-import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
-import org.apache.sling.testing.clients.osgi.ServiceInfo;
-import org.apache.sling.testing.clients.osgi.ServicesInfo;
-import org.apache.sling.testing.clients.util.JsonUtils;
-import org.codehaus.jackson.JsonNode;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.osgi.framework.Constants;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeoutException;
-import java.util.function.UnaryOperator;
-
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
-
-public class AdapterRegistrationIT implements AdapterAnnotationsIT {
-    private static Set<Map<String, Object>> registeredAdaptions;
-
-    @BeforeClass
-    public static void setUpAdaptions() throws ClientException, InterruptedException, TimeoutException, URISyntaxException, IOException {
-        try (final OsgiConsoleClient client = AppSlingClient.newSlingClient().adaptTo(OsgiConsoleClient.class)) {
-            registeredAdaptions = new HashSet<>();
-            final String servicesJsonString = client.doGet("/system/console/services.json").getContent();
-            final ServicesInfo services = new ServicesInfo(JsonUtils.getJsonNodeFromString(servicesJsonString));
-            for (final ServiceInfo serviceInfo : services.forType(Adaption.class.getName())) {
-                final String serviceJsonString = client.doGet("/system/console/services/" + serviceInfo.getId() + ".json").getContent();
-                try {
-                    final JsonNode serviceJson = JsonUtils.getJsonNodeFromString(serviceJsonString);
-                    registeredAdaptions.add(Util.getNonDynamicPropertiesForService(serviceJson));
-                } catch (final ClientException e) {
-                    System.err.println("Unable to find proper JSON content for " + serviceJsonString + " - skipping.");
-                    e.printStackTrace(System.err);
-                }
-            }
-        }
-    }
-
-    @Override
-    @Test
-    public void testLongToIntegerIfFitsAdapterFactory() {
-        assertAdaption(properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Long.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Integer.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testTextLengthIfFitsAdapterFactory() {
-        assertAdaption(properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Arrays.asList(CharSequence.class.getName(), String.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Arrays.asList(
-                        Short.class.getName(),
-                        Integer.class.getName(),
-                        Long.class.getName(),
-                        BigInteger.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testShortToIntegerAndLongAdapterFactory() {
-        assertAdaption(properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Short.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Arrays.asList(Integer.class.getName(), Long.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testIntegerAndShortToLongAdapterFactory() {
-        assertAdaption(properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Arrays.asList(Integer.class.getName(), Short.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Long.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testDeprecatedAdapterFactory() {
-        assertAdaption(properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(SlingHttpServletRequest.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Resource.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testInvalidAdapterFactories() {
-        assertFalse(registeredAdaptions.stream().anyMatch(properties -> properties.containsValue(Collections.singletonList(Void.class.getName()))));
-    }
-
-    private static void assertAdaption(final UnaryOperator<ImmutableMap.Builder<String, Object>> properties) {
-        assertThat(registeredAdaptions, hasItem(properties.apply(ImmutableMap.<String, Object>builder()
-                .put(Constants.SERVICE_SCOPE, Constants.SCOPE_SINGLETON)
-        ).build()));
-    }
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterStatusIT.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterStatusIT.java
deleted file mode 100644
index 4760138..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/AdapterStatusIT.java
+++ /dev/null
@@ -1,104 +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.adapter.annotations;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.adapter.annotations.testing.adapters.AbstractNoOpAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.LongToIntegerIfFitsAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.TextLengthIfFitsAdapterFactory;
-import org.apache.sling.adapter.annotations.util.AppConstants;
-import org.apache.sling.adapter.annotations.util.AppSlingClient;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.testing.clients.ClientException;
-import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URISyntaxException;
-import java.util.concurrent.TimeoutException;
-
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.CoreMatchers.not;
-import static org.junit.Assert.assertThat;
-
-public class AdapterStatusIT implements AdapterAnnotationsIT {
-    private static String adaptersStatus;
-
-    @BeforeClass
-    public static void setUpAdaptersStatus() throws ClientException, InterruptedException, TimeoutException, URISyntaxException, IOException {
-        try (final OsgiConsoleClient client = AppSlingClient.newSlingClient().adaptTo(OsgiConsoleClient.class)) {
-            adaptersStatus = client.doGet("/system/console/status-adapters.txt").getContent();
-            adaptersStatus = StringUtils.replace(adaptersStatus, "\r", StringUtils.EMPTY); // Prevent platform-specific issues
-        }
-    }
-
-    @Override
-    @Test
-    public void testLongToIntegerIfFitsAdapterFactory() {
-        assertAdapterDescriptor(Long.class, LongToIntegerIfFitsAdapterFactory.CONDITION, Integer.class);
-    }
-
-    @Override
-    @Test
-    public void testShortToIntegerAndLongAdapterFactory() {
-        assertAdapterDescriptor(Short.class, null, Integer.class, Long.class);
-    }
-
-    @Override
-    @Test
-    public void testIntegerAndShortToLongAdapterFactory() {
-        assertAdapterDescriptor(Integer.class, null, Long.class);
-        assertAdapterDescriptor(Short.class, null, Long.class);
-    }
-
-    @Override
-    @Test
-    public void testTextLengthIfFitsAdapterFactory() {
-        assertAdapterDescriptor(CharSequence.class, TextLengthIfFitsAdapterFactory.CONDITION, Short.class, Integer.class, Long.class, BigInteger.class);
-        assertAdapterDescriptor(String.class, TextLengthIfFitsAdapterFactory.CONDITION, Short.class, Integer.class, Long.class, BigInteger.class);
-    }
-
-    @Override
-    @Test
-    public void testDeprecatedAdapterFactory() {
-        // Deprecated status is not dumped on the status page
-        assertAdapterDescriptor(SlingHttpServletRequest.class, null, Resource.class);
-    }
-
-    @Override
-    @Test
-    public void testInvalidAdapterFactories() {
-        assertThat(adaptersStatus, not(containsString("\nCondition: " + AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE + "\n")));
-    }
-
-    private static void assertAdapterDescriptor(final Class<?> adaptable, final String condition, final Class<?>... adapters) {
-        final StringBuilder descriptor = new StringBuilder("\nAdaptable: ").append(adaptable.getName()).append("\n");
-        if (condition != null) {
-            descriptor.append("Condition: ").append(condition).append("\n");
-        }
-        descriptor.append("Providing Bundle: ").append(AppConstants.BUNDLE_SYMBOLIC_NAME).append("\n");
-        descriptor.append("Available Adapters:\n");
-        for (final Class<?> adapter : adapters) {
-            descriptor.append(" * ").append(adapter.getName()).append("\n");
-        }
-        descriptor.append("\n");
-        assertThat(adaptersStatus, containsString(descriptor.toString()));
-    }
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/ServicePropertiesIT.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/ServicePropertiesIT.java
deleted file mode 100644
index 2d896d4..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/ServicePropertiesIT.java
+++ /dev/null
@@ -1,180 +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.adapter.annotations;
-
-import com.google.common.collect.ImmutableMap;
-import org.apache.sling.adapter.annotations.testing.adapters.AbstractNoOpAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.DeprecatedAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.InvalidNoAdaptablesAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.InvalidEmptyAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.InvalidNoAdaptersAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.ShortToIntegerAndLongAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.LongToIntegerIfFitsAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.IntegerAndShortToLongAdapterFactory;
-import org.apache.sling.adapter.annotations.testing.adapters.TextLengthIfFitsAdapterFactory;
-import org.apache.sling.adapter.annotations.util.AppSlingClient;
-import org.apache.sling.adapter.annotations.util.Util;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.adapter.AdapterFactory;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.testing.clients.ClientException;
-import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
-import org.apache.sling.testing.clients.util.JsonUtils;
-import org.codehaus.jackson.JsonNode;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.osgi.framework.Constants;
-import org.osgi.service.component.ComponentConstants;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Map;
-import java.util.concurrent.TimeoutException;
-import java.util.function.UnaryOperator;
-
-import static org.junit.Assert.assertEquals;
-
-public class ServicePropertiesIT implements AdapterAnnotationsIT {
-    private static final String ADAPTER_CONDITION = "adapter.condition";
-    private static final String ADAPTER_DEPRECATED = "adapter.deprecated";
-
-    private static OsgiConsoleClient client;
-
-    @BeforeClass
-    public static void setUpOnce() throws InterruptedException, TimeoutException, ClientException, URISyntaxException {
-        client = AppSlingClient.newSlingClient().adaptTo(OsgiConsoleClient.class);
-    }
-
-    @AfterClass
-    public static void tearDown() throws IOException {
-        if (client != null) {
-            client.close();
-        }
-    }
-
-    @Override
-    @Test
-    public void testLongToIntegerIfFitsAdapterFactory() throws ClientException {
-        assertProperties(LongToIntegerIfFitsAdapterFactory.class.getName(), properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Long.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Integer.class.getName()))
-                .put(ADAPTER_CONDITION, LongToIntegerIfFitsAdapterFactory.CONDITION));
-    }
-
-    @Override
-    @Test
-    public void testTextLengthIfFitsAdapterFactory() throws ClientException {
-        assertProperties(TextLengthIfFitsAdapterFactory.class.getName(), properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Arrays.asList(CharSequence.class.getName(), String.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Arrays.asList(
-                        Short.class.getName(),
-                        Integer.class.getName(),
-                        Long.class.getName(),
-                        BigInteger.class.getName()
-                ))
-                .put(ADAPTER_CONDITION, TextLengthIfFitsAdapterFactory.CONDITION));
-    }
-
-    @Override
-    @Test
-    public void testShortToIntegerAndLongAdapterFactory() throws ClientException {
-        assertProperties(ShortToIntegerAndLongAdapterFactory.class.getName(), properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Short.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Arrays.asList(Integer.class.getName(), Long.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testIntegerAndShortToLongAdapterFactory() throws ClientException {
-        assertProperties(IntegerAndShortToLongAdapterFactory.class.getName(), properties -> properties
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Arrays.asList(Integer.class.getName(), Short.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Long.class.getName())));
-    }
-
-    @Test
-    public void testInvalidMissingAdaptablesAndAdaptersAdapter() throws ClientException {
-        assertProperties(InvalidEmptyAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE));
-    }
-
-    @Test
-    public void testInvalidMissingAdaptablesAdapter() throws ClientException {
-        assertProperties(InvalidNoAdaptablesAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE)
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Void.class.getName())));
-    }
-
-    @Test
-    public void testInvalidMissingAdaptersAdapter() throws ClientException {
-        assertProperties(InvalidNoAdaptersAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE)
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Void.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testDeprecatedAdapterFactory() throws ClientException {
-        assertProperties(DeprecatedAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_DEPRECATED, true)
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(SlingHttpServletRequest.class.getName()))
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Resource.class.getName())));
-    }
-
-    @Override
-    @Test
-    public void testInvalidAdapterFactories() throws ClientException {
-        assertProperties(InvalidEmptyAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE));
-        assertProperties(InvalidNoAdaptablesAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE)
-                .put(AdapterFactory.ADAPTER_CLASSES, Collections.singletonList(Void.class.getName())));
-        assertProperties(InvalidNoAdaptersAdapterFactory.class.getName(), properties -> properties
-                .put(ADAPTER_CONDITION, AbstractNoOpAdapterFactory.INVALID_CONFIGURATION_MESSAGE)
-                .put(AdapterFactory.ADAPTABLE_CLASSES, Collections.singletonList(Void.class.getName())));
-    }
-
-    private static void assertProperties(final String componentName,
-                                         final UnaryOperator<ImmutableMap.Builder<String, Object>> properties) throws ClientException {
-        final Map<String, Object> expected = properties.apply(ImmutableMap.<String, Object>builder()
-                .put(ComponentConstants.COMPONENT_NAME, componentName)
-                .put(Constants.SERVICE_SCOPE, Constants.SCOPE_BUNDLE))
-                .build();
-        assertEquals(expected, getNonDynamicPropertiesOfComponentService(componentName));
-    }
-
-    private static Map<String, Object> getNonDynamicPropertiesOfComponentService(final String nameOrId) throws ClientException {
-        final JsonNode componentJson = JsonUtils.getJsonNodeFromString(
-                client.doGet("/system/console/components/" + nameOrId + ".json").getContent());
-        final JsonNode serviceJson = JsonUtils.getJsonNodeFromString(
-                client.doGet("/system/console/services/" + getServiceIdFromComponentJson(componentJson) + ".json").getContent());
-        return Util.getNonDynamicPropertiesForService(serviceJson);
-    }
-
-    private static int getServiceIdFromComponentJson(final JsonNode componentJson) {
-        final JsonNode props = componentJson.get("data").get(0).get("props");
-        for (final JsonNode prop : props) {
-            if ("serviceId".equals(prop.get("key").getValueAsText())) {
-                return Integer.parseInt(prop.get("value").getValueAsText());
-            }
-        }
-        throw new AssertionError("No service ID found");
-    }
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppConstants.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppConstants.java
deleted file mode 100644
index 9e987f6..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppConstants.java
+++ /dev/null
@@ -1,26 +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.adapter.annotations.util;
-
-public class AppConstants {
-    public AppConstants() {
-        // Constants class
-    }
-
-    public static final String BUNDLE_SYMBOLIC_NAME = System.getProperty("bundleSymbolicName");
-    public static final String BUNDLE_FILE = System.getProperty("bundleFile");
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppSlingClient.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppSlingClient.java
deleted file mode 100644
index 0706f5d..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/AppSlingClient.java
+++ /dev/null
@@ -1,67 +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.adapter.annotations.util;
-
-import org.apache.sling.testing.clients.ClientException;
-import org.apache.sling.testing.clients.SlingClient;
-import org.apache.sling.testing.clients.osgi.OsgiConsoleClient;
-import org.apache.sling.testing.clients.util.poller.Polling;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.concurrent.TimeoutException;
-
-public class AppSlingClient {
-    private static boolean bundleInstalledAndStarted;
-
-    private static final String [] READINESS_PATHS = {
-        "/starter.html",
-        "/system/console/status-adapters.txt",
-        "/system/console/components",
-        "/system/console/services",
-        "/system/console/services.json"
-    };
-
-    @SuppressWarnings("squid:S2095") // Caller will close the client
-    public static SlingClient newSlingClient() throws URISyntaxException, ClientException, TimeoutException, InterruptedException {
-        final SlingClient client = new SlingClient(new URI(System.getProperty("baseUrl")), "admin", "admin");
-
-        // client.waitExists() adds ".json" to the path, which is not desired, since that requests the Sling Default GET Servlet instead of Sling Starter HTML
-        new Polling(() -> allPathsOk(client, READINESS_PATHS, 200))
-            .poll(60_000, 500);
-
-        if (!bundleInstalledAndStarted) {
-            final OsgiConsoleClient osgiConsoleClient = client.adaptTo(OsgiConsoleClient.class);
-            osgiConsoleClient.waitInstallBundle(new File(AppConstants.BUNDLE_FILE), true, -1, 10_000, 500);
-            osgiConsoleClient.waitBundleStarted(AppConstants.BUNDLE_SYMBOLIC_NAME, 10_000, 500);
-            bundleInstalledAndStarted = true;
-        }
-        return client;
-    }
-
-    /** @return true if all paths return expected status */
-    private static boolean allPathsOk(SlingClient client, String [] paths, int expectedStatus) throws ClientException, InterruptedException {
-        for(String path : paths) {
-            final int actualStatus = client.doGet(path).getStatusLine().getStatusCode();
-            if(actualStatus != expectedStatus) {
-                throw new ClientException("Expected status " + expectedStatus + " but got " + actualStatus + " for " + path);
-            }
-        }
-        return true;
-    }
-}
diff --git a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/Util.java b/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/Util.java
deleted file mode 100644
index 960a2af..0000000
--- a/src/it/annotations-it/src/test/java/org/apache/sling/adapter/annotations/util/Util.java
+++ /dev/null
@@ -1,68 +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.adapter.annotations.util;
-
-import org.codehaus.jackson.JsonNode;
-import org.osgi.framework.Constants;
-import org.osgi.service.component.ComponentConstants;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-public class Util {
-    private static final Set<String> DYNAMIC_PROPERTIES = new HashSet<>(Arrays.asList(
-            ComponentConstants.COMPONENT_ID,
-            Constants.SERVICE_BUNDLEID
-    ));
-
-    public static Map<String, Object> getNonDynamicPropertiesForService(final JsonNode json) {
-        final JsonNode props = json.get("data").get(0).get("props");
-        final Map<String, Object> properties = new LinkedHashMap<>();
-        for (final JsonNode prop : props) {
-            final String name = prop.get("key").getTextValue();
-            if (!DYNAMIC_PROPERTIES.contains(name)) {
-                properties.put(name, getPropertyValue(prop.get("value")));
-            }
-        }
-        return properties;
-    }
-
-    private static Object getPropertyValue(final JsonNode value) {
-        if (value.isBoolean()) {
-            return value.getBooleanValue();
-        }
-        if (value.isNumber()) {
-            return value.getNumberValue();
-        }
-        if (value.isTextual()) {
-            return value.getTextValue();
-        }
-        if (value.isArray()) {
-            final List<String> items = new ArrayList<>();
-            for (final JsonNode item : value) {
-                items.add(item.getTextValue());
-            }
-            return items;
-        }
-        return null;
-    }
-}
diff --git a/src/it/annotations-it/src/test/provisioning/it-model.txt b/src/it/annotations-it/src/test/provisioning/it-model.txt
deleted file mode 100644
index 12f5873..0000000
--- a/src/it/annotations-it/src/test/provisioning/it-model.txt
+++ /dev/null
@@ -1,1038 +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.
-# 
-# The :boot feature contains all things to bootstrap the installation.
-[feature name=:boot]
-
-[variables]
-  slf4j.version=1.7.25
-
-# additional entries for sling.properties
-# ---------------------------------------
-# oak_tar and oak_mongo run modes are mutually exclusive,
-# and cannot be changed after the first startup
-[settings]
-  localIndexDir=${sling.home}/repository/index
-  repository.home=${sling.home}/repository
-  sling.run.mode.install.options=oak_tar,oak_mongo
-
-[artifacts]
-  org.apache.aries/org.apache.aries.util/1.1.3
-  org.apache.commons/commons-lang3/3.9
-  org.apache.felix/org.apache.felix.configadmin/1.9.16
-  org.apache.felix/org.apache.felix.converter/1.0.14
-  org.apache.felix/org.apache.felix.eventadmin/1.5.0
-  org.apache.geronimo.specs/geronimo-annotation_1.3_spec/1.1
-# dependency with javax.inject - required for Sling Models (SLING-4710)
-  org.apache.geronimo.specs/geronimo-atinject_1.0_spec/1.1
-  org.apache.geronimo.specs/geronimo-ws-metadata_2.0_spec/1.1.3
-  org.apache.servicemix.bundles/org.apache.servicemix.bundles.jaxb-impl/2.2.11_1
-  org.apache.servicemix.bundles/org.apache.servicemix.bundles.saaj-impl/1.3.23_2
-  org.apache.servicemix.specs/org.apache.servicemix.specs.jaxb-api-2.2/2.9.0
-  org.apache.servicemix.specs/org.apache.servicemix.specs.jaxws-api-2.2/2.9.0
-  org.apache.servicemix.specs/org.apache.servicemix.specs.saaj-api-1.3/2.8.0
-  org.apache.sling/org.apache.sling.commons.johnzon/1.2.2
-  org.apache.sling/org.apache.sling.commons.log/5.1.10
-  org.apache.sling/org.apache.sling.commons.logservice/1.1.0
-  org.apache.sling/org.apache.sling.commons.osgi/2.4.0
-  org.apache.sling/org.apache.sling.installer.core/3.11.2
-  org.apache.sling/org.apache.sling.installer.factory.configuration/1.3.2
-  org.apache.sling/org.apache.sling.installer.provider.file/1.2.2
-  org.apache.sling/org.apache.sling.javax.activation/0.1.0
-  org.apache.sling/org.apache.sling.launchpad.installer/1.2.2
-  org.apache.sling/org.apache.sling.settings/1.3.10
-  org.jvnet.staxex/stax-ex/1.7.6
-  org.osgi/org.osgi.service.log/1.4.0
-  org.osgi/org.osgi.util.function/1.1.0
-  org.osgi/org.osgi.util.promise/1.1.1
-  org.osgi/org.osgi.util.pushstream/1.0.1
-  org.slf4j/jcl-over-slf4j/1.7.25
-  org.slf4j/log4j-over-slf4j/1.7.25
-  org.slf4j/slf4j-api/1.7.25
-
-# 
-# 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.
-# 
-# The :launchpad feature defines Sling's launchpad version
-# Only a single artifact is allowed within this feature.
-[feature name=:launchpad]
-
-[settings]
-  org.osgi.framework.system.packages=org.osgi.framework;version="1.9",org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",org.osgi.framework.hooks.weaving;version="1.1";uses:="org.osgi.framework.wiring",org.osgi.framework.launch;version="1.2";uses:="org.osg [...]
-  sling.jpms.java.xml={dollar}{sling.jre.java.xml},javax.xml.catalog;uses:="javax.xml.namespace";version="1.0.0"
-  sling.jre-1.8=,java.applet;version="{dollar}{felix.detect.java.version}",java.awt;version="{dollar}{felix.detect.java.version}",java.awt.color;version="{dollar}{felix.detect.java.version}",java.awt.datatransfer;version="{dollar}{felix.detect.java.version}",java.awt.dnd;version="{dollar}{felix.detect.java.version}",java.awt.event;version="{dollar}{felix.detect.java.version}",java.awt.font;version="{dollar}{felix.detect.java.version}",java.awt.geom;version="{dollar}{felix.detect.java.ver [...]
-  sling.jre-jpms={dollar}{felix.jpms.java.base}{dollar}{felix.jpms.java.compiler}{dollar}{felix.jpms.java.datatransfer}{dollar}{felix.jpms.java.desktop}{dollar}{felix.jpms.java.instrument}{dollar}{felix.jpms.java.logging}{dollar}{felix.jpms.java.management}{dollar}{felix.jpms.java.management.rmi}{dollar}{felix.jpms.java.naming}{dollar}{felix.jpms.java.net.http}{dollar}{felix.jpms.java.prefs}{dollar}{felix.jpms.java.rmi}{dollar}{felix.jpms.java.scripting}{dollar}{felix.jpms.java.se}{dolla [...]
-  sling.jre.java.xml=,javax.xml;version="2.1.0",javax.xml.datatype;uses:="javax.xml.namespace";version="2.1.0",javax.xml.namespace;version="2.1.0",javax.xml.parsers;uses:="javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers";version="2.1.0",javax.xml.stream;uses:="javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform";version="1.0.0",javax.xml.stream.events;uses:="javax.xml.namespace,javax.xml.stream";version="1.0.0",javax.xml.stream.util;uses [...]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.launchpad.base/6.0.2-2.6.36
-
-# 
-# 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.
-[feature name=composum-nodes]
-
-[variables]
-  composum.nodes.version=1.11.5
-
-[artifacts startLevel=20]
-  com.composum.sling.core/composum-sling-core-commons/1.11.5
-  com.composum.sling.core/composum-sling-core-console/1.11.5
-  com.composum.sling.core/composum-sling-core-jslibs/1.11.5
-  com.composum.sling.core/composum-sling-package-manager/1.11.5
-  com.composum.sling.core/composum-sling-user-management/1.11.5
-
-[configurations]
-# the whitelisting of administrative login (to replace by service users in Nodes 2.0)
-  org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum
-    whitelist.bundles=[ \
-    "com.composum.core.commons", \
-    "com.composum.core.pckgmgr", \
-    "com.composum.core.pckginstall", \
-    ]
-    whitelist.name="composum"
-
-# 
-# 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.
-# #
-[feature name=healthcheck]
-
-# startlevel 5 together with jetty (to allow use during startup)
-[artifacts startLevel=5]
-  org.apache.felix/org.apache.felix.healthcheck.api/2.0.2
-  org.apache.felix/org.apache.felix.healthcheck.core/2.0.6
-  org.apache.felix/org.apache.felix.healthcheck.generalchecks/2.0.4
-  org.apache.felix/org.apache.felix.healthcheck.webconsoleplugin/2.0.0
-
-# sling health check bundles at startlevel 20
-[artifacts startLevel=20]
-  org.apache.sling/org.apache.sling.hc.api/1.0.4
-  org.apache.sling/org.apache.sling.hc.support/1.0.6
-
-[configurations]
-# # bundles
-  org.apache.felix.hc.generalchecks.BundlesStartedCheck
-    hc.tags=[ \
-    "bundles", \
-    ]
-
-  org.apache.felix.hc.generalchecks.CpuCheck
-    cpuPercentageThresholdWarn=L"95"
-    hc.tags=[ \
-    "cpu", \
-    "system-resources", \
-    ]
-
-  org.apache.felix.hc.generalchecks.DiskSpaceCheck
-    diskPaths=[ \
-    ".", \
-    ]
-    hc.tags=[ \
-    "diskspace", \
-    "system-resources", \
-    ]
-
-# # systemalive checks
-  org.apache.felix.hc.generalchecks.FrameworkStartCheck
-    hc.tags=[ \
-    "systemalive", \
-    ]
-    targetStartLevel=I"30"
-
-  org.apache.felix.hc.generalchecks.MemoryCheck
-    hc.tags=[ \
-    "memory", \
-    "system-resources", \
-    ]
-    heapUsedPercentageThresholdCritical=L"100"
-    heapUsedPercentageThresholdWarn=L"95"
-
-  org.apache.felix.hc.generalchecks.ServicesCheck
-    hc.tags=[ \
-    "systemalive", \
-    ]
-    services.list=[ \
-    "org.apache.sling.jcr.api.SlingRepository", \
-    "org.apache.sling.engine.auth.Authenticator", \
-    "org.apache.sling.api.resource.ResourceResolverFactory", \
-    "org.apache.sling.api.servlets.ServletResolver", \
-    "javax.script.ScriptEngineManager", \
-    ]
-
-# # system resources
-  org.apache.felix.hc.generalchecks.ThreadUsageCheck
-    hc.tags=[ \
-    "threads", \
-    "cpu", \
-    "system-resources", \
-    ]
-
-# # Service Unavailable Filter for startup-shutdown
-  org.apache.felix.hc.core.impl.filter.ServiceUnavailableFilter-startupandshutdown
-    autoDisableFilter=B"true"
-    avoid404DuringStartup=B"true"
-    includeExecutionResult=B"false"
-    osgi.http.whiteboard.context.select="(osgi.http.whiteboard.context.name\=*)"
-    osgi.http.whiteboard.filter.regex="(?!/system/).*"
-    responseTextFor503="classpath:org.apache.sling.starter.content:content/content/startup/index.html"
-    service.ranking=I"2147483647"
-    tags=[ \
-    "systemalive", \
-    ]
-
-# # servlet
-  org.apache.felix.hc.core.impl.servlet.HealthCheckExecutorServlet-default
-    servletPath="/system/health"
-
-# # service user for scripted health check (to make it easy to use jcr:/path/to/script urls)
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-hc-support
-    user.mapping=[ \
-    "org.apache.sling.hc.support\=sling-readall", \
-    ]
-
-# 
-# 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.
-[feature name=models-jacksonexporter]
-
-[variables]
-  jackson.version=2.9.9
-
-[artifacts]
-  com.fasterxml.jackson.core/jackson-annotations/2.9.9
-  com.fasterxml.jackson.core/jackson-core/2.9.9
-  com.fasterxml.jackson.core/jackson-databind/2.9.9
-  org.apache.sling/org.apache.sling.models.jacksonexporter/1.0.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.
-# 
-# This is the OAK feature.
-[feature name=oak]
-
-[variables]
-  oak.version=1.26.0
-
-# The segment node store is used via a configuration
-[artifacts startLevel=10]
-  org.apache.felix/org.apache.felix.jaas/1.0.2
-
-[artifacts startLevel=15]
-  org.apache.jackrabbit/oak-api/1.26.0
-  org.apache.jackrabbit/oak-blob-plugins/1.26.0
-  org.apache.jackrabbit/oak-blob/1.26.0
-  org.apache.jackrabbit/oak-commons/1.26.0
-  org.apache.jackrabbit/oak-core-spi/1.26.0
-  org.apache.jackrabbit/oak-core/1.26.0
-  org.apache.jackrabbit/oak-jackrabbit-api/1.26.0
-  org.apache.jackrabbit/oak-jcr/1.26.0
-  org.apache.jackrabbit/oak-lucene/1.26.0
-  org.apache.jackrabbit/oak-query-spi/1.26.0
-  org.apache.jackrabbit/oak-security-spi/1.26.0
-# TODO - Sling does not come up without oak-store-composite
-  org.apache.jackrabbit/oak-store-composite/1.26.0
-# OAK-7263 - oak-store-document should be in oak_mongo runmode
-  org.apache.jackrabbit/oak-store-document/1.26.0
-  org.apache.jackrabbit/oak-store-spi/1.26.0
-
-# start the Oak server instance after all components have been configured
-# and started to avoid restarting that component ( see SLING-4556 )
-[artifacts startLevel=16]
-  org.apache.sling/org.apache.sling.jcr.oak.server/1.2.4
-
-[configurations]
-  org.apache.felix.jaas.ConfigurationSpi
-    jaas.configProviderName="FelixJaasProvider"
-    jaas.defaultRealmName="jackrabbit.oak"
-
-  org.apache.jackrabbit.oak.security.authentication.AuthenticationConfigurationImpl
-    org.apache.jackrabbit.oak.authentication.configSpiName="FelixJaasProvider"
-
-  org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName
-    length=I"21"
-
-  org.apache.jackrabbit.oak.security.user.UserConfigurationImpl
-    defaultDepth="1"
-    groupsPath="/home/groups"
-    importBehavior="besteffort"
-    usersPath="/home/users"
-
-  org.apache.jackrabbit.oak.spi.security.user.action.DefaultAuthorizableActionProvider
-    enabledActions=[ \
-    "org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction", \
-    ]
-    groupPrivilegeNames=[ \
-    "jcr:read", \
-    ]
-    userPrivilegeNames=[ \
-    "jcr:all", \
-    ]
-
-  org.apache.felix.jaas.Configuration.factory-GuestLoginModule
-    jaas.classname="org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule"
-    jaas.controlFlag="optional"
-    jaas.ranking=I"300"
-
-  org.apache.felix.jaas.Configuration.factory-LoginModuleImpl
-    jaas.classname="org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl"
-    jaas.controlFlag="required"
-
-  org.apache.felix.jaas.Configuration.factory-TokenLoginModule
-    jaas.classname="org.apache.jackrabbit.oak.security.authentication.token.TokenLoginModule"
-    jaas.controlFlag="sufficient"
-    jaas.ranking=I"200"
-
-[artifacts startLevel=15 runModes=oak_mongo]
-  com.h2database/h2-mvstore/1.4.194
-  org.mongodb/mongo-java-driver/3.8.2
-
-[configurations runModes=oak_mongo]
-  org.apache.jackrabbit.oak.plugins.document.DocumentNodeStoreService
-    db="sling"
-    mongouri="mongodb://localhost:27017"
-
-[artifacts startLevel=15 runModes=oak_tar]
-  org.apache.jackrabbit/oak-segment-tar/1.26.0
-
-[configurations runModes=oak_tar]
-  org.apache.jackrabbit.oak.segment.SegmentNodeStoreService
-    name="Default\ NodeStore"
-
-# 
-# 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.
-[feature name=repoinit]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.jcr.repoinit/1.1.20
-  org.apache.sling/org.apache.sling.provisioning.model/1.8.4
-  org.apache.sling/org.apache.sling.repoinit.parser/1.4.2
-
-[configurations]
-  org.apache.sling.jcr.repoinit.impl.RepositoryInitializer
-    references="model@repoinit:context:/resources/provisioning/model.txt"
-
-  [:repoinit]
-# general
-create path (sling:OrderedFolder) /content
-set ACL for everyone
-allow   jcr:read	on /content
-end
-
-# sling-mapping
-create service user sling-mapping
-
-set ACL for sling-mapping
-allow   jcr:read    on /
-end
-
-# sling-readall
-create service user sling-readall
-
-set ACL for sling-readall
-allow   jcr:read    on /
-end
-
-# sling-xss
-create service user sling-xss
-
-create path (sling:Folder) /apps/sling/xss
-
-set ACL for sling-xss
-allow   jcr:read    on /apps/sling/xss
-end
-
-# sling-i18n
-create service user sling-i18n
-
-set ACL for sling-i18n
-allow   jcr:read    on /
-end
-
-# sling-jcr-install
-create service user sling-jcr-install
-
-# used for config OSGi writeback
-create path (sling:Folder) /apps/sling/install
-
-set ACL for sling-jcr-install
-allow	jcr:read	on	/
-allow	rep:write	on /apps/sling/install
-end
-
-# content-package installer
-create service user sling-package-install
-
-set ACL for sling-package-install
-allow	jcr:all     on	/
-allow   jcr:namespaceManagement,jcr:nodeTypeDefinitionManagement on :repository
-end
-
-#
-# 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.
-#
-#
-#
-# 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.
-#
-# The feature for Apache Sling
-
-[feature name=sling]
-
-[variables]
-  jackrabbit.version=2.20.0
-
-[artifacts]
-  commons-codec/commons-codec/1.14
-  commons-collections/commons-collections/3.2.2
-  javax.mail/mail/1.5.0-b01
-  org.antlr/antlr4-runtime/4.7.2
-  org.apache.commons/commons-collections4/4.4
-  org.apache.commons/commons-math/2.2
-  org.apache.geronimo.bundles/jstl/1.2_1
-  org.apache.httpcomponents/httpclient-osgi/4.5.10
-  org.apache.httpcomponents/httpcore-osgi/4.4.12
-  org.apache.jackrabbit.vault/org.apache.jackrabbit.vault/3.4.4
-  org.apache.servicemix.bundles/org.apache.servicemix.bundles.rhino/1.7.10_1
-  org.apache.sling/org.apache.sling.adapter/2.1.10
-  org.apache.sling/org.apache.sling.auth.form/1.0.20
-  org.apache.sling/org.apache.sling.bundleresource.impl/2.3.2
-  org.apache.sling/org.apache.sling.commons.classloader/1.4.4
-  org.apache.sling/org.apache.sling.commons.compiler/2.3.6
-  org.apache.sling/org.apache.sling.commons.fsclassloader/1.0.12
-  org.apache.sling/org.apache.sling.commons.mime/2.2.2
-  org.apache.sling/org.apache.sling.commons.scheduler/2.7.6
-  org.apache.sling/org.apache.sling.commons.threads/3.2.20
-  org.apache.sling/org.apache.sling.engine/2.7.2
-  org.apache.sling/org.apache.sling.fsresource/2.1.16
-  org.apache.sling/org.apache.sling.i18n/2.5.14
-  org.apache.sling/org.apache.sling.installer.console/1.1.0
-  org.apache.sling/org.apache.sling.installer.factory.packages/1.0.4
-  org.apache.sling/org.apache.sling.installer.hc/2.0.2
-  org.apache.sling/org.apache.sling.installer.provider.jcr/3.2.2
-  org.apache.sling/org.apache.sling.jcr.contentloader/2.3.0
-  org.apache.sling/org.apache.sling.jcr.resource/3.0.20
-  org.apache.sling/org.apache.sling.models.api/1.3.8
-  org.apache.sling/org.apache.sling.models.impl/1.4.12
-  org.apache.sling/org.apache.sling.resourceresolver/1.6.16
-  org.apache.sling/org.apache.sling.scripting.api/2.2.0
-  org.apache.sling/org.apache.sling.scripting.core/2.2.0
-  org.apache.sling/org.apache.sling.scripting.el-api/1.0.2
-  org.apache.sling/org.apache.sling.scripting.javascript/3.1.2
-  org.apache.sling/org.apache.sling.scripting.jsp-api/1.0.2
-  org.apache.sling/org.apache.sling.scripting.jsp.taglib/2.4.0
-  org.apache.sling/org.apache.sling.scripting.jsp/2.4.2
-  org.apache.sling/org.apache.sling.scripting.sightly.compiler.java/1.1.4-1.4.0
-  org.apache.sling/org.apache.sling.scripting.sightly.compiler/1.2.4-1.4.0
-  org.apache.sling/org.apache.sling.scripting.sightly.js.provider/1.1.0
-  org.apache.sling/org.apache.sling.scripting.sightly.models.provider/1.0.10
-  org.apache.sling/org.apache.sling.scripting.sightly.repl/1.0.6
-  org.apache.sling/org.apache.sling.scripting.sightly.runtime/1.2.0-1.4.0
-  org.apache.sling/org.apache.sling.scripting.sightly/1.3.2-1.4.0
-  org.apache.sling/org.apache.sling.serviceuser.webconsole/1.0.2
-  org.apache.sling/org.apache.sling.serviceusermapper/1.4.4
-  org.apache.sling/org.apache.sling.servlets.get/2.1.40
-  org.apache.sling/org.apache.sling.servlets.post/2.3.36
-  org.apache.sling/org.apache.sling.servlets.resolver/2.6.4
-# Default Starter content
-# Adjust responseTextFor503 in healthcheck.txt to "classpath:org.apache.sling.starter.content:startup/index.html" when updating org.apache.sling.starter.content, see SLING-8721
-  org.apache.sling/org.apache.sling.starter.content/1.0.8
-  org.apache.sling/org.apache.sling.xss/2.2.2
-
-[artifacts startLevel=4]
-  org.apache.felix/org.apache.felix.metatype/1.2.2
-  org.apache.felix/org.apache.felix.scr/2.1.20
-
-[artifacts startLevel=5]
-  commons-fileupload/commons-fileupload/1.4
-  commons-io/commons-io/2.6
-  org.apache.aries.jmx/org.apache.aries.jmx.api/1.1.5
-  org.apache.aries.jmx/org.apache.aries.jmx.core/1.1.8
-  org.apache.aries.jmx/org.apache.aries.jmx.whiteboard/1.2.0
-  org.apache.felix/org.apache.felix.bundlerepository/2.0.10
-  org.apache.felix/org.apache.felix.http.whiteboard/4.0.0
-  org.apache.felix/org.apache.felix.inventory/1.0.6
-  org.apache.felix/org.apache.felix.prefs/1.1.0
-  org.apache.felix/org.apache.felix.webconsole.plugins.ds/2.1.0
-  org.apache.felix/org.apache.felix.webconsole.plugins.event/1.1.8
-  org.apache.felix/org.apache.felix.webconsole.plugins.memoryusage/1.0.10
-  org.apache.felix/org.apache.felix.webconsole.plugins.obr/1.0.4
-  org.apache.felix/org.apache.felix.webconsole.plugins.packageadmin/1.0.4
-  org.apache.felix/org.apache.felix.webconsole/4.5.0
-  org.apache.sling/org.apache.sling.api/2.22.0
-  org.apache.sling/org.apache.sling.auth.core/1.4.6
-  org.apache.sling/org.apache.sling.commons.log.webconsole/1.0.0
-  org.apache.sling/org.apache.sling.extensions.threaddump/0.2.2
-  org.apache.sling/org.apache.sling.extensions.webconsolebranding/1.0.2
-  org.apache.sling/org.apache.sling.extensions.webconsolesecurityprovider/1.2.4
-
-[artifacts startLevel=10]
-  org.apache.felix/org.apache.felix.http.sslfilter/1.2.6
-  org.apache.pdfbox/fontbox/2.0.17
-  org.apache.pdfbox/jempbox/1.8.16
-  org.apache.pdfbox/pdfbox/2.0.17
-  org.apache.tika/tika-core/1.24
-  org.apache.tika/tika-parsers/1.24
-
-[artifacts startLevel=15]
-  com.google.guava/guava/15.0
-  io.dropwizard.metrics/metrics-core/3.2.6
-  org.apache.jackrabbit/jackrabbit-data/2.20.0
-  org.apache.jackrabbit/jackrabbit-jcr-commons/2.20.0
-  org.apache.jackrabbit/jackrabbit-jcr-rmi/2.20.0
-  org.apache.jackrabbit/jackrabbit-spi-commons/2.20.0
-  org.apache.jackrabbit/jackrabbit-spi/2.20.0
-  org.apache.jackrabbit/jackrabbit-webdav/2.20.0
-  org.apache.sling/org.apache.sling.commons.metrics/1.2.8
-  org.apache.sling/org.apache.sling.jcr.api/2.4.0
-  org.apache.sling/org.apache.sling.jcr.base/3.1.0
-  org.apache.sling/org.apache.sling.jcr.davex/1.3.10
-  org.apache.sling/org.apache.sling.jcr.jackrabbit.accessmanager/3.0.4
-  org.apache.sling/org.apache.sling.jcr.jackrabbit.usermanager/2.2.8
-  org.apache.sling/org.apache.sling.jcr.jcr-wrapper/2.0.0
-  org.apache.sling/org.apache.sling.jcr.registration/1.0.6
-  org.apache.sling/org.apache.sling.jcr.webconsole/1.0.2
-  org.apache.sling/org.apache.sling.jcr.webdav/2.3.8
-  org.apache.sling/org.apache.sling.resource.filter/1.0.0
-
-[configurations]
-  org.apache.sling.commons.log.LogManager
-    org.apache.sling.commons.log.file="logs/error.log"
-    org.apache.sling.commons.log.file.number=I"7"
-    org.apache.sling.commons.log.file.size="'.'yyyy-MM-dd"
-    org.apache.sling.commons.log.level="info"
-    org.apache.sling.commons.log.packagingDataEnabled=B"true"
-    org.apache.sling.commons.log.pattern="%d{dd.MM.yyyy\ HH:mm:ss.SSS}\ *%level*\ [%thread]\ %logger\ %msg%n"
-
-  org.apache.sling.engine.impl.log.RequestLogger
-    access.log.enabled=B"true"
-    access.log.output="log.access"
-    access.log.outputtype=I"0"
-    request.log.enabled=B"true"
-    request.log.output="log.request"
-    request.log.outputtype=I"0"
-
-# DavEx servlet requires config now
-  org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet
-    alias="/server"
-
-# WebDAV servlet requires config now
-  org.apache.sling.jcr.webdav.impl.servlets.SimpleWebDavServlet
-    dav.root="/dav"
-
-# configure the ScriptCache for scripts used by org.apache.sling.scripting.sightly.js.provider
-  org.apache.sling.scripting.core.impl.ScriptCacheImpl
-    org.apache.sling.scripting.cache.additional_extensions=[ \
-    "js", \
-    ]
-
-  org.apache.sling.commons.log.LogManager.factory.config-access.log
-    org.apache.sling.commons.log.file="logs/access.log"
-    org.apache.sling.commons.log.level="info"
-    org.apache.sling.commons.log.names=[ \
-    "log.access", \
-    ]
-    org.apache.sling.commons.log.pattern="%msg%n"
-
-  org.apache.sling.commons.log.LogManager.factory.config-request.log
-    org.apache.sling.commons.log.file="logs/request.log"
-    org.apache.sling.commons.log.level="info"
-    org.apache.sling.commons.log.names=[ \
-    "log.request", \
-    ]
-    org.apache.sling.commons.log.pattern="%msg%n"
-
-# TODO: remove bundles as their dependency on admin login is fixed, see SLING-5355 for linked issues
-# For these bundles, admin login is considered "ok":
-# org.apache.sling.jcr.contentloader
-  org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-sling
-    whitelist.bundles=[ \
-    "org.apache.sling.discovery.commons", \
-    "org.apache.sling.discovery.base", \
-    "org.apache.sling.discovery.oak", \
-    "org.apache.sling.extensions.webconsolesecurityprovider", \
-    "org.apache.sling.i18n", \
-    "org.apache.sling.jcr.base", \
-    "org.apache.sling.jcr.contentloader", \
-    "org.apache.sling.jcr.jackrabbit.usermanager", \
-    "org.apache.sling.jcr.oak.server", \
-    "org.apache.sling.jcr.repoinit", \
-    "org.apache.sling.jcr.webconsole", \
-    "org.apache.sling.servlets.post", \
-    "org.apache.sling.serviceuser.webconsole", \
-    ]
-    whitelist.name="sling"
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-i18n
-    user.mapping=[ \
-    "org.apache.sling.i18n\=sling-i18n", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-installer-factories
-    user.mapping=[ \
-    "org.apache.sling.installer.factory.packages\=sling-package-install", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-jcr-install
-    user.mapping=[ \
-    "org.apache.sling.installer.provider.jcr\=sling-jcr-install", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-jcr-resource
-    user.mapping=[ \
-    "org.apache.sling.jcr.resource:validation\=sling-readall", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-observation
-    user.mapping=[ \
-    "org.apache.sling.jcr.resource:observation\=sling-readall", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-resourceresolver
-    user.mapping=[ \
-    "org.apache.sling.resourceresolver:mapping\=sling-mapping", \
-    "org.apache.sling.resourceresolver:hierarchy\=sling-readall", \
-    "org.apache.sling.resourceresolver:observation\=sling-readall", \
-    "org.apache.sling.resourceresolver:console\=sling-readall", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-scripting
-    user.mapping=[ \
-    "org.apache.sling.scripting.core\=sling-scripting", \
-    "org.apache.sling.scripting.sightly.js.provider\=sling-scripting", \
-    ]
-
-# the user mapping for the servlet resolver, subservice "console" namely the user sling-scripting is created in scripting.txt
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-servletsresolver
-    user.mapping=[ \
-    "org.apache.sling.servlets.resolver:console\=sling-readall", \
-    "org.apache.sling.servlets.resolver:scripts\=sling-scripting", \
-    ]
-
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-xss
-    user.mapping=[ \
-    "org.apache.sling.xss\=sling-xss", \
-    ]
-
-  [:repoinit]
-#<<< SLING-5848 - Define service user and ACLs for Scripting
-create service user sling-scripting
-
-create path (sling:Folder) /libs
-create path (sling:Folder) /apps
-
-set ACL for sling-scripting
-deny    jcr:all     on /
-allow   jcr:read    on /libs,/apps
-end
-# SLING-5848 - Define service user and ACLs for Scripting >>>
-
-
-
-#
-# 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.
-#
-
-[feature name=sling-caconfig]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.caconfig.api/1.2.0
-  org.apache.sling/org.apache.sling.caconfig.impl/1.5.0
-  org.apache.sling/org.apache.sling.caconfig.spi/1.3.4
-
-[configurations]
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-sling-caconfig
-    user.mapping=[ \
-    "org.apache.sling.caconfig.impl\=sling-readall", \
-    ]
-
-  [:repoinit]
-create path (sling:Folder) /conf
-
-
-#
-# 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.
-#
-
-[feature name=sling-discovery]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.discovery.api/1.0.4
-  org.apache.sling/org.apache.sling.discovery.base/2.0.8
-  org.apache.sling/org.apache.sling.discovery.commons/1.0.20
-  org.apache.sling/org.apache.sling.discovery.oak/1.2.28
-  org.apache.sling/org.apache.sling.discovery.support/1.0.4
-
-[configurations]
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-sling.discovery
-    user.mapping=[ \
-    "org.apache.sling.discovery.commons\=sling-discovery", \
-    "org.apache.sling.discovery.base\=sling-discovery", \
-    "org.apache.sling.discovery.oak\=sling-discovery", \
-    ]
-
-  [:repoinit]
-create service user sling-discovery
-
-create path (sling:Folder) /var/discovery
-create path (sling:Folder) /var/discovery/oak
-
-set ACL for sling-discovery
-allow   jcr:read,rep:write    on /var/discovery
-end
-
-
-
-#
-# 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.
-#
-
-[feature name=sling-event]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.event.dea/1.1.4
-  org.apache.sling/org.apache.sling.event/4.2.12
-
-[configurations]
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-sling.event
-    user.mapping=[ \
-    "org.apache.sling.event\=sling-event", \
-    "org.apache.sling.event.dea\=sling-event", \
-    ]
-
-  [:repoinit]
-create service user sling-event
-
-create path (sling:Folder) /var
-create path (sling:Folder) /var/eventing
-
-set ACL for sling-event
-allow   jcr:read,rep:write    on /var/eventing
-end
-
-
-
-#
-# 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.
-#
-
-[feature name=sling-validation]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.validation.api/1.0.0
-  org.apache.sling/org.apache.sling.validation.core/1.0.4
-
-[configurations]
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-validation
-    user.mapping=[ \
-    "org.apache.sling.validation.core\=sling-validation", \
-    ]
-
-  [:repoinit]
-create service user sling-validation
-
-create path (sling:Folder) /apps
-create path (sling:Folder) /libs
-
-set ACL for sling-validation
-allow   jcr:read    on /apps
-allow   jcr:read    on /libs
-end
-
-
-#
-# 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.
-#
-# The feature for Apache Sling - Slingshot Sample App
-
-[feature name=slingshot version=0.9.0]
-
-[artifacts]
-  org.apache.sling/org.apache.sling.sample.slingshot/0.9.0
-
-[configurations]
-  org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-sling.slingshot
-    user.mapping=[ \
-    "org.apache.sling.sample.slingshot\=slingshot-service", \
-    ]
-
-  [:repoinit]
-create service user slingshot-service
-create user slingshot1 with password slingshot1
-create user slingshot2 with password slingshot2
-
-create path (sling:Folder) /content/slingshot
-create path (sling:Folder) /content/slingshot/users
-create path (sling:Folder) /content/slingshot/users/slingshot1
-create path (sling:Folder) /content/slingshot/users/slingshot2
-
-set ACL for slingshot-service
-allow   jcr:read,rep:write    on /content/slingshot
-end
-
-set ACL for slingshot1
-allow   jcr:read,rep:write    on /content/slingshot/users/slingshot1
-end
-
-set ACL for slingshot2
-allow   jcr:read,rep:write    on /content/slingshot/users/slingshot2
-end
-
-#
-# 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.
-#
-# The :standalone feature contains artifacts for the standalone jar
-
-[feature name=standalone]
-
-# Add a servlet implementation for the standalone case
-[artifacts startLevel=5 runModes=:standalone]
-  org.apache.felix/org.apache.felix.http.jetty/4.0.18
-  org.apache.felix/org.apache.felix.http.servlet-api/1.1.2
-
-# 
-# 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.
-# 
-# The :standalone feature contains artifacts for the standalone jar
-[feature name=webapp]
-
-# Add the felix servlet bridge for the webapp case
-[artifacts runModes=:webapp]
-  org.apache.felix/org.apache.felix.http.bridge/4.0.12
diff --git a/src/it/annotations-it/verify.groovy b/src/it/annotations-it/verify.groovy
new file mode 100644
index 0000000..db2f996
--- /dev/null
+++ b/src/it/annotations-it/verify.groovy
@@ -0,0 +1,91 @@
+/*
+ * 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
+
+// Utility functions
+def getXml(filename) {
+    return new XmlSlurper().parse(new File(basedir, "target/classes/OSGI-INF/" + filename)) 
+}
+
+def assertPropertyAttribute(xml, name, value) {
+    assert(xml.property.find{ it.@name == name && it.@value == value })
+}
+
+def assertProperty(xml, name, String [] expected) {
+    def linesFromXml = xml.property.find{ it.@name == name }.toString().split('\n')
+    expected.each {
+        assert(linesFromXml.contains(it))
+    }
+    assert(linesFromXml.length == expected.length)
+}
+
+def assertBoolean(xml, name, value) {
+    assert(xml.property.find{ it.@name == name && it.@type == 'Boolean' && it.@value == value })
+}
+
+// The actual tests
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.DeprecatedAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'org.apache.sling.api.SlingHttpServletRequest')
+    assertProperty(xml, 'adapters', 'org.apache.sling.api.resource.Resource')
+    assertBoolean(xml, 'adapter.deprecated', 'true')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.IntegerAndShortToLongAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'java.lang.Integer', 'java.lang.Short')
+    assertProperty(xml, 'adapters', 'java.lang.Long')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.InvalidEmptyAdapterFactory.xml")
+    assertPropertyAttribute(xml, 'adapter.condition', 'Configuration is invalid')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.InvalidNoAdaptablesAdapterFactory.xml")
+    assertProperty(xml, 'adapters', 'java.lang.Void')
+    assertPropertyAttribute(xml, 'adapter.condition', 'Configuration is invalid')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.InvalidNoAdaptersAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'java.lang.Void')
+    assertPropertyAttribute(xml, 'adapter.condition', 'Configuration is invalid')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.LongToIntegerIfFitsAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'java.lang.Long')
+    assertProperty(xml, 'adapters', 'java.lang.Integer')
+    assertPropertyAttribute(xml, 'adapter.condition', 'If the value is small enough to fit in an integer.')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.ShortToIntegerAndLongAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'java.lang.Short')
+    assertProperty(xml, 'adapters', 'java.lang.Long', 'java.lang.Integer')
+}
+
+{
+    def xml = getXml("org.apache.sling.adapter.annotations.testing.adapters.TextLengthIfFitsAdapterFactory.xml")
+    assertProperty(xml, 'adaptables', 'java.lang.CharSequence', 'java.lang.String')
+    assertProperty(xml, 'adapters', 'java.lang.Short', 'java.lang.Integer', 'java.lang.Long', 'java.math.BigInteger')
+    assertPropertyAttribute(xml, 'adapter.condition', 'If the text length fits in the requested type.')
+}
\ No newline at end of file