You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by dk...@apache.org on 2020/07/30 18:18:10 UTC
[sling-org-apache-sling-app-cms] 03/18: Adding migrated Feature
model files
This is an automated email from the ASF dual-hosted git repository.
dklco pushed a commit to branch SLING-8913-multiple-instance-types
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-app-cms.git
commit c1b6527204d355037eae9c4fcccb46d422c624fa
Author: Dan Klco <dk...@apache.org>
AuthorDate: Fri Jul 24 11:36:27 2020 -0400
Adding migrated Feature model files
---
feature/pom.xml | 149 +++++++
feature/src/main/features/boot_boot.json | 134 +++++++
feature/src/main/features/cms_cms.json | 328 +++++++++++++++
.../src/main/features/composum_composum-nodes.json | 35 ++
.../src/main/features/healthcheck_healthcheck.json | 103 +++++
feature/src/main/features/launchpad_launchpad.json | 19 +
feature/src/main/features/oak_oak.json | 124 ++++++
feature/src/main/features/repoinit_repoinit.json | 74 ++++
feature/src/main/features/scripting_sling.json | 92 +++++
.../features/sling-caconfig_sling-caconfig.json | 28 ++
.../features/sling-discovery_sling-discovery.json | 45 +++
.../src/main/features/sling-event_sling-event.json | 32 ++
...els-jacksonexporter_models-jacksonexporter.json | 25 ++
.../sling-validation_sling-validation.json | 36 ++
feature/src/main/features/sling_sling.json | 443 +++++++++++++++++++++
.../src/main/features/standalone_standalone.json | 16 +
feature/src/main/features/webapp_webapp.json | 4 +
.../apache/sling/launchpad/LaunchpadReadyRule.java | 121 ++++++
.../java/org/apache/sling/launchpad/SmokeIT.java | 195 +++++++++
.../org/apache/sling/launchpad/package-info.java | 30 ++
20 files changed, 2033 insertions(+)
diff --git a/feature/pom.xml b/feature/pom.xml
new file mode 100644
index 0000000..6c70994
--- /dev/null
+++ b/feature/pom.xml
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+ 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>org.apache.sling.cms</artifactId>
+ <groupId>org.apache.sling</groupId>
+ <version>0.16.3-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>org.apache.sling.cms.fmconverter</artifactId>
+ <name>Apache Sling - CMS Feature Model</name>
+
+ <properties>
+ <sling.java.version>8</sling.java.version>
+ <IT.expected.bundles.count>208</IT.expected.bundles.count>
+ <cms.version>${project.parent.version}</cms.version>
+ <composum.version>1.12.0</composum.version>
+ <jackrabbit.version>2.20.0</jackrabbit.version>
+ <jackson.version>2.11.1</jackson.version>
+ <oak.version>1.26.0</oak.version>
+ <slf4j.version>1.7.25</slf4j.version>
+ </properties>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>ianal-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>verify-legal-files</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <artifactId>maven-clean-plugin</artifactId>
+ <configuration>
+ <filesets>
+ <fileset>
+ <directory>${basedir}</directory>
+ <includes>
+ <include>sling/**</include>
+ <include>coverage.ec</include>
+ <include>launcher/**</include>
+ </includes>
+ </fileset>
+ </filesets>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>slingfeature-maven-plugin</artifactId>
+ <version>1.3.0</version>
+ <extensions>true</extensions>
+ <configuration>
+ <framework>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.framework</artifactId>
+ <version>6.0.3</version>
+ </framework>
+ <aggregates>
+ <aggregate>
+ <classifier>slingcms</classifier>
+ <filesInclude>**/*.json</filesInclude>
+ <title>Sling CMS</title>
+ </aggregate>
+ </aggregates>
+ <scans>
+ <scan>
+ <includeClassifier>slingcms</includeClassifier>
+ </scan>
+ </scans>
+ <archives>
+ <archive>
+ <classifier>slingcms_far</classifier>
+ <includeClassifier>slingcms</includeClassifier>
+ </archive>
+ </archives>
+ </configuration>
+ <executions>
+ <execution>
+ <id>aggregate-features</id>
+ <phase>prepare-package</phase>
+ <goals>
+ <goal>aggregate-features</goal>
+ <!-- <goal>analyse-features</goal> -->
+ <goal>attach-features</goal>
+ <goal>attach-featurearchives</goal>
+ </goals>
+ <configuration>
+ <replacePropertyVariables>cms.version,composum.version,jackrabbit.version,jackson.version,oak.version,slf4j.version</replacePropertyVariables>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+
+ <pluginManagement>
+ <plugins>
+ <plugin>
+ <!-- Extend RAT configuration from parent pom -->
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludes combine.children="append">
+ <!-- Exclude sling instance -->
+ <exclude>sling/**</exclude>
+ <exclude>launcher/**</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </pluginManagement>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpclient</artifactId>
+ <version>4.5.10</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.11.2</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/feature/src/main/features/boot_boot.json b/feature/src/main/features/boot_boot.json
new file mode 100644
index 0000000..0fbf079
--- /dev/null
+++ b/feature/src/main/features/boot_boot.json
@@ -0,0 +1,134 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:boot:0.16.3-SNAPSHOT",
+ "variables":{
+ "slf4j.version":"1.7.25"
+ },
+ "bundles":[
+ {
+ "id":"org.apache.aries:org.apache.aries.util:1.1.3",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.commons:commons-lang3:3.9",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.configadmin:1.9.16",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.converter:1.0.14",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.eventadmin:1.5.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.geronimo.specs:geronimo-annotation_1.3_spec:1.1",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.geronimo.specs:geronimo-atinject_1.0_spec:1.1",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.geronimo.specs:geronimo-ws-metadata_2.0_spec:1.1.3",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.jaxb-impl:2.2.11_1",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.saaj-impl:1.3.23_2",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.jaxb-api-2.2:2.9.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.jaxws-api-2.2:2.9.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.servicemix.specs:org.apache.servicemix.specs.saaj-api-1.3:2.8.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.johnzon:1.2.2",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.log:5.1.12",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.logservice:1.1.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.osgi:2.4.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.core:3.11.2",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.factory.configuration:1.3.2",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.provider.file:1.2.2",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.javax.activation:0.1.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.settings:1.3.10",
+ "start-order":"1"
+ },
+ {
+ "id":"org.jvnet.staxex:stax-ex:1.7.6",
+ "start-order":"1"
+ },
+ {
+ "id":"org.osgi:org.osgi.service.log:1.4.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.osgi:org.osgi.util.function:1.1.0",
+ "start-order":"1"
+ },
+ {
+ "id":"org.osgi:org.osgi.util.promise:1.1.1",
+ "start-order":"1"
+ },
+ {
+ "id":"org.osgi:org.osgi.util.pushstream:1.0.1",
+ "start-order":"1"
+ },
+ {
+ "id":"org.slf4j:jcl-over-slf4j:1.7.25",
+ "start-order":"1"
+ },
+ {
+ "id":"org.slf4j:log4j-over-slf4j:1.7.25",
+ "start-order":"1"
+ },
+ {
+ "id":"org.slf4j:slf4j-api:1.7.25",
+ "start-order":"1"
+ }
+ ],
+ "framework-properties":{
+ "sling.run.mode.install.options":"oak_tar,oak_mongo",
+ "localIndexDir":"${sling.home}/repository/index",
+ "repository.home":"${sling.home}/repository"
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/cms_cms.json b/feature/src/main/features/cms_cms.json
new file mode 100644
index 0000000..cd0a963
--- /dev/null
+++ b/feature/src/main/features/cms_cms.json
@@ -0,0 +1,328 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:cms:0.16.3-SNAPSHOT",
+ "variables":{
+ "oak.version":"1.26.0",
+ "cms.version":"0.16.3-SNAPSHOT"
+ },
+ "bundles":[
+ {
+ "id":"com.github.livesense:org.liveSense.fragment.sun.misc:1.0.5",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.cms.api:0.16.3-SNAPSHOT",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.cms.ui:0.16.3-SNAPSHOT",
+ "start-order":"5"
+ },
+ {
+ "id":"com.vladsch.flexmark:flexmark-osgi:0.61.24",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.cocoon:cocoon-serializers-charsets:1.0.2",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.commons:commons-compress:1.20",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.commons:commons-csv:1.8",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.commons:commons-email:1.5",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.commons:commons-math3:3.6.1",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-auth-external:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-auth-ldap:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.xmlbeans:3.0.2_1",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.fileoptim:0.9.4",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.resourcemerger:1.3.10",
+ "start-order":"15"
+ },
+ {
+ "id":"org.jsoup:jsoup:1.13.1",
+ "start-order":"15"
+ },
+ {
+ "id":"com.sun.mail:javax.mail:1.6.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.commons:commons-text:1.8",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.jasypt:1.9.3_1",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.poi:4.1.1_1",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.cms.core:0.16.3-SNAPSHOT",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.cms.reference:0.16.3-SNAPSHOT",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.cms.transformer:0.16.3-SNAPSHOT",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.crypto:1.0.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.html:1.1.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.messaging.mail:1.0.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.messaging:1.0.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.rewriter:1.2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.tika:tika-bundle:1.22",
+ "start-order":"20"
+ },
+ {
+ "id":"org.codehaus.groovy:groovy-all:2.4.19",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "org.apache.sling.servlets.get.DefaultGetServlet":{
+ "index.files":[
+ "index",
+ "index.html"
+ ],
+ "aliases":[
+ ""
+ ],
+ "enable.html":false,
+ "json.maximumresults:Integer":"200",
+ "enable.txt":false,
+ "enable.xml":false,
+ "index":false,
+ "enable.json":true,
+ "ecmaSuport":true
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~index":{
+ "mbean.name":"org.apache.jackrabbit.oak:name=async,type=IndexStats",
+ "hc.tags":[
+ "oak",
+ "system-resources"
+ ],
+ "hc.name":"Jackrabbit Oak - Index",
+ "attribute.value.constraint":"false",
+ "attribute.name":"Failing",
+ "statusForFailedContraint":"CRITICAL"
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~jobqueue":{
+ "mbean.name":"org.apache.sling:type=queues,name=AllQueues",
+ "hc.tags":[
+ "sling",
+ "system-resources"
+ ],
+ "hc.name":"Sling - Job Queue",
+ "attribute.value.constraint":"< 1000",
+ "attribute.name":"NumberOfQueuedJobs",
+ "statusForFailedContraint":"WARN"
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~luceneindex":{
+ "mbean.name":"org.apache.jackrabbit.oak:name=Lucene Index statistics,type=LuceneIndex",
+ "hc.tags":[
+ "oak",
+ "system-resources"
+ ],
+ "hc.name":"Jackrabbit Oak - Lucene Index",
+ "attribute.value.constraint":"false",
+ "attribute.name":"Failing",
+ "statusForFailedContraint":"CRITICAL"
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~requestdurationcritical":{
+ "mbean.name":"org.apache.sling:type=engine,service=RequestProcessor",
+ "hc.tags":[
+ "sling",
+ "system-resources"
+ ],
+ "hc.name":"Sling - StdDev Request Duration (CRITICAL)",
+ "attribute.value.constraint":"matches (1|2|3|4)?\\d?\\d\\..*",
+ "attribute.name":"StandardDeviationDurationMsec",
+ "statusForFailedContraint":"CRITICAL"
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~requestdurationwarn":{
+ "mbean.name":"org.apache.sling:type=engine,service=RequestProcessor",
+ "hc.tags":[
+ "sling",
+ "system-resources"
+ ],
+ "hc.name":"Sling - StdDev Request Duration (WARN)",
+ "attribute.value.constraint":"matches (1)?\\d?\\d\\..*",
+ "attribute.name":"StandardDeviationDurationMsec",
+ "statusForFailedContraint":"WARN"
+ },
+ "org.apache.felix.hc.generalchecks.JmxAttributeCheck~slowqueries":{
+ "mbean.name":"org.apache.jackrabbit.oak:name=Oak Query Statistics,type=QueryStats",
+ "hc.tags":[
+ "oak",
+ "system-resources"
+ ],
+ "hc.name":"Jackrabbit Oak - Slow Queries",
+ "attribute.value.constraint":"0",
+ "attribute.name":"SlowQueriesQueueSize",
+ "statusForFailedContraint":"WARN"
+ },
+ "org.apache.sling.hc.support.DefaultLoginsHealthCheck~slingcms":{
+ "logins":[
+ "admin:admin"
+ ],
+ "hc.tags":[
+ "configuration"
+ ],
+ "hc.name":"Sling CMS - Default Logins Check"
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-cms-error":{
+ "user.mapping":[
+ "org.apache.sling.cms.core:sling-cms-error=sling-cms-error",
+ "org.apache.sling.models.impl:sling-cms-error=sling-cms-error"
+ ]
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-cms-metadata":{
+ "user.mapping":[
+ "org.apache.sling.cms.core:sling-cms-metadata=sling-cms-metadata"
+ ]
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-cms-transformer":{
+ "user.mapping":[
+ "org.apache.sling.cms.transformer:sling-cms-transformer=sling-cms-transformer"
+ ]
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-cms-ugc":{
+ "user.mapping":[
+ "org.apache.sling.cms.core:sling-cms-ugc=sling-cms-ugc"
+ ]
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-cms-versionmgr":{
+ "user.mapping":[
+ "org.apache.sling.cms.core:sling-cms-versionmgr=sling-cms-versionmgr"
+ ]
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling.rewriter":{
+ "user.mapping":[
+ "org.apache.sling.rewriter=sling-rewriter"
+ ]
+ }
+ },
+ "repoinit:TEXT|true":[
+ "",
+ "# CMS root paths",
+ "create path (sling:OrderedFolder) /etc/i18n",
+ "set ACL for everyone",
+ "allow jcr:read\ton /etc/i18n",
+ "end",
+ "create path (sling:OrderedFolder) /etc/taxonomy",
+ "set ACL for everyone",
+ "allow jcr:read\ton /etc/taxonomy",
+ "end",
+ "create path (sling:OrderedFolder) /static",
+ "set ACL for everyone",
+ "allow jcr:read\ton /static",
+ "end",
+ "create path (sling:OrderedFolder) /conf",
+ "set ACL for everyone",
+ "allow jcr:read\ton /conf",
+ "end",
+ "create path (sling:OrderedFolder) /content",
+ "create path (sling:OrderedFolder) /etc/usergenerated",
+ "set ACL for everyone",
+ "allow jcr:read on /etc/usergenerated",
+ "end",
+ "",
+ "# Groups",
+ "create path (rep:AuthorizableFolder) /home/groups",
+ "create path (rep:AuthorizableFolder) /home/groups/sling-cms",
+ "create group administrators with path sling-cms",
+ "set ACL for administrators",
+ "allow jcr:all on /",
+ "end",
+ "create group authors with path sling-cms",
+ "set ACL for authors",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /content",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /static",
+ "allow jcr:read on /",
+ "end",
+ "create group job-users with path sling-cms",
+ "create group taxonomy-users with path sling-cms",
+ "set ACL for taxonomy-users",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /etc/taxonomy",
+ "end",
+ "create group ugc-users with path sling-cms",
+ "set ACL for ugc-users",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /etc/usergenerated",
+ "end",
+ "",
+ "# Service users",
+ "create service user sling-cms-error",
+ "set ACL for sling-cms-error",
+ "allow\tjcr:read\ton /",
+ "end",
+ "create service user sling-cms-metadata",
+ "set ACL for sling-cms-metadata",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /content",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /static",
+ "allow jcr:read on /",
+ "end",
+ "create service user sling-cms-transformer",
+ "set ACL for sling-cms-transformer",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /content",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /static",
+ "allow jcr:read on /",
+ "end",
+ "create service user sling-rewriter",
+ "set ACL for sling-rewriter",
+ "allow jcr:read on /",
+ "end",
+ "create service user sling-cms-ugc",
+ "set ACL for sling-cms-ugc",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /etc/usergenerated",
+ "end",
+ "create service user sling-cms-versionmgr",
+ "set ACL for sling-cms-versionmgr",
+ "allow jcr:write,jcr:nodeTypeManagement,jcr:versionManagement on /content",
+ "end"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/composum_composum-nodes.json b/feature/src/main/features/composum_composum-nodes.json
new file mode 100644
index 0000000..acaf4bd
--- /dev/null
+++ b/feature/src/main/features/composum_composum-nodes.json
@@ -0,0 +1,35 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:composum_composum-nodes:0.16.3-SNAPSHOT",
+ "variables":{
+ "composum.nodes.version":"1.12.0"
+ },
+ "bundles":[
+ {
+ "id":"com.composum.sling.core:composum-sling-core-commons:1.12.0",
+ "start-order":"20"
+ },
+ {
+ "id":"com.composum.sling.core:composum-sling-core-console:1.12.0",
+ "start-order":"20"
+ },
+ {
+ "id":"com.composum.sling.core:composum-sling-core-jslibs:1.12.0",
+ "start-order":"20"
+ },
+ {
+ "id":"com.composum.sling.core:composum-sling-package-manager:1.12.0",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "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"
+ }
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/healthcheck_healthcheck.json b/feature/src/main/features/healthcheck_healthcheck.json
new file mode 100644
index 0000000..06d0b5d
--- /dev/null
+++ b/feature/src/main/features/healthcheck_healthcheck.json
@@ -0,0 +1,103 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:healthcheck:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.felix:org.apache.felix.healthcheck.api:2.0.4",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.healthcheck.core:2.0.8",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.healthcheck.generalchecks:2.0.6",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.healthcheck.webconsoleplugin:2.0.2",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.hc.api:1.0.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.hc.support:1.0.6",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "org.apache.felix.hc.generalchecks.BundlesStartedCheck":{
+ "hc.tags":[
+ "bundles"
+ ]
+ },
+ "org.apache.felix.hc.generalchecks.CpuCheck":{
+ "hc.tags":[
+ "cpu",
+ "system-resources"
+ ],
+ "cpuPercentageThresholdWarn":95
+ },
+ "org.apache.felix.hc.generalchecks.DiskSpaceCheck":{
+ "hc.tags":[
+ "diskspace",
+ "system-resources"
+ ],
+ "diskPaths":[
+ "."
+ ]
+ },
+ "org.apache.felix.hc.generalchecks.FrameworkStartCheck":{
+ "hc.tags":[
+ "systemalive"
+ ],
+ "targetStartLevel:Integer":"30"
+ },
+ "org.apache.felix.hc.generalchecks.MemoryCheck":{
+ "hc.tags":[
+ "memory",
+ "system-resources"
+ ],
+ "heapUsedPercentageThresholdCritical":100,
+ "heapUsedPercentageThresholdWarn":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"
+ ]
+ },
+ "org.apache.felix.hc.generalchecks.ThreadUsageCheck":{
+ "hc.tags":[
+ "threads",
+ "cpu",
+ "system-resources"
+ ]
+ },
+ "org.apache.felix.hc.core.impl.filter.ServiceUnavailableFilter~startupandshutdown":{
+ "osgi.http.whiteboard.filter.regex":"(?!/system/).*",
+ "avoid404DuringStartup":true,
+ "service.ranking:Integer":"2147483647",
+ "includeExecutionResult":false,
+ "osgi.http.whiteboard.context.select":"(osgi.http.whiteboard.context.name=*)",
+ "tags":[
+ "systemalive"
+ ],
+ "autoDisableFilter":true,
+ "responseTextFor503":"classpath:org.apache.sling.cms.ui:/content/startup/index.html"
+ },
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~hc-support":{
+ "user.mapping":[
+ "org.apache.sling.hc.support=sling-readall"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/launchpad_launchpad.json b/feature/src/main/features/launchpad_launchpad.json
new file mode 100644
index 0000000..acdb0b8
--- /dev/null
+++ b/feature/src/main/features/launchpad_launchpad.json
@@ -0,0 +1,19 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:launchpad:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.launchpad.base:6.0.2-2.6.36",
+ "start-order":"20"
+ }
+ ],
+ "framework-properties":{
+ "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 [...]
+ "felix.systempackages.calculate.uses":"true",
+ "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.laun [...]
+ "felix.systempackages.substitution":"true",
+ "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. [...]
+ "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=\"{dolla [...]
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/oak_oak.json b/feature/src/main/features/oak_oak.json
new file mode 100644
index 0000000..27f959c
--- /dev/null
+++ b/feature/src/main/features/oak_oak.json
@@ -0,0 +1,124 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:oak:0.16.3-SNAPSHOT",
+ "variables":{
+ "oak.version":"1.26.0"
+ },
+ "bundles":[
+ {
+ "id":"org.apache.felix:org.apache.felix.jaas:1.0.2",
+ "start-order":"10"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-api:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-blob-plugins:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-blob:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-commons:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-core-spi:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-core:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-jackrabbit-api:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-jcr:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-lucene:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-query-spi:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-security-spi:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-store-composite:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-store-document:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-store-spi:1.26.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.oak.server:1.2.4",
+ "start-order":"16"
+ },
+ {
+ "id":"org.apache.jackrabbit:oak-segment-tar:1.26.0",
+ "run-modes":"oak_tar",
+ "start-order":"15"
+ }
+ ],
+ "configurations":{
+ "org.apache.felix.jaas.ConfigurationSpi":{
+ "jaas.defaultRealmName":"jackrabbit.oak",
+ "jaas.configProviderName":"FelixJaasProvider"
+ },
+ "org.apache.jackrabbit.oak.security.authentication.AuthenticationConfigurationImpl":{
+ "org.apache.jackrabbit.oak.authentication.configSpiName":"FelixJaasProvider"
+ },
+ "org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName":{
+ "length:Integer":"21"
+ },
+ "org.apache.jackrabbit.oak.security.user.UserConfigurationImpl":{
+ "groupsPath":"/home/groups",
+ "defaultDepth":"1",
+ "importBehavior":"besteffort",
+ "usersPath":"/home/users"
+ },
+ "org.apache.jackrabbit.oak.spi.security.user.action.DefaultAuthorizableActionProvider":{
+ "userPrivilegeNames":[
+ "jcr:all"
+ ],
+ "groupPrivilegeNames":[
+ "jcr:read"
+ ],
+ "enabledActions":[
+ "org.apache.jackrabbit.oak.spi.security.user.action.AccessControlAction"
+ ]
+ },
+ "org.apache.felix.jaas.Configuration.factory~GuestLoginModule":{
+ "jaas.controlFlag":"optional",
+ "jaas.classname":"org.apache.jackrabbit.oak.spi.security.authentication.GuestLoginModule",
+ "jaas.ranking:Integer":"300"
+ },
+ "org.apache.felix.jaas.Configuration.factory~LoginModuleImpl":{
+ "jaas.controlFlag":"required",
+ "jaas.classname":"org.apache.jackrabbit.oak.security.authentication.user.LoginModuleImpl"
+ },
+ "org.apache.felix.jaas.Configuration.factory~TokenLoginModule":{
+ "jaas.controlFlag":"sufficient",
+ "jaas.classname":"org.apache.jackrabbit.oak.security.authentication.token.TokenLoginModule",
+ "jaas.ranking:Integer":"200"
+ },
+ "org.apache.jackrabbit.oak.segment.SegmentNodeStoreService":{
+ "name":"Default NodeStore"
+ }
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/repoinit_repoinit.json b/feature/src/main/features/repoinit_repoinit.json
new file mode 100644
index 0000000..8327bc9
--- /dev/null
+++ b/feature/src/main/features/repoinit_repoinit.json
@@ -0,0 +1,74 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:repoinit:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.repoinit:1.1.24",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.provisioning.model:1.8.6",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.repoinit.parser:1.6.2",
+ "start-order":"20"
+ }
+ ],
+ "repoinit:TEXT|true":[
+ "# general",
+ "create path (sling:OrderedFolder) /content",
+ "set ACL for everyone",
+ "allow jcr:read\ton /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\tjcr:read\ton\t/",
+ "allow\trep:write\ton /apps/sling/install",
+ "end",
+ "",
+ "# content-package installer",
+ "create service user sling-package-install",
+ "",
+ "set ACL for sling-package-install",
+ "allow\tjcr:all on\t/",
+ "allow jcr:namespaceManagement,jcr:nodeTypeDefinitionManagement on :repository",
+ "end"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/scripting_sling.json b/feature/src/main/features/scripting_sling.json
new file mode 100644
index 0000000..915a006
--- /dev/null
+++ b/feature/src/main/features/scripting_sling.json
@@ -0,0 +1,92 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:scripting_sling:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.antlr:antlr4-runtime:4.7.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.servicemix.bundles:org.apache.servicemix.bundles.rhino:1.7.10_1",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.api:2.2.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.core:2.3.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.el-api:1.0.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.javascript:3.1.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.jsp-api:1.0.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.jsp.taglib:2.4.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.jsp:2.5.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler.java:1.2.0-1.4.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly.compiler:1.2.6-1.4.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly.js.provider:1.2.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly.repl:1.0.6",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly.runtime:1.2.2-1.4.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.scripting.sightly:1.4.0-1.4.0",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "org.apache.sling.scripting.core.impl.ScriptCacheImpl":{
+ "org.apache.sling.scripting.cache.additional_extensions":[
+ "js"
+ ]
+ },
+ "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"
+ ]
+ }
+ },
+ "repoinit:TEXT|true":[
+ "#<<< 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 >>>"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling-caconfig_sling-caconfig.json b/feature/src/main/features/sling-caconfig_sling-caconfig.json
new file mode 100644
index 0000000..91d46b2
--- /dev/null
+++ b/feature/src/main/features/sling-caconfig_sling-caconfig.json
@@ -0,0 +1,28 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling-caconfig:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.caconfig.api:1.2.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.caconfig.impl:1.5.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.caconfig.spi:1.3.4",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~sling-caconfig":{
+ "user.mapping":[
+ "org.apache.sling.caconfig.impl=sling-readall"
+ ]
+ }
+ },
+ "repoinit:TEXT|true":[
+ "create path (sling:Folder) /conf"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling-discovery_sling-discovery.json b/feature/src/main/features/sling-discovery_sling-discovery.json
new file mode 100644
index 0000000..e4da74a
--- /dev/null
+++ b/feature/src/main/features/sling-discovery_sling-discovery.json
@@ -0,0 +1,45 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling-discovery:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.discovery.api:1.0.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.discovery.base:2.0.8",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.discovery.commons:1.0.20",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.discovery.oak:1.2.28",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.discovery.support:1.0.4",
+ "start-order":"20"
+ }
+ ],
+ "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:TEXT|true":[
+ "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"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling-event_sling-event.json b/feature/src/main/features/sling-event_sling-event.json
new file mode 100644
index 0000000..2b236eb
--- /dev/null
+++ b/feature/src/main/features/sling-event_sling-event.json
@@ -0,0 +1,32 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling-event:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.event.dea:1.1.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.event:4.2.12",
+ "start-order":"20"
+ }
+ ],
+ "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:TEXT|true":[
+ "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"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling-models-jacksonexporter_models-jacksonexporter.json b/feature/src/main/features/sling-models-jacksonexporter_models-jacksonexporter.json
new file mode 100644
index 0000000..d7b04f6
--- /dev/null
+++ b/feature/src/main/features/sling-models-jacksonexporter_models-jacksonexporter.json
@@ -0,0 +1,25 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling-models-jacksonexporter_models-jacksonexporter:0.16.3-SNAPSHOT",
+ "variables":{
+ "jackson.version":"2.11.1"
+ },
+ "bundles":[
+ {
+ "id":"com.fasterxml.jackson.core:jackson-annotations:2.11.1",
+ "start-order":"20"
+ },
+ {
+ "id":"com.fasterxml.jackson.core:jackson-core:2.11.1",
+ "start-order":"20"
+ },
+ {
+ "id":"com.fasterxml.jackson.core:jackson-databind:2.11.1",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.models.jacksonexporter:1.0.8",
+ "start-order":"20"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling-validation_sling-validation.json b/feature/src/main/features/sling-validation_sling-validation.json
new file mode 100644
index 0000000..336a578
--- /dev/null
+++ b/feature/src/main/features/sling-validation_sling-validation.json
@@ -0,0 +1,36 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling-validation:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.sling:org.apache.sling.models.validation-impl:1.0.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.validation.api:1.0.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.validation.core:1.0.4",
+ "start-order":"20"
+ }
+ ],
+ "configurations":{
+ "org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended~validation":{
+ "user.mapping":[
+ "org.apache.sling.validation.core=sling-validation"
+ ]
+ }
+ },
+ "repoinit:TEXT|true":[
+ "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"
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/sling_sling.json b/feature/src/main/features/sling_sling.json
new file mode 100644
index 0000000..250f14b
--- /dev/null
+++ b/feature/src/main/features/sling_sling.json
@@ -0,0 +1,443 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:sling:0.16.3-SNAPSHOT",
+ "variables":{
+ "jackrabbit.version":"2.20.0"
+ },
+ "bundles":[
+ {
+ "id":"commons-codec:commons-codec:1.14",
+ "start-order":"20"
+ },
+ {
+ "id":"commons-collections:commons-collections:3.2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"javax.mail:mail:1.5.0-b01",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.commons:commons-collections4:4.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.commons:commons-math:2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.geronimo.bundles:jstl:1.2_1",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.httpcomponents:httpclient-osgi:4.5.10",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.httpcomponents:httpcore-osgi:4.4.12",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.jackrabbit.vault:org.apache.jackrabbit.vault:3.4.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.adapter:2.1.10",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.auth.form:1.0.20",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.bundleresource.impl:2.3.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.classloader:1.4.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.compiler:2.4.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.fsclassloader:1.0.12",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.mime:2.2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.scheduler:2.7.6",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.threads:3.2.20",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.engine:2.7.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.fsresource:2.1.16",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.i18n:2.5.14",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.console:1.1.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.factory.packages:1.0.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.hc:2.0.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.installer.provider.jcr:3.2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.contentloader:2.3.0",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.resource:3.0.22",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.models.api:1.3.8",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.models.impl:1.4.12",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.resourceresolver:1.6.16",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.serviceuser.webconsole:1.0.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.serviceusermapper:1.4.4",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.servlets.get:2.1.40",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.servlets.post:2.3.36",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.servlets.resolver:2.7.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.xss:2.2.2",
+ "start-order":"20"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.metatype:1.2.2",
+ "start-order":"4"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.scr:2.1.20",
+ "start-order":"4"
+ },
+ {
+ "id":"commons-fileupload:commons-fileupload:1.4",
+ "start-order":"5"
+ },
+ {
+ "id":"commons-io:commons-io:2.6",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.aries.jmx:org.apache.aries.jmx.api:1.1.5",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.aries.jmx:org.apache.aries.jmx.core:1.1.8",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.aries.jmx:org.apache.aries.jmx.whiteboard:1.2.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.bundlerepository:2.0.10",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.http.whiteboard:4.0.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.inventory:1.0.6",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.prefs:1.1.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole.plugins.ds:2.1.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole.plugins.event:1.1.8",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole.plugins.memoryusage:1.0.10",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole.plugins.obr:1.0.4",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole.plugins.packageadmin:1.0.4",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.webconsole:4.5.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.api:2.22.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.auth.core:1.4.8",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.log.webconsole:1.0.0",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.extensions.threaddump:0.2.2",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.extensions.webconsolebranding:1.0.2",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.extensions.webconsolesecurityprovider:1.2.4",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.http.sslfilter:1.2.6",
+ "start-order":"10"
+ },
+ {
+ "id":"org.apache.pdfbox:fontbox:2.0.17",
+ "start-order":"10"
+ },
+ {
+ "id":"org.apache.pdfbox:jempbox:1.8.16",
+ "start-order":"10"
+ },
+ {
+ "id":"org.apache.pdfbox:pdfbox:2.0.17",
+ "start-order":"10"
+ },
+ {
+ "id":"org.apache.tika:tika-core:1.24",
+ "start-order":"10"
+ },
+ {
+ "id":"com.google.guava:guava:15.0",
+ "start-order":"15"
+ },
+ {
+ "id":"io.dropwizard.metrics:metrics-core:3.2.6",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-data:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-jcr-commons:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-jcr-rmi:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-spi-commons:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-spi:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.jackrabbit:jackrabbit-webdav:2.20.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.commons.metrics:1.2.8",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.api:2.4.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.base:3.1.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.davex:1.3.10",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.accessmanager:3.0.4",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.jackrabbit.usermanager:2.2.8",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.jcr-wrapper:2.0.0",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.registration:1.0.6",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.webconsole:1.0.2",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.jcr.webdav:2.3.8",
+ "start-order":"15"
+ },
+ {
+ "id":"org.apache.sling:org.apache.sling.resource.filter:1.0.0",
+ "start-order":"15"
+ }
+ ],
+ "configurations":{
+ "org.apache.sling.commons.log.LogManager":{
+ "org.apache.sling.commons.log.packagingDataEnabled":true,
+ "org.apache.sling.commons.log.pattern":"%d{dd.MM.yyyy HH:mm:ss.SSS} *%level* [%thread] %logger %msg%n",
+ "org.apache.sling.commons.log.level":"info",
+ "org.apache.sling.commons.log.file":"logs/error.log",
+ "org.apache.sling.commons.log.file.number:Integer":"7",
+ "org.apache.sling.commons.log.file.size":"'.'yyyy-MM-dd"
+ },
+ "org.apache.sling.engine.impl.log.RequestLogger":{
+ "access.log.enabled":true,
+ "request.log.outputtype:Integer":"0",
+ "access.log.output":"log.access",
+ "request.log.output":"log.request",
+ "request.log.enabled":true,
+ "access.log.outputtype:Integer":"0"
+ },
+ "org.apache.sling.jcr.davex.impl.servlets.SlingDavExServlet":{
+ "alias":"/server"
+ },
+ "org.apache.sling.jcr.webdav.impl.servlets.SimpleWebDavServlet":{
+ "dav.root":"/dav"
+ },
+ "org.apache.sling.commons.log.LogManager.factory.config~access.log":{
+ "org.apache.sling.commons.log.pattern":"%msg%n",
+ "org.apache.sling.commons.log.names":[
+ "log.access"
+ ],
+ "org.apache.sling.commons.log.level":"info",
+ "org.apache.sling.commons.log.file":"logs/access.log"
+ },
+ "org.apache.sling.commons.log.LogManager.factory.config~request.log":{
+ "org.apache.sling.commons.log.pattern":"%msg%n",
+ "org.apache.sling.commons.log.names":[
+ "log.request"
+ ],
+ "org.apache.sling.commons.log.level":"info",
+ "org.apache.sling.commons.log.file":"logs/request.log"
+ },
+ "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~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"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/feature/src/main/features/standalone_standalone.json b/feature/src/main/features/standalone_standalone.json
new file mode 100644
index 0000000..e44e70d
--- /dev/null
+++ b/feature/src/main/features/standalone_standalone.json
@@ -0,0 +1,16 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:standalone:0.16.3-SNAPSHOT",
+ "bundles":[
+ {
+ "id":"org.apache.felix:org.apache.felix.http.jetty:4.0.18",
+ "run-modes":":standalone",
+ "start-order":"5"
+ },
+ {
+ "id":"org.apache.felix:org.apache.felix.http.servlet-api:1.1.2",
+ "run-modes":":standalone",
+ "start-order":"5"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/webapp_webapp.json b/feature/src/main/features/webapp_webapp.json
new file mode 100644
index 0000000..f1e6022
--- /dev/null
+++ b/feature/src/main/features/webapp_webapp.json
@@ -0,0 +1,4 @@
+
+{
+ "id":"org.apache.sling:org.apache.sling.cms.fmconverter:slingfeature:webapp:0.16.3-SNAPSHOT"
+}
\ No newline at end of file
diff --git a/feature/src/test/java/org/apache/sling/launchpad/LaunchpadReadyRule.java b/feature/src/test/java/org/apache/sling/launchpad/LaunchpadReadyRule.java
new file mode 100644
index 0000000..d6b6d6f
--- /dev/null
+++ b/feature/src/test/java/org/apache/sling/launchpad/LaunchpadReadyRule.java
@@ -0,0 +1,121 @@
+/*
+ * 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.launchpad;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.ConnectException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.junit.rules.ExternalResource;
+
+public class LaunchpadReadyRule extends ExternalResource {
+
+ private static final int TRIES = 60;
+ private static final int WAIT_BETWEEN_TRIES_MILLIS = 1000;
+
+ private final List<Check> checks = new ArrayList<>();
+
+ public LaunchpadReadyRule(int launchpadPort) {
+
+ checks.add(new Check("http://localhost:" + launchpadPort + "/server/default/jcr:root/content"));
+ checks.add(new Check("http://localhost:" + launchpadPort + "/content/starter.html") {
+ @Override
+ public String runCheck(HttpResponse response) throws Exception {
+ try (InputStreamReader isr = new InputStreamReader(response.getEntity().getContent());
+ BufferedReader reader = new BufferedReader(isr)) {
+
+ String line;
+ while ((line = reader.readLine()) != null) {
+ if (line.contains("Do not remove this comment, used for Starter integration tests")) {
+ return null;
+ }
+ }
+ }
+
+ return "Did not find 'ready' marker in the response body";
+ }
+ });
+ }
+
+ @Override
+ protected void before() throws Throwable {
+
+ try (CloseableHttpClient client = HttpClients.createDefault()) {
+ for (Check check : checks) {
+ runCheck(client, check);
+ }
+ }
+ }
+
+ private void runCheck(CloseableHttpClient client, Check check) throws Exception {
+
+ String lastFailure = null;
+ HttpGet get = new HttpGet(check.getUrl());
+
+ for (int i = 0; i < TRIES; i++) {
+ try (CloseableHttpResponse response = client.execute(get)) {
+
+ if (response.getStatusLine().getStatusCode() != 200) {
+ lastFailure = "Status code is " + response.getStatusLine();
+ Thread.sleep(WAIT_BETWEEN_TRIES_MILLIS);
+ continue;
+ }
+
+ lastFailure = check.runCheck(response);
+ if (lastFailure == null) {
+ return;
+ }
+ } catch ( ConnectException e ) {
+ lastFailure = e.getClass().getName() + " : " + e.getMessage();
+ }
+
+ Thread.sleep(WAIT_BETWEEN_TRIES_MILLIS);
+ }
+
+ throw new RuntimeException(String.format("Launchpad not ready. Failed check for URL %s with message '%s'",
+ check.getUrl(), lastFailure));
+ }
+
+ static class Check {
+ private String url;
+
+ public Check(String url) {
+ this.url = url;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ /**
+ * @param response the HttpResponse
+ * @return null if check check was successful, an error description otherwise
+ * @throws Exception
+ */
+ public String runCheck(HttpResponse response) throws Exception {
+ return null;
+ }
+ }
+
+}
diff --git a/feature/src/test/java/org/apache/sling/launchpad/SmokeIT.java b/feature/src/test/java/org/apache/sling/launchpad/SmokeIT.java
new file mode 100644
index 0000000..71676dc
--- /dev/null
+++ b/feature/src/test/java/org/apache/sling/launchpad/SmokeIT.java
@@ -0,0 +1,195 @@
+/*
+ * 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.launchpad;
+
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.felix.utils.json.JSONParser;
+import org.apache.http.Header;
+import org.apache.http.HttpHost;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.auth.BasicScheme;
+import org.apache.http.impl.client.BasicAuthCache;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.hamcrest.CoreMatchers;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+public class SmokeIT {
+
+ private static final int LAUNCHPAD_PORT = Integer.getInteger("launchpad.http.port", 8080);
+ private static final int EXPECTED_BUNDLES_COUNT = Integer.getInteger("IT.expected.bundles.count", Integer.MAX_VALUE);
+
+ @ClassRule
+ public static LaunchpadReadyRule LAUNCHPAD = new LaunchpadReadyRule(LAUNCHPAD_PORT);
+ private HttpClientContext httpClientContext;
+
+ @Before
+ public void prepareHttpContext() {
+
+ CredentialsProvider credsProvider = new BasicCredentialsProvider();
+ UsernamePasswordCredentials creds = new UsernamePasswordCredentials("admin", "admin");
+ credsProvider.setCredentials(new AuthScope("localhost", LAUNCHPAD_PORT), creds);
+
+ BasicAuthCache authCache = new BasicAuthCache();
+ BasicScheme basicAuth = new BasicScheme();
+ authCache.put(new HttpHost("localhost", LAUNCHPAD_PORT, "http"), basicAuth);
+
+ httpClientContext = HttpClientContext.create();
+ httpClientContext.setCredentialsProvider(credsProvider);
+ httpClientContext.setAuthCache(authCache);
+ }
+
+ private CloseableHttpClient newClient() {
+
+ return HttpClientBuilder.create()
+ .setDefaultCredentialsProvider(httpClientContext.getCredentialsProvider())
+ .build();
+ }
+
+ @Test
+ public void verifyAllBundlesStarted() throws Exception {
+
+ try ( CloseableHttpClient client = newClient() ) {
+
+ HttpGet get = new HttpGet("http://localhost:" + LAUNCHPAD_PORT + "/system/console/bundles.json");
+
+ // pass the context to ensure preemptive basic auth is used
+ // https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html
+ try ( CloseableHttpResponse response = client.execute(get, httpClientContext) ) {
+
+ if ( response.getStatusLine().getStatusCode() != 200 ) {
+ fail("Unexpected status line " + response.getStatusLine());
+ }
+
+ Header contentType = response.getFirstHeader("Content-Type");
+ assertThat("Content-Type header", contentType.getValue(), CoreMatchers.startsWith("application/json"));
+
+ Map<String, Object> obj = new JSONParser(response.getEntity().getContent()).getParsed();
+
+ @SuppressWarnings("unchecked")
+ List<Object> status = (List<Object>) obj.get("s");
+
+ @SuppressWarnings("unchecked")
+ List<Object> bundles = (List<Object>) obj.get("data");
+ if(bundles.size() < EXPECTED_BUNDLES_COUNT) {
+ fail("Expected at least " + EXPECTED_BUNDLES_COUNT + " bundles, got " + bundles.size());
+ }
+
+ BundleStatus bs = new BundleStatus(status);
+
+ if ( bs.resolvedBundles != 0 || bs.installedBundles != 0 ) {
+
+ StringBuilder out = new StringBuilder();
+ out.append("Expected all bundles to be active, but instead got ")
+ .append(bs.resolvedBundles).append(" resolved bundles, ")
+ .append(bs.installedBundles).append(" installed bundlles: ");
+
+ for ( int i = 0 ; i < bundles.size(); i++ ) {
+ @SuppressWarnings("unchecked")
+ Map<String, Object> bundle = (Map<String, Object>) bundles.get(i);
+
+ String bundleState = (String) bundle.get("state");
+ String bundleSymbolicName = (String) bundle.get("symbolicName");
+ String bundleVersion = (String) bundle.get("version");
+
+ switch ( bundleState ) {
+ case "Active":
+ case "Fragment":
+ continue;
+
+ default:
+ out.append("\n- ").append(bundleSymbolicName).append(" ").append(bundleVersion).append(" is in state " ).append(bundleState);
+ }
+ }
+
+ fail(out.toString());
+ }
+ }
+ }
+ }
+
+ @Test
+ public void ensureRepositoryIsStarted() throws Exception {
+ try ( CloseableHttpClient client = newClient() ) {
+
+ HttpGet get = new HttpGet("http://localhost:" + LAUNCHPAD_PORT + "/server/default/jcr:root/content");
+
+ try ( CloseableHttpResponse response = client.execute(get) ) {
+
+ if ( response.getStatusLine().getStatusCode() != 200 ) {
+ fail("Unexpected status line " + response.getStatusLine());
+ }
+
+ Header contentType = response.getFirstHeader("Content-Type");
+ assertThat("Content-Type header", contentType.getValue(), equalTo("text/xml"));
+
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ dbf.setNamespaceAware(true);
+ DocumentBuilder db = dbf.newDocumentBuilder();
+ Document document = db.parse(response.getEntity().getContent());
+
+ Element docElement = document.getDocumentElement();
+ NamedNodeMap attrs = docElement.getAttributes();
+
+ Node nameAttr = attrs.getNamedItemNS("http://www.jcp.org/jcr/sv/1.0", "name");
+ assertThat("no 'name' attribute found", nameAttr, notNullValue());
+ assertThat("Invalid name attribute value", nameAttr.getNodeValue(), equalTo("content"));
+ }
+ }
+ }
+
+ static class BundleStatus {
+
+ long totalBundles;
+ long activeBundles;
+ long activeFragments;
+ long resolvedBundles;
+ long installedBundles;
+
+ public BundleStatus(List<Object> array) {
+
+ totalBundles = (Long)array.get(0);
+ activeBundles = (Long)array.get(1);
+ activeFragments = (Long)array.get(2);
+ resolvedBundles = (Long)array.get(3);
+ installedBundles = (Long)array.get(4);
+
+ }
+ }
+}
diff --git a/feature/src/test/java/org/apache/sling/launchpad/package-info.java b/feature/src/test/java/org/apache/sling/launchpad/package-info.java
new file mode 100644
index 0000000..f70e5e8
--- /dev/null
+++ b/feature/src/test/java/org/apache/sling/launchpad/package-info.java
@@ -0,0 +1,30 @@
+/*
+ * 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.
+ */
+/**
+ * <h1>Smoke tests for the Sling Launchpad</h1>
+ *
+ * <p>This package contains a minimal set of tests for the Sling launchpad. The
+ * tests validate that the launchpad is correctly assembled and that there are
+ * no obvious mistakes such as bundles that can't be wired. More extensive
+ * tests must be placed in specific test projects.</p>
+ *
+ * <p>The launchpad tests don't depend on other Sling bundles,to prevent circular
+ * dependencies. As such, there is some duplication of code ( at least intent, if
+ * not implementation ) with some of the testing projects. This is another
+ * argument for keeping the tests minimal.</p>
+ */
+package org.apache.sling.launchpad;
\ No newline at end of file