You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2011/02/28 17:40:50 UTC

svn commit: r1075415 - in /sling/trunk/testing/samples/integration-tests: pom.xml src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java

Author: bdelacretaz
Date: Mon Feb 28 16:40:50 2011
New Revision: 1075415

URL: http://svn.apache.org/viewvc?rev=1075415&view=rev
Log:
SLING-2001 - install additional bundles in a defined order, to make sure they all start

Modified:
    sling/trunk/testing/samples/integration-tests/pom.xml
    sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java

Modified: sling/trunk/testing/samples/integration-tests/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/testing/samples/integration-tests/pom.xml?rev=1075415&r1=1075414&r2=1075415&view=diff
==============================================================================
--- sling/trunk/testing/samples/integration-tests/pom.xml (original)
+++ sling/trunk/testing/samples/integration-tests/pom.xml Mon Feb 28 16:40:50 2011
@@ -97,9 +97,9 @@
                     </execution>
                     <execution>
                         <!-- 
-                            Consider all "provided" dependencies 
-                            as additional bundles that need to be
-                            installed before running tests  
+                            Consider all dependencies as candidates to be installed
+                            as additional bundles. We use system properties to define
+                            which bundles to install in which order.  
                         -->
                         <id>copy-additional-bundles</id>
                         <goals>
@@ -108,9 +108,6 @@
                             <phase>process-resources</phase>
                         <configuration>
                             <outputDirectory>${project.build.directory}/sling/additional-bundles</outputDirectory>
-                            <includeArtifactIds>
-                                org.apache.sling.junit.core,org.apache.sling.testing.samples.sampletests,org.apache.sling.junit.core,org.apache.sling.testing.samples.failingtests,org.apache.sling.junit.scriptable,org.apache.sling.junit.remote
-                            </includeArtifactIds>
                             <excludeTransitive>true</excludeTransitive>
                             <overWriteReleases>false</overWriteReleases>
                             <overWriteSnapshots>false</overWriteSnapshots>
@@ -155,6 +152,17 @@
                         <server.ready.path.1>/:script src="system/sling.js"</server.ready.path.1>
                         <server.ready.path.2>/.explorer.html:href="/libs/sling/explorer/css/explorer.css"</server.ready.path.2>
                         <server.ready.path.3>/sling-test/sling/sling-test.html:Sling client library tests</server.ready.path.3>
+                        
+                        <!-- 
+                            Define additional bundles to install by specifying the beginning of their artifact name.
+                            The bundles are installed in lexical order of these property names.
+                            All bundles must be listed as dependencies in this pom, or they won't be installed. 
+                        -->
+                        <sling.additional.bundle.1>org.apache.sling.junit.core</sling.additional.bundle.1>
+                        <sling.additional.bundle.2>org.apache.sling.junit.scriptable</sling.additional.bundle.2>
+                        <sling.additional.bundle.3>org.apache.sling.testing.samples.sampletests</sling.additional.bundle.3>
+                        <sling.additional.bundle.4>org.apache.sling.testing.samples.failingtests</sling.additional.bundle.4>
+                        <sling.additional.bundle.5>org.apache.sling.junit.remote</sling.additional.bundle.5>
                     </systemPropertyVariables>
                 </configuration>
             </plugin>

Modified: sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java?rev=1075415&r1=1075414&r2=1075415&view=diff
==============================================================================
--- sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java (original)
+++ sling/trunk/testing/samples/integration-tests/src/test/java/org/apache/sling/testing/samples/testtools/SlingTestBase.java Mon Feb 28 16:40:50 2011
@@ -21,7 +21,7 @@ import static org.junit.Assert.fail;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
+import java.util.Iterator;
 import java.util.List;
 import java.util.TreeSet;
 
@@ -45,6 +45,7 @@ public class SlingTestBase {
     public static final String SERVER_READY_PROP_PREFIX = "server.ready.path";
     public static final String KEEP_JAR_RUNNING_PROP = "keepJarRunning";
     public static final String ADDITONAL_BUNDLES_PATH = "additional.bundles.path";
+    public static final String BUNDLE_TO_INSTALL_PREFIX = "sling.additional.bundle";
     public static final String ADMIN = "admin";
     
     protected static String serverBaseUrl;
@@ -187,24 +188,35 @@ public class SlingTestBase {
             return;
         }
         
-        int count = 0;
-        final List<File> bundlesToInstall = new ArrayList<File>();
+        // Collect all filenames of candidate bundles
+        final List<String> bundleNames = new ArrayList<String>();
         final String [] files = dir.list();
         if(files != null) {
             for(String file : files) {
                 if(file.endsWith(".jar")) {
-                    File f = new File(dir, file);
-                    bundlesToInstall.add(f);
-                    count++;
+                    bundleNames.add(file);
                 }
             }
         }
         
-        // Install bundles in a predictable order, to
-        // be as deterministic as possible
-        Collections.sort(bundlesToInstall);
-        for(File f : bundlesToInstall) {
-            installBundle(f);
+        // And install those that are specified by system properties, in order
+        int count = 0;
+        final List<String> sortedPropertyKeys = new ArrayList<String>();
+        for(Object key : System.getProperties().keySet()) {
+            final String str = key.toString();
+            if(str.startsWith(BUNDLE_TO_INSTALL_PREFIX)) {
+                sortedPropertyKeys.add(str);
+            }
+        }
+        Collections.sort(sortedPropertyKeys);
+        for(String key : sortedPropertyKeys) {
+            final String filenamePrefix = System.getProperty(key);
+            for(String bundleFilename : bundleNames) {
+                if(bundleFilename.startsWith(filenamePrefix)) {
+                    installBundle(new File(dir, bundleFilename));
+                    count++;
+                }
+            }
         }
         
         log.info("{} additional bundles installed from {}", count, dir.getAbsolutePath());