Author: bdelacretaz
Date: Wed Dec 3 05:26:00 2008
New Revision: 722881
URL: http://svn.apache.org/viewvc?rev=722881&view=rev
Log:
SLING-734 - jcrinstall integration tests, first simple InstallClonedBundlesTest
works
Added:
incubator/sling/trunk/extensions/jcrinstall/pom.xml (with props)
incubator/sling/trunk/extensions/jcrinstall/testbundles/ (with props)
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/ (with
props)
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml
(with props)
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
(with props)
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
(with props)
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
(with props)
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
(with props)
Modified:
incubator/sling/trunk/extensions/jcrinstall/service/pom.xml
incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
incubator/sling/trunk/extensions/jcrinstall/testing/pom.xml
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/HttpPingTest.java
Added: incubator/sling/trunk/extensions/jcrinstall/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/pom.xml?rev=722881&view=auto
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/pom.xml (added)
+++ incubator/sling/trunk/extensions/jcrinstall/pom.xml Wed Dec 3 05:26:00 2008
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the
+ License.
+-->
+<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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>sling</artifactId>
+ <version>4-incubator-SNAPSHOT</version>
+ <relativePath>../../parent/</relativePath>
+ </parent>
+
+ <artifactId>org.apache.sling.jcr.jcrinstall.parent</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <packaging>pom</packaging>
+ <name>Sling - JCR OSGi Installer Parent</name>
+ <description>Parent pom for the the jcrinstall submodules</description>
+
+ <scm>
+
<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/trunk/extensions/jcrinstall</connection>
+
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/trunk/extensions/jcrinstall</developerConnection>
+
<url>http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall</url>
+ </scm>
+
+ <modules>
+ <module>service</module>
+ <module>testbundles/observer</module>
+ </modules>
+
+ <profiles>
+ <profile>
+ <!--
+ Allow the integration tests to be excluded, as
they might be slow
+ -->
+ <id>integrationTests</id>
+ <activation>
+ <activeByDefault>true</activeByDefault>
+ </activation>
+ <modules>
+ <module>testing</module>
+ </modules>
+ </profile>
+ </profiles>
+
+</project>
\ No newline at end of file
Propchange: incubator/sling/trunk/extensions/jcrinstall/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/sling/trunk/extensions/jcrinstall/service/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/pom.xml?rev=722881&r1=722880&r2=722881&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/service/pom.xml (original)
+++ incubator/sling/trunk/extensions/jcrinstall/service/pom.xml Wed Dec 3
05:26:00 2008
@@ -21,17 +21,17 @@
<modelVersion>4.0.0</modelVersion>
<parent>
- <groupId>org.apache.sling</groupId>
- <artifactId>sling</artifactId>
- <version>4-incubator-SNAPSHOT</version>
- <relativePath>../../../parent/</relativePath>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.jcr.jcrinstall.parent</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <relativePath>../</relativePath>
</parent>
<artifactId>org.apache.sling.jcr.jcrinstall</artifactId>
<version>2.0.3-incubator-SNAPSHOT</version>
<packaging>bundle</packaging>
- <name>Sling - JCR OSGi Installer</name>
+ <name>Sling - JCR OSGi Installer Service</name>
<description>
Loads OSGi bundles, deployment packages and configs from
configurable locations in the JCR repository.
Modified:
incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java?rev=722881&r1=722880&r2=722881&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
(original)
+++
incubator/sling/trunk/extensions/jcrinstall/service/src/main/java/org/apache/sling/jcr/jcrinstall/jcr/impl/RepositoryObserver.java
Wed Dec 3 05:26:00 2008
@@ -21,9 +21,11 @@
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Properties;
import java.util.Set;
import java.util.SortedSet;
@@ -45,6 +47,7 @@
import org.apache.sling.jcr.jcrinstall.jcr.NodeConverter;
import org.apache.sling.jcr.jcrinstall.osgi.OsgiController;
import org.apache.sling.jcr.jcrinstall.osgi.ResourceOverrideRules;
+import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkEvent;
import org.osgi.framework.FrameworkListener;
import org.osgi.framework.ServiceReference;
@@ -554,12 +557,32 @@
doGet(request, response);
}
+ /** Report on the jcrinstall enabled/disabled status, number of bundles in
each state, etc. */
@Override
protected void doGet(SlingHttpServletRequest request,
SlingHttpServletResponse response)
throws ServletException, IOException
{
- final String status = repository != null ? "enabled" : "disabled";
+ final Properties props = new Properties();
+
+ if(componentContext != null) {
+ // report on how many bundles we have in the different states
+ final Map<Integer, Integer> states = new HashMap<Integer,
Integer>();
+ for(Bundle b :
componentContext.getBundleContext().getBundles()) {
+ final Integer s = new Integer(b.getState());
+ Integer i = states.get(s);
+ i = i == null ? new Integer(1) : new
Integer(i.intValue() + 1);
+ states.put(s, i);
+ }
+
+ for(Map.Entry<Integer, Integer> e : states.entrySet()) {
+ props.put("bundles.in.state." + e.getKey().toString(),
e.getValue().toString());
+ }
+ }
+
+ props.put("osgi.start.level",
String.valueOf(startLevel.getStartLevel()));
+ props.put("jcrinstall.enabled", new Boolean(repository !=
null).toString());
+
response.setContentType("text/plain");
- response.getWriter().write(getClass().getSimpleName() + " is " +
status);
+ props.store(response.getOutputStream(), "jcrinstall status");
}
-}
\ No newline at end of file
+ }
\ No newline at end of file
Propchange: incubator/sling/trunk/extensions/jcrinstall/testbundles/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Dec 3 05:26:00 2008
@@ -0,0 +1,12 @@
+target
+bin
+derby.log
+*.iml
+*.ipr
+*.iws
+.settings
+.project
+.classpath
+.externalToolBuilders
+maven-eclipse.xml
+
Propchange: incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Dec 3 05:26:00 2008
@@ -0,0 +1,13 @@
+target
+bin
+derby.log
+*.iml
+*.ipr
+*.iws
+.settings
+.project
+.classpath
+.externalToolBuilders
+maven-eclipse.xml
+
+
Added: incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml?rev=722881&view=auto
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml
(added)
+++ incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml
Wed Dec 3 05:26:00 2008
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8"?>
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or
more
+ contributor license agreements. See the NOTICE file distributed
with
+ this work for additional information regarding copyright
ownership.
+ The ASF licenses this file to you under the Apache License,
Version
+ 2.0 (the "License"); you may not use this file except in
compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed
under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES
OR
+ CONDITIONS OF ANY KIND, either express or implied. See the
License for
+ the specific language governing permissions and limitations
under the
+ License.
+ -->
+<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>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.jcr.jcrinstall.parent</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <relativePath>../../</relativePath>
+ </parent>
+
+ <groupId>org.apache.sling</groupId>
+
<artifactId>org.apache.sling.jcr.jcrinstall.testbundles.observer</artifactId>
+ <packaging>bundle</packaging>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <name>Sling - JCR OSGi Installer - Observer test bundle</name>
+ <description> Bundle used in jcrinstall automated tests. </description>
+
+ <scm>
+
<connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/trunk/extensions/jcrinstall/testbundles/observer</connection>
+
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/trunk/extensions/jcrinstall/testbundles/observer</developerConnection>
+
<url>http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testbundles/observer</url>
+ </scm>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-scr-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+
<Private-Package>org.apache.sling.jcrinstall.testing.testbundles.*</Private-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </reporting>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.commons.log</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.jcr.api</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.api</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added:
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java?rev=722881&view=auto
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
(added)
+++
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
Wed Dec 3 05:26:00 2008
@@ -0,0 +1,83 @@
+/*
+ * 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.jcrinstall.testing.testbundles.observer;
+
+import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+
+import org.apache.sling.jcr.api.SlingRepository;
+import org.osgi.framework.FrameworkEvent;
+import org.osgi.framework.FrameworkListener;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/** Dummy service for jcrinstall integration testing - listens to
+ * repository and framework events and logs them.
+ *
+ * @scr.component
+ * label="jcrinstall test ObserverService"
+ * description="Listens to repository and framework events and logs them"
+ * immediate="true"
+ * @scr.service
+ * @scr.property
+ * name="service.description"
+ * value="Sling jcrinstall Test ObserverService"
+ * @scr.property
+ * name="service.vendor"
+ * value="The Apache Software Foundation"
+*/
+public class ObserverService implements EventListener, FrameworkListener {
+ /** @scr.reference */
+ private SlingRepository repository;
+
+ private Session session;
+ private final Logger log = LoggerFactory.getLogger(getClass());
+
+ protected void activate(ComponentContext context) throws Exception {
+ context.getBundleContext().addFrameworkListener(this);
+ session =
repository.loginAdministrative(repository.getDefaultWorkspace());
+ final int eventTypes = Event.NODE_ADDED | Event.NODE_REMOVED
+ | Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED |
Event.PROPERTY_REMOVED;
+ final boolean isDeep = true;
+ final boolean noLocal = true;
+ final String path = "/content";
+ session.getWorkspace().getObservationManager().addEventListener(
+ this, eventTypes, path,
+ isDeep, null, null, noLocal);
+ }
+
+ protected void deactivate(ComponentContext context) throws Exception {
+ context.getBundleContext().removeFrameworkListener(this);
+ if(session != null) {
+
session.getWorkspace().getObservationManager().removeEventListener(this);
+ session.logout();
+ session = null;
+ }
+ }
+
+ public void onEvent(EventIterator it) {
+ log.debug("onEvent()");
+ }
+
+ public void frameworkEvent(FrameworkEvent e) {
+ log.debug("FrameworkEvent of type {}", e.getType());
+ }
+}
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testbundles/observer/src/main/java/org/apache/sling/jcrinstall/testing/testbundles/observer/ObserverService.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Modified: incubator/sling/trunk/extensions/jcrinstall/testing/pom.xml
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/pom.xml?rev=722881&r1=722880&r2=722881&view=diff
==============================================================================
--- incubator/sling/trunk/extensions/jcrinstall/testing/pom.xml (original)
+++ incubator/sling/trunk/extensions/jcrinstall/testing/pom.xml Wed Dec 3
05:26:00 2008
@@ -20,12 +20,12 @@
<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>
- <groupId>org.apache.sling</groupId>
- <artifactId>sling</artifactId>
- <version>4-incubator-SNAPSHOT</version>
- <relativePath>../../../parent/</relativePath>
- </parent>
+ <parent>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.jcr.jcrinstall.parent</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <relativePath>../</relativePath>
+ </parent>
<artifactId>org.apache.sling.jcr.jcrinstall.testing</artifactId>
<packaging>war</packaging>
@@ -79,6 +79,12 @@
started. Useful to manually test the integration testing webapp.
-->
<integration.test.wait>false</integration.test.wait>
+
+ <!-- Where to copy our test bundles -->
+
<sling.testbundles.path>${project.build.directory}/testbundles</sling.testbundles.path>
+
+ <!-- Can be used to run tests with more or less bundles -->
+ <sling.test.scale.factor>10</sling.test.scale.factor>
</properties>
<build>
@@ -171,6 +177,30 @@
</includeScope>
</configuration>
</execution>
+ <execution>
+ <!--
+ Copy test bundles, test cases will create multiple
instances of them
+ -->
+ <id>copy-testbundles</id>
+ <goals>
+ <goal>copy-dependencies</goal>
+ </goals>
+ <configuration>
+ <outputDirectory>
+ ${sling.testbundles.path}
+ </outputDirectory>
+ <excludeTransitive>true</excludeTransitive>
+ <includeGroupIds>
+ org.apache.sling
+ </includeGroupIds>
+ <includeArtifactIds>
+
org.apache.sling.jcr.jcrinstall.testbundles.observer
+ </includeArtifactIds>
+ <includeScope>
+ provided
+ </includeScope>
+ </configuration>
+ </execution>
</executions>
</plugin>
@@ -289,6 +319,14 @@
http://${test.host}:${http.port}/${webdav.workspace.path}
</value>
</property>
+ <property>
+ <name>sling.testbundles.path</name>
+ <value>${sling.testbundles.path}</value>
+ </property>
+ <property>
+ <name>sling.test.scale.factor</name>
+ <value>${sling.test.scale.factor}</value>
+ </property>
</systemProperties>
</configuration>
</plugin>
@@ -657,7 +695,19 @@
<artifactId>jcl-over-slf4j</artifactId>
<scope>test</scope>
</dependency>
-
+ <dependency>
+ <groupId>biz.aQute</groupId>
+ <artifactId>bnd</artifactId>
+ <version>0.0.169</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.sling</groupId>
+
<artifactId>org.apache.sling.jcr.jcrinstall.testbundles.observer</artifactId>
+ <version>2.0.3-incubator-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+
<!-- The servlet container will have to provide these API classes -->
<dependency>
<groupId>javax.servlet</groupId>
Modified:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/HttpPingTest.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/HttpPingTest.java?rev=722881&r1=722880&r2=722881&view=diff
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/HttpPingTest.java
(original)
+++
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/HttpPingTest.java
Wed Dec 3 05:26:00 2008
@@ -17,12 +17,11 @@
package org.apache.sling.jcr.jcrinstall.integrationtest;
import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.sling.commons.testing.integration.HttpTestBase;
/** Ping the Sling server to verify that our integration test
* setup is ok.
*/
-public class HttpPingTest extends HttpTestBase {
+public class HttpPingTest extends JcrinstallTestBase {
public void testWebServerRoot() throws Exception
{
Added:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java?rev=722881&view=auto
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
(added)
+++
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
Wed Dec 3 05:26:00 2008
@@ -0,0 +1,44 @@
+/*
+ * 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.jcr.jcrinstall.integrationtest;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/** Try installing some cloned bundles */
+public class InstallClonedBundlesTest extends JcrinstallTestBase {
+
+ public void testInstallAndRemoveBundles() throws Exception {
+ final int activeBeforeTest = getActiveBundlesCount();
+ final List<String> installed = new LinkedList<String>();
+
+ final int nBundles = 10 * scaleFactor;
+ for(int i=0 ; i < nBundles; i++) {
+ installed.add(installClonedBundle(null, null));
+ }
+
+ assertActiveBundleCount("after adding bundles",
+ activeBeforeTest + nBundles,
DEFAULT_BUNDLES_TIMEOUT);
+
+ for(String path : installed) {
+ removeClonedBundle(path);
+ }
+
+ assertActiveBundleCount("after removing added bundles",
+ activeBeforeTest, DEFAULT_BUNDLES_TIMEOUT);
+ }
+}
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/InstallClonedBundlesTest.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Added:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java?rev=722881&view=auto
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
(added)
+++
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
Wed Dec 3 05:26:00 2008
@@ -0,0 +1,169 @@
+/*
+ * 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.jcr.jcrinstall.integrationtest;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Properties;
+import java.util.Set;
+
+import org.apache.sling.commons.testing.integration.HttpTestBase;
+import org.apache.sling.jcr.jcrinstall.integrationtest.util.BundleCloner;
+import org.osgi.framework.Bundle;
+
+/** Base class for jcrinstall test cases */
+public class JcrinstallTestBase extends HttpTestBase {
+
+ public static final int DEFAULT_BUNDLES_TIMEOUT = 10;
+ public static final String JCRINSTALL_STATUS_PATH =
"/system/sling/jcrinstall";
+ public static final String DEFAULT_INSTALL_PATH =
"/libs/jcrinstall/testing/install";
+ public static final String DEFAULT_BUNDLE_NAME_PATTERN = "observer";
+ private static long bundleCounter = System.currentTimeMillis();
+ private static Set<String> installedClones;
+ public static final String SCALE_FACTOR_PROP =
"sling.test.scale.factor";
+ protected final int scaleFactor = Integer.getInteger(SCALE_FACTOR_PROP);
+
+ private class ShutdownThread extends Thread {
+ @Override
+ public void run() {
+ try {
+ System.out.println("Deleting " + installedClones.size() + "
cloned bundles...");
+ for(String path : installedClones) {
+ testClient.delete(WEBDAV_BASE_URL + path);
+ }
+ } catch(Exception e) {
+ System.out.println("Exception in ShutdownThread:" + e);
+ }
+ }
+
+ };
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ if(scaleFactor < 1) {
+ throw new IllegalArgumentException("scaleFactor < 1, "
+ SCALE_FACTOR_PROP + " system property missing?");
+ }
+ }
+
+ /** Fail test if active bundles count is not expectedCount, after
+ * at most timeoutSeconds */
+ protected void assertActiveBundleCount(String message, int expectedCount,
int timeoutSeconds) throws IOException {
+ final long timeout = System.currentTimeMillis() + timeoutSeconds *
1000L;
+ int count = 0;
+ while(System.currentTimeMillis() < timeout) {
+ count = getActiveBundlesCount();
+ if(count == expectedCount) {
+ return;
+ }
+ }
+ fail(message + ": expected " + expectedCount + " active bundles, found
" + count);
+ }
+
+ protected int getActiveBundlesCount() throws IOException {
+ final String key = "bundles.in.state." + Bundle.ACTIVE;
+ final Properties props = getJcrInstallProperties();
+ int result = 0;
+ if(props.containsKey(key)) {
+ result = Integer.valueOf(props.getProperty(key));
+ }
+ return result;
+ }
+
+ /** Return the Properties found at /system/sling/jcrinstall */
+ protected Properties getJcrInstallProperties() throws IOException {
+ final String content = getContent(HTTP_BASE_URL +
JCRINSTALL_STATUS_PATH, CONTENT_TYPE_PLAIN);
+ final Properties result = new Properties();
+ result.load(new ByteArrayInputStream(content.getBytes("UTF-8")));
+ return result;
+ }
+
+ /** Remove a cloned bundle that had been installed before */
+ protected void removeClonedBundle(String path) throws IOException {
+ testClient.delete(WEBDAV_BASE_URL + path);
+ installedClones.remove(path);
+ }
+
+ /** Generate a clone of one of our test bundles, with unique bundle
name and
+ * symbolic name, and install it via WebDAV.
+ * @param bundleNamePattern The first test bundle that contains this
pattern
+ * is used as a source. If null, uses DEFAULT_BUNDLE_NAME_PATTERN
+ * @param installPath if null, use DEFAULT_INSTALL_PATH
+ * @return the path of the installed bundle
+ */
+ protected String installClonedBundle(String bundleNamePattern, String
installPath) throws Exception {
+ if(bundleNamePattern == null) {
+ bundleNamePattern = DEFAULT_BUNDLE_NAME_PATTERN;
+ }
+ if(installPath == null) {
+ installPath = DEFAULT_INSTALL_PATH;
+ }
+
+ // find test bundle to clone
+ final File testBundlesDir = new
File(System.getProperty("sling.testbundles.path"));
+ if(!testBundlesDir.isDirectory()) {
+ throw new IOException(testBundlesDir.getAbsolutePath()
+ " is not a directory");
+ }
+ File bundleSrc = null;
+ for(String bundle : testBundlesDir.list()) {
+ if(bundle.contains(bundleNamePattern)) {
+ bundleSrc = new File(testBundlesDir, bundle);
+ break;
+ }
+ }
+
+ // clone bundle
+ final File outputDir = new File(testBundlesDir,
"cloned-bundles");
+ outputDir.mkdirs();
+ final String bundleId = bundleNamePattern + "_clone_" +
bundleCounter++;
+ final File clone = new File(outputDir, bundleId + ".jar");
+ new BundleCloner().cloneBundle(bundleSrc, clone, bundleId,
bundleId);
+
+ // install clone by copying to repository - jcrinstall should
then pick it up
+ FileInputStream fis = new FileInputStream(clone);
+ final String path = installPath + "/" + clone.getName();
+ final String url = WEBDAV_BASE_URL + path;
+ try {
+ testClient.mkdirs(WEBDAV_BASE_URL, installPath);
+ testClient.upload(url, fis);
+ setupBundlesCleanup();
+ installedClones.add(path);
+ } finally {
+ if(fis != null) {
+ fis.close();
+ }
+ }
+
+ return path;
+ }
+
+ /** If not done yet, register a shutdown hook to delete cloned bundles
that
+ * we installed.
+ */
+ private void setupBundlesCleanup() {
+ synchronized (JcrinstallTestBase.class) {
+ if(installedClones == null) {
+ installedClones = new HashSet<String>();
+ Runtime.getRuntime().addShutdownHook(new
ShutdownThread());
+ }
+ }
+ }
+}
\ No newline at end of file
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/JcrinstallTestBase.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL
Added:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java?rev=722881&view=auto
==============================================================================
---
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
(added)
+++
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
Wed Dec 3 05:26:00 2008
@@ -0,0 +1,55 @@
+/*
+ * 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.jcr.jcrinstall.integrationtest.util;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+
+import aQute.bnd.main.bnd;
+
+/** Generate a clone of an OSGi bundle, with its
+ * own Bundle-Name and Bundle-SymbolicName.
+ */
+public class BundleCloner {
+ private final bnd bnd = new bnd();
+
+ /** Create a clone of supplied bundle */
+ public void cloneBundle(File bundle, File output, String name, String
symbolicName) throws Exception {
+ int options = 0;
+
+ Properties props = new Properties();
+ props.put("Bundle-Name", name);
+ props.put("Bundle-SymbolicName", symbolicName);
+ File properties =
File.createTempFile(getClass().getSimpleName(), "properties");
+ final OutputStream out = new FileOutputStream(properties);
+
+ File classpath[] = null;
+ try {
+ props.store(out, getClass().getSimpleName());
+ bnd.doWrap(properties, bundle, output, classpath,
options, null);
+ } finally {
+ if(out != null) {
+ out.close();
+ }
+ if(properties != null) {
+ properties.delete();
+ }
+ }
+ }
+}
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
incubator/sling/trunk/extensions/jcrinstall/testing/src/test/java/org/apache/sling/jcr/jcrinstall/integrationtest/util/BundleCloner.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision Rev URL