You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2016/04/27 11:25:50 UTC

svn commit: r1741177 - in /sling/trunk/bundles/extensions/discovery: base/ base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/ base/src/test/java/org/apache/sling/discovery/base/its/ commons/ commons/src/test/java/org/apache/sli...

Author: stefanegli
Date: Wed Apr 27 09:25:49 2016
New Revision: 1741177

URL: http://svn.apache.org/viewvc?rev=1741177&view=rev
Log:
SLING-5598 : exclude slow running test by newly introduced Slow junit category - to run them nevertheless use -PincludeSlowTests

Added:
    sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java   (with props)
Modified:
    sling/trunk/bundles/extensions/discovery/base/pom.xml
    sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java
    sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterLoadTest.java
    sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterTest.java
    sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractDiscoveryServiceTest.java
    sling/trunk/bundles/extensions/discovery/commons/pom.xml
    sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
    sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
    sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
    sling/trunk/bundles/extensions/discovery/impl/pom.xml
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java
    sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java
    sling/trunk/bundles/extensions/discovery/oak/pom.xml

Modified: sling/trunk/bundles/extensions/discovery/base/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/pom.xml?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/base/pom.xml Wed Apr 27 09:25:49 2016
@@ -40,15 +40,21 @@
         <url>http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base</url>
     </scm>
 
+    <properties>
+        <!-- by default Slow tests are excluded - use -PincludeSlowTests to include them -->
+        <sling.excluded.surefire.groups>org.apache.sling.commons.testing.junit.categories.Slow</sling.excluded.surefire.groups>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
-	  	 <configuration>
-       		 	<redirectTestOutputToFile>false</redirectTestOutputToFile>
-       		 	<argLine>-Xmx2048m</argLine>
-        	 </configuration>
+                <configuration>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <argLine>-Xmx2048m</argLine>
+                    <excludedGroups>${sling.excluded.surefire.groups}</excludedGroups>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
@@ -90,6 +96,17 @@
             </plugin>
         </plugins>
     </build>
+    <profiles>
+        <profile>
+            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed, 
+                hence unsetting the category excludes 'sling.excluded.surefire.groups' to 
+                achieve that. -->
+            <id>includeSlowTests</id>
+            <properties>
+                <sling.excluded.surefire.groups></sling.excluded.surefire.groups>
+            </properties>
+        </profile>
+    </profiles>
     <dependencies>
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -127,7 +144,7 @@
 		<dependency>
 			<groupId>org.apache.jackrabbit</groupId>
 			<artifactId>jackrabbit-api</artifactId>
-			<version>2.2.4</version>
+			<version>2.10.2</version>
 			<scope>provided</scope>
 		</dependency>
 		<dependency>
@@ -151,7 +168,7 @@
  		<dependency>
 			<groupId>org.apache.sling</groupId>
 			<artifactId>org.apache.sling.discovery.commons</artifactId>
-			<version>1.0.7-SNAPSHOT</version>
+			<version>1.0.13-SNAPSHOT</version>
   		</dependency>
         <!-- besides including discovery.commons' normal jar above, 
               for testing a few test helper classes are also reused.
@@ -159,7 +176,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.discovery.commons</artifactId>
-            <version>1.0.7-SNAPSHOT</version>
+            <version>1.0.13-SNAPSHOT</version>
             <scope>test</scope>
             <type>test-jar</type>
         </dependency>
@@ -229,6 +246,10 @@
         <dependency>
             <groupId>org.jmock</groupId>
             <artifactId>jmock-junit4</artifactId>
+            <!-- with 2.5.1 jmock-junit4, which has a dependency on junit 4.4 
+                you get the following: NoSuchMethodError: org.junit.runner.Request.classes(Lorg/junit/runner/Computer;[Ljava/lang/Class;)Lorg/junit/runner/Request; 
+                hence this explicit newer dependency. -->
+            <!-- <version>2.8.2</version> -->
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
@@ -239,13 +260,13 @@
         <dependency>
         	<groupId>org.apache.jackrabbit</groupId>
         	<artifactId>jackrabbit-jcr-commons</artifactId>
-        	<version>2.10.1</version>
+        	<version>2.12.1</version>
         	<scope>test</scope>
         </dependency>
         <dependency>
         	<groupId>org.apache.sling</groupId>
         	<artifactId>org.apache.sling.commons.testing</artifactId>
-        	<version>2.0.22</version>
+        	<version>2.0.25-SNAPSHOT</version>
         	<scope>test</scope>
             <exclusions>
                 <!-- slf4j simple implementation logs INFO + higher to stdout (we don't want that behaviour) -->
@@ -296,6 +317,7 @@
           <groupId>org.apache.sling</groupId>
           <artifactId>org.apache.sling.testing.sling-mock</artifactId>
           <version>1.2.0</version>
+          <scope>test</scope>
         </dependency>
     </dependencies>
 </project>

Modified: sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/connectors/announcement/AnnouncementRegistryImplTest.java Wed Apr 27 09:25:49 2016
@@ -31,6 +31,7 @@ import javax.jcr.Session;
 
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.testing.jcr.RepositoryProvider;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.base.connectors.BaseConfig;
@@ -43,6 +44,7 @@ import org.apache.sling.discovery.common
 import org.apache.sling.discovery.commons.providers.spi.base.DummySlingSettingsService;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 
 public class AnnouncementRegistryImplTest {
 
@@ -78,6 +80,16 @@ public class AnnouncementRegistryImplTes
 
     @Test
     public void testRegisterUnregister() throws Exception {
+    	doTestRegisterUnregister(false);
+    }
+    
+    @Category(Slow.class)
+    @Test
+    public void testRegisterUnregister_Slow() throws Exception {
+    	doTestRegisterUnregister(true);
+    }
+    
+    private void doTestRegisterUnregister(boolean includeFinalExpiryCheck) throws Exception {
         try{
             registry.registerAnnouncement(null);
             fail("should complain");
@@ -142,9 +154,10 @@ public class AnnouncementRegistryImplTes
         assertTrue(registry.registerAnnouncement(ann)!=-1);
         assertEquals(1, registry.listInstances(localCluster).size());
 
-        Thread.sleep(10500);
-        assertEquals(0, registry.listInstances(localCluster).size());
-    
+        if (includeFinalExpiryCheck) {
+	        Thread.sleep(10500);
+	        assertEquals(0, registry.listInstances(localCluster).size());
+        }
     }
     
     @Test
@@ -315,6 +328,16 @@ public class AnnouncementRegistryImplTes
     
     @Test
     public void testCluster() throws Exception {
+    	doTestCluster(false);
+    }
+    
+    @Category(Slow.class)
+    @Test
+    public void testCluster_Slow() throws Exception {
+    	doTestCluster(true);
+    }
+
+    private void doTestCluster(boolean includeFinalExpiryCheck) throws Exception {
         ClusterView cluster1 = createCluster(2);
         ClusterView cluster2 = createCluster(4);
         ClusterView cluster3 = createCluster(7);
@@ -372,15 +395,17 @@ public class AnnouncementRegistryImplTes
         assertEquals(0, registry2.listLocalIncomingAnnouncements().size());
         assertAnnouncements(registry2, myCluster, 3, 8);
         
-        Thread.sleep(10500);
-        assertAnnouncements(registry1, myCluster, 3, 8);
-        assertAnnouncements(registry2, myCluster, 3, 8);
-        registry1.checkExpiredAnnouncements();
-        registry2.checkExpiredAnnouncements();
-        assertAnnouncements(registry1, myCluster, 1, 2);
-        assertAnnouncements(registry2, myCluster, 1, 2);
+        if (includeFinalExpiryCheck) {
+	        Thread.sleep(10500);
+	        assertAnnouncements(registry1, myCluster, 3, 8);
+	        assertAnnouncements(registry2, myCluster, 3, 8);
+	        registry1.checkExpiredAnnouncements();
+	        registry2.checkExpiredAnnouncements();
+	        assertAnnouncements(registry1, myCluster, 1, 2);
+	        assertAnnouncements(registry2, myCluster, 1, 2);
+        }
     }
-
+    
     private void assertAnnouncements(AnnouncementRegistryImpl registry,
             ClusterView myCluster, int expectedNumAnnouncements, int expectedNumInstances) {
         Announcement ann = createAnnouncement(myCluster, 0, false);

Modified: sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterLoadTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterLoadTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterLoadTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterLoadTest.java Wed Apr 27 09:25:49 2016
@@ -25,6 +25,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.base.commons.UndefinedClusterViewException;
 import org.apache.sling.discovery.base.its.setup.VirtualInstance;
 import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
@@ -32,6 +33,7 @@ import org.apache.sling.discovery.base.i
 import org.apache.sling.testing.tools.retry.RetryLoop;
 import org.junit.After;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -110,35 +112,52 @@ public abstract class AbstractClusterLoa
     }
 
     @Test
+    public void testTwoInstancesFast() throws Throwable {
+    	doTest(2, 3);
+    }
+    
+    @Test
+    public void testThreeInstancesFast() throws Throwable {
+    	doTest(3, 3);
+    }
+
+    @Category(Slow.class)
+    @Test
     public void testTwoInstances() throws Throwable {
     	doTest(2, 5);
     }
 
+    @Category(Slow.class)
     @Test
     public void testThreeInstances() throws Throwable {
     	doTest(3, 6);
     }
 
+    @Category(Slow.class)
     @Test
     public void testFourInstances() throws Throwable {
     	doTest(4, 7);
     }
 
+    @Category(Slow.class)
     @Test
     public void testFiveInstances() throws Throwable {
     	doTest(5, 8);
     }
 
+    @Category(Slow.class)
     @Test
     public void testSixInstances() throws Throwable {
     	doTest(6, 9);
     }
 
+    @Category(Slow.class)
     @Test
     public void testSevenInstances() throws Throwable {
         doTest(7, 10);
     }
     
+    @Category(Slow.class)
     @Test
     public void testEightInstances() throws Throwable {
         doTest(8, 50);

Modified: sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractClusterTest.java Wed Apr 27 09:25:49 2016
@@ -36,6 +36,7 @@ import java.util.concurrent.Semaphore;
 
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.TopologyEvent;
@@ -56,6 +57,7 @@ import org.apache.sling.discovery.base.i
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -325,6 +327,7 @@ public abstract class AbstractClusterTes
          * then simulate load balancer switching from instance1 to instance2 - hence pings go to instance2 
          * 
          */
+    @Category(Slow.class) //TODO: this takes env 45sec
     @Test
     public void testConnectorSwitching4139() throws Throwable {
         final int MIN_EVENT_DELAY = 1;
@@ -504,6 +507,7 @@ public abstract class AbstractClusterTes
 
     }
 
+    @Category(Slow.class) //TODO: this takes env 25sec
     @Test
     public void testDuplicateInstance3726() throws Throwable {
         logger.info("testDuplicateInstance3726: start");
@@ -1240,6 +1244,7 @@ public abstract class AbstractClusterTes
         logger.info("testClusterView: end");
     }
 
+    @Category(Slow.class) //TODO: this takes env 15sec
     @Test
     public void testAdditionalInstance() throws Throwable {
         logger.info("testAdditionalInstance: start");
@@ -1454,6 +1459,7 @@ public abstract class AbstractClusterTes
      *    the second listener still gets the event
      * @throws Throwable 
      */
+    @Category(Slow.class) //TODO: this takes env 15sec
     @Test
     public void testLongRunningListener() throws Throwable {
         // let the instance1 become alone, instance2 is idle

Modified: sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractDiscoveryServiceTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractDiscoveryServiceTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractDiscoveryServiceTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/base/src/test/java/org/apache/sling/discovery/base/its/AbstractDiscoveryServiceTest.java Wed Apr 27 09:25:49 2016
@@ -27,6 +27,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.TopologyEvent;
 import org.apache.sling.discovery.TopologyEvent.Type;
@@ -39,6 +40,7 @@ import org.apache.sling.testing.tools.re
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -277,6 +279,22 @@ public abstract class AbstractDiscoveryS
     }
 
     @Test
+    public void testFiveInstances() throws Throwable {
+        logger.info("testFiveInstances: start");
+        Tester i1 = newInstance("i1", 1, 30, 250, null);
+        for(int i=2; i<=5; i++) {
+            Tester in = newInstance("i"+i, 1, 30, 250, i1.instance);
+        }
+        logger.info("testFiveInstances: starting retry loop (40sec max)");
+        startRetryLoop(testers, 40);
+        i1.instance.dumpRepo();
+        i1.assertNoFailures();
+        assertStableTopology(testers.toArray(new Tester[0]));
+        logger.info("testFiveInstances: end");
+    }
+
+    @Category(Slow.class) //TODO: this takes env 10sec
+    @Test
     public void testTenInstances() throws Throwable {
         logger.info("testTenInstances: start");
         Tester i1 = newInstance("i1", 1, 30, 250, null);
@@ -291,6 +309,7 @@ public abstract class AbstractDiscoveryS
         logger.info("testTenInstances: end");
     }
 
+    @Category(Slow.class) //TODO: this takes env 15sec
     @Test
     public void testTwentyInstances() throws Throwable {
         logger.info("testTwentyInstances: start");
@@ -306,6 +325,7 @@ public abstract class AbstractDiscoveryS
         logger.info("testTwentyInstances: end");
     }
 
+    @Category(Slow.class) //TODO: this takes env 40sec
     @Test
     public void testTwentyFourInstances() throws Throwable {
         logger.info("testTwentyFourInstances: start");
@@ -350,6 +370,7 @@ public abstract class AbstractDiscoveryS
         }, retryTimeoutSeconds /*seconds*/, 1000/*millis*/);        
     }
     
+    @Category(Slow.class) //TODO: this takes env 120sec
     @Test
     public void testStartStopFiesta() throws Throwable {
         final Tester[] instances = new Tester[8];

Modified: sling/trunk/bundles/extensions/discovery/commons/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/pom.xml?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/commons/pom.xml Wed Apr 27 09:25:49 2016
@@ -33,13 +33,18 @@
 
     <name>Apache Sling Discovery Commons</name>
     <description>Common services related to Sling Discovery</description>
-
+    
     <scm>
         <connection>scm:svn:http://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/discovery/commons</connection>
         <developerConnection>scm:svn:https://svn.apache.org/repos/asf/sling/trunk/bundles/extensions/discovery/commons</developerConnection>
         <url>http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons</url>
     </scm>
 
+    <properties>
+        <!-- by default Slow tests are excluded - use -PincludeSlowTests to include them -->
+    	<sling.excluded.surefire.groups>org.apache.sling.commons.testing.junit.categories.Slow</sling.excluded.surefire.groups>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
@@ -66,8 +71,28 @@
                     </execution>
                 </executions>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <argLine>-Xmx2048m</argLine>
+                    <excludedGroups>${sling.excluded.surefire.groups}</excludedGroups>
+                </configuration>
+            </plugin>
         </plugins>
     </build>
+    <profiles>
+        <profile>
+            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed, 
+                hence unsetting the category excludes 'sling.excluded.surefire.groups' to 
+                achieve that. -->
+            <id>includeSlowTests</id>
+            <properties>
+                <sling.excluded.surefire.groups></sling.excluded.surefire.groups>
+            </properties>
+        </profile>
+    </profiles>
     <dependencies>
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -110,7 +135,7 @@
         <dependency>
         	<groupId>org.apache.sling</groupId>
         	<artifactId>org.apache.sling.commons.testing</artifactId>
-        	<version>2.0.16</version>
+        	<version>2.0.25-SNAPSHOT</version>
         	<scope>test</scope>
             <exclusions>
                 <!-- slf4j simple implementation logs INFO + higher to stdout (we don't want that behaviour) -->
@@ -208,5 +233,13 @@
 			<version>1.2.2</version>
             <scope>provided</scope>
 		</dependency>
+        <dependency>
+            <groupId>org.jmock</groupId>
+            <artifactId>jmock-junit4</artifactId>
+            <!-- with 2.5.1 jmock-junit4, which has a dependency on junit 4.4 
+                you get the following: NoSuchMethodError: org.junit.runner.Request.classes(Lorg/junit/runner/Computer;[Ljava/lang/Class;)Lorg/junit/runner/Request; 
+                hence this explicit newer dependency. -->
+            <version>2.8.2</version>
+        </dependency>
     </dependencies>
 </project>

Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestMinEventDelayHandler.java Wed Apr 27 09:25:49 2016
@@ -29,6 +29,7 @@ import java.util.concurrent.locks.Reentr
 
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.commons.providers.BaseTopologyView;
 import org.apache.sling.discovery.commons.providers.DefaultClusterView;
 import org.apache.sling.discovery.commons.providers.DummyTopologyView;
@@ -39,6 +40,7 @@ import org.junit.After;
 import org.junit.Before;
 import org.junit.Ignore;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -77,7 +79,7 @@ public class TestMinEventDelayHandler {
 
         final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
         logLevel = discoveryLogger.getLevel();
-        discoveryLogger.setLevel(Level.DEBUG);
+        discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
     }
     
     @After
@@ -165,6 +167,7 @@ public class TestMinEventDelayHandler {
         assertEquals(0, listener.countEvents());
     }
 
+    @Category(Slow.class) //TODO test takes env 50sec
     @Test
     public void testNormalDelaying() throws Exception {
         final DummyListener listener = new DummyListener();
@@ -190,6 +193,7 @@ public class TestMinEventDelayHandler {
         }
     }
 
+    @Category(Slow.class) //TODO test takes env 45sec
     @Test
     public void testFailedDelaying() throws Exception {
         scheduler.failMode();

Added: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java?rev=1741177&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java (added)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java Wed Apr 27 09:25:49 2016
@@ -0,0 +1,153 @@
+/*
+ * 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.discovery.commons.providers.base;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import java.util.Random;
+import java.util.UUID;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
+import org.apache.sling.commons.testing.junit.categories.Slow;
+import org.apache.sling.discovery.TopologyEvent;
+import org.apache.sling.discovery.commons.providers.DefaultClusterView;
+import org.apache.sling.discovery.commons.providers.DummyTopologyView;
+import org.apache.sling.discovery.commons.providers.EventHelper;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(Slow.class)
+public class TestSlowViewStateManager extends TestViewStateManager {
+
+    /** does couple loops randomly calling handleChanging() (or not) and then handleNewView().
+     * Note: random is passed to allow customizing and not hardcoding this method to a particular random 
+     * @throws InterruptedException **/
+    protected void randomEventLoop(final Random random, DummyListener... listeners) throws InterruptedException {
+        TestHelper.randomEventLoop(mgr, null, 100, -1, random, listeners);
+    }
+    
+    @Category(Slow.class) //TODO test takes env 10sec
+    @Test
+    public void testClusterSyncService_withConcurrency() throws Exception {
+        final org.apache.log4j.Logger commonsLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery.commons.providers");
+        final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
+        commonsLogger.setLevel(Level.INFO); // change here to DEBUG in case of issues with this test
+        final Semaphore serviceSemaphore = new Semaphore(0);
+        final Semaphore testSemaphore = new Semaphore(0);
+        final ReentrantLock lock = new ReentrantLock();
+        final ClusterSyncServiceWithSemaphore cs = new ClusterSyncServiceWithSemaphore(lock, serviceSemaphore );
+        mgr = new ViewStateManagerImpl(lock, cs);
+        final DummyListener listener = new DummyListener();
+        mgr.bind(listener);
+        TestHelper.assertNoEvents(listener);
+        mgr.handleActivated();
+        TestHelper.assertNoEvents(listener);
+        final String slingId1 = UUID.randomUUID().toString();
+        final String slingId2 = UUID.randomUUID().toString();
+        final String slingId3 = UUID.randomUUID().toString();
+        final String clusterId = UUID.randomUUID().toString();
+        final DefaultClusterView cluster = new DefaultClusterView(clusterId);
+        final DummyTopologyView view1 = new DummyTopologyView()
+                .addInstance(slingId1, cluster, true, true)
+                .addInstance(slingId2, cluster, false, false)
+                .addInstance(slingId3, cluster, false, false);
+        final DummyTopologyView view2 = DummyTopologyView.clone(view1).removeInstance(slingId2);
+        final DummyTopologyView view3 = DummyTopologyView.clone(view1).removeInstance(slingId2).removeInstance(slingId3);
+        async(new Runnable() {
+
+            public void run() {
+                mgr.handleNewView(view1);
+            }
+            
+        });
+        Thread.sleep(1000);
+        TestHelper.assertNoEvents(listener);
+        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
+        serviceSemaphore.release(1); // release the first one only
+        Thread.sleep(1000);
+        assertEvents(listener, EventHelper.newInitEvent(view1));
+        mgr.handleChanging();
+        assertEquals(0, mgr.waitForAsyncEvents(500));
+        assertEvents(listener, EventHelper.newChangingEvent(view1));
+        async(new Runnable() {
+
+            public void run() {
+                mgr.handleNewView(view2);
+            }
+            
+        });
+        logger.debug("run: waiting 1sec");
+        Thread.sleep(1000);
+        logger.debug("run: asserting no events");
+        TestHelper.assertNoEvents(listener);
+        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
+        assertFalse("should not be locked", lock.isLocked());
+
+        logger.debug("run: issuing a second event");
+        // before releasing, issue another event, lets do a combination of changing/changed
+        async(new Runnable() {
+
+            public void run() {
+                logger.debug("run2: calling handleChanging...");
+                mgr.handleChanging();
+                try {
+                    logger.debug("run2: done with handleChanging, acquiring testSemaphore...");
+                    testSemaphore.acquire();
+                    logger.debug("run2: calling handleNewView...");
+                    mgr.handleNewView(view3);
+                    logger.debug("run2: done with handleNewView...");
+                } catch (InterruptedException e) {
+                    // fail
+                    logger.error("interrupted: "+e, e);
+                }
+            }
+            
+        });
+        logger.debug("run: waiting 1sec");
+        Thread.sleep(1000);
+        int remainingAsyncEvents = mgr.waitForAsyncEvents(2000);
+        logger.info("run: result of waitForAsyncEvent is: "+remainingAsyncEvents);
+        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
+        assertEquals("should be acquiring (by thread2)", 1, testSemaphore.getQueueLength());
+        // releasing the testSemaphore
+        testSemaphore.release();
+        logger.debug("run: waiting 1sec");
+        Thread.sleep(1000);
+        assertEquals("should have two async events now in the queue or being sent", 2, mgr.waitForAsyncEvents(500));
+        assertEquals("but should only have 1 thread actually sitting on the semaphore waiting", 1, serviceSemaphore.getQueueLength());
+        logger.debug("run: releasing consistencyService");
+        serviceSemaphore.release(1); // release the first one only
+        logger.debug("run: waiting 1sec");
+        Thread.sleep(1000);
+        assertFalse("should not be locked", lock.isLocked());
+        TestHelper.assertNoEvents(listener); // this should not have triggered any event 
+        serviceSemaphore.release(1); // then release the 2nd one
+        logger.debug("run: waiting 1sec");
+        Thread.sleep(1000);
+        logger.debug("run: asserting 1 event");
+        final TopologyEvent changedEvent = EventHelper.newChangedEvent(view1, view3);
+        assertEvents(listener, changedEvent);
+        commonsLogger.setLevel(Level.INFO); // back to default
+    }
+
+}

Propchange: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestSlowViewStateManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/base/TestViewStateManager.java Wed Apr 27 09:25:49 2016
@@ -32,6 +32,7 @@ import java.util.concurrent.locks.Reentr
 
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.ClusterView;
 import org.apache.sling.discovery.DiscoveryService;
 import org.apache.sling.discovery.InstanceDescription;
@@ -46,14 +47,15 @@ import org.apache.sling.discovery.common
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class TestViewStateManager {
 
-    private static final Logger logger = LoggerFactory.getLogger(TestViewStateManager.class);
+    protected static final Logger logger = LoggerFactory.getLogger(TestViewStateManager.class);
 
-    private class ClusterSyncServiceWithSemaphore implements ClusterSyncService {
+    class ClusterSyncServiceWithSemaphore implements ClusterSyncService {
 
         private final Semaphore semaphore;
         private final Lock lock;
@@ -86,7 +88,7 @@ public class TestViewStateManager {
         
     }
     
-    private ViewStateManagerImpl mgr;
+    protected ViewStateManagerImpl mgr;
     
     private Random defaultRandom;
 
@@ -130,8 +132,8 @@ public class TestViewStateManager {
     /** does couple loops randomly calling handleChanging() (or not) and then handleNewView().
      * Note: random is passed to allow customizing and not hardcoding this method to a particular random 
      * @throws InterruptedException **/
-    private void randomEventLoop(final Random random, DummyListener... listeners) throws InterruptedException {
-        TestHelper.randomEventLoop(mgr, null, 100, -1, random, listeners);
+    protected void randomEventLoop(final Random random, DummyListener... listeners) throws InterruptedException {
+        TestHelper.randomEventLoop(mgr, null, 5, -1, random, listeners);
     }
     
     @Test
@@ -616,117 +618,14 @@ public class TestViewStateManager {
         commonsLogger.setLevel(Level.INFO); // back to default
     }
 
-    private void async(Runnable runnable) {
+    protected void async(Runnable runnable) {
         new Thread(runnable).start();
     }
 
     @Test
-    public void testClusterSyncService_withConcurrency() throws Exception {
-        final org.apache.log4j.Logger commonsLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery.commons.providers");
-        final org.apache.log4j.Level logLevel = commonsLogger.getLevel();
-        commonsLogger.setLevel(Level.INFO); // change here to DEBUG in case of issues with this test
-        final Semaphore serviceSemaphore = new Semaphore(0);
-        final Semaphore testSemaphore = new Semaphore(0);
-        final ReentrantLock lock = new ReentrantLock();
-        final ClusterSyncServiceWithSemaphore cs = new ClusterSyncServiceWithSemaphore(lock, serviceSemaphore );
-        mgr = new ViewStateManagerImpl(lock, cs);
-        final DummyListener listener = new DummyListener();
-        mgr.bind(listener);
-        TestHelper.assertNoEvents(listener);
-        mgr.handleActivated();
-        TestHelper.assertNoEvents(listener);
-        final String slingId1 = UUID.randomUUID().toString();
-        final String slingId2 = UUID.randomUUID().toString();
-        final String slingId3 = UUID.randomUUID().toString();
-        final String clusterId = UUID.randomUUID().toString();
-        final DefaultClusterView cluster = new DefaultClusterView(clusterId);
-        final DummyTopologyView view1 = new DummyTopologyView()
-                .addInstance(slingId1, cluster, true, true)
-                .addInstance(slingId2, cluster, false, false)
-                .addInstance(slingId3, cluster, false, false);
-        final DummyTopologyView view2 = DummyTopologyView.clone(view1).removeInstance(slingId2);
-        final DummyTopologyView view3 = DummyTopologyView.clone(view1).removeInstance(slingId2).removeInstance(slingId3);
-        async(new Runnable() {
-
-            public void run() {
-                mgr.handleNewView(view1);
-            }
-            
-        });
-        Thread.sleep(1000);
-        TestHelper.assertNoEvents(listener);
-        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
-        serviceSemaphore.release(1); // release the first one only
-        Thread.sleep(1000);
-        assertEvents(listener, EventHelper.newInitEvent(view1));
-        mgr.handleChanging();
-        assertEquals(0, mgr.waitForAsyncEvents(500));
-        assertEvents(listener, EventHelper.newChangingEvent(view1));
-        async(new Runnable() {
-
-            public void run() {
-                mgr.handleNewView(view2);
-            }
-            
-        });
-        logger.debug("run: waiting 1sec");
-        Thread.sleep(1000);
-        logger.debug("run: asserting no events");
-        TestHelper.assertNoEvents(listener);
-        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
-        assertFalse("should not be locked", lock.isLocked());
-
-        logger.debug("run: issuing a second event");
-        // before releasing, issue another event, lets do a combination of changing/changed
-        async(new Runnable() {
-
-            public void run() {
-                logger.debug("run2: calling handleChanging...");
-                mgr.handleChanging();
-                try {
-                    logger.debug("run2: done with handleChanging, acquiring testSemaphore...");
-                    testSemaphore.acquire();
-                    logger.debug("run2: calling handleNewView...");
-                    mgr.handleNewView(view3);
-                    logger.debug("run2: done with handleNewView...");
-                } catch (InterruptedException e) {
-                    // fail
-                    logger.error("interrupted: "+e, e);
-                }
-            }
-            
-        });
-        logger.debug("run: waiting 1sec");
-        Thread.sleep(1000);
-        int remainingAsyncEvents = mgr.waitForAsyncEvents(2000);
-        logger.info("run: result of waitForAsyncEvent is: "+remainingAsyncEvents);
-        assertEquals("should have one thread now waiting", 1, serviceSemaphore.getQueueLength());
-        assertEquals("should be acquiring (by thread2)", 1, testSemaphore.getQueueLength());
-        // releasing the testSemaphore
-        testSemaphore.release();
-        logger.debug("run: waiting 1sec");
-        Thread.sleep(1000);
-        assertEquals("should have two async events now in the queue or being sent", 2, mgr.waitForAsyncEvents(500));
-        assertEquals("but should only have 1 thread actually sitting on the semaphore waiting", 1, serviceSemaphore.getQueueLength());
-        logger.debug("run: releasing consistencyService");
-        serviceSemaphore.release(1); // release the first one only
-        logger.debug("run: waiting 1sec");
-        Thread.sleep(1000);
-        assertFalse("should not be locked", lock.isLocked());
-        TestHelper.assertNoEvents(listener); // this should not have triggered any event 
-        serviceSemaphore.release(1); // then release the 2nd one
-        logger.debug("run: waiting 1sec");
-        Thread.sleep(1000);
-        logger.debug("run: asserting 1 event");
-        final TopologyEvent changedEvent = EventHelper.newChangedEvent(view1, view3);
-        assertEvents(listener, changedEvent);
-        commonsLogger.setLevel(Level.INFO); // back to default
-    }
-
-    @Test
     public void testOnlyDiffersInProperties() throws Exception {
         final org.apache.log4j.Logger discoveryLogger = LogManager.getRootLogger().getLogger("org.apache.sling.discovery");
-        discoveryLogger.setLevel(Level.DEBUG);
+        discoveryLogger.setLevel(Level.INFO); // changed from Level.DEBUG
         logger.info("testOnlyDiffersInProperties: start");
         final String slingId1 = UUID.randomUUID().toString();
         final String slingId2 = UUID.randomUUID().toString();

Modified: sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java (original)
+++ sling/trunk/bundles/extensions/discovery/commons/src/test/java/org/apache/sling/discovery/commons/providers/spi/base/RepositoryTestHelper.java Wed Apr 27 09:25:49 2016
@@ -57,6 +57,7 @@ import org.jmock.Mockery;
 import org.jmock.api.Action;
 import org.jmock.api.Invocation;
 import org.jmock.integration.junit4.JUnit4Mockery;
+import org.jmock.lib.concurrent.Synchroniser;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -214,7 +215,10 @@ public class RepositoryTestHelper {
 
     public static ResourceResolverFactory mockResourceResolverFactory(final SlingRepository repositoryOrNull)
             throws Exception {
-        Mockery context = new JUnit4Mockery();
+        Mockery context = new JUnit4Mockery(){{
+        	// @see http://www.jmock.org/threading-synchroniser.html
+            setThreadingPolicy(new Synchroniser());
+        }};
     
         final ResourceResolverFactory resourceResolverFactory = context
                 .mock(ResourceResolverFactory.class);

Modified: sling/trunk/bundles/extensions/discovery/impl/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/pom.xml?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/impl/pom.xml Wed Apr 27 09:25:49 2016
@@ -40,15 +40,21 @@
         <url>http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl</url>
     </scm>
 
+    <properties>
+        <!-- by default Slow tests are excluded - use -PincludeSlowTests to include them -->
+        <sling.excluded.surefire.groups>org.apache.sling.commons.testing.junit.categories.Slow</sling.excluded.surefire.groups>
+    </properties>
+
     <build>
         <plugins>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
-	  	 <configuration>
-       		 	<redirectTestOutputToFile>false</redirectTestOutputToFile>
-       		 	<argLine>-Xmx2048m</argLine>
-        	 </configuration>
+                <configuration>
+                    <redirectTestOutputToFile>false</redirectTestOutputToFile>
+                    <argLine>-Xmx2048m</argLine>
+                    <excludedGroups>${sling.excluded.surefire.groups}</excludedGroups>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
@@ -74,6 +80,17 @@
             </plugin>
         </plugins>
     </build>
+    <profiles>
+        <profile>
+            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed, 
+                hence unsetting the category excludes 'sling.excluded.surefire.groups' to 
+                achieve that. -->
+            <id>includeSlowTests</id>
+            <properties>
+                <sling.excluded.surefire.groups></sling.excluded.surefire.groups>
+            </properties>
+        </profile>
+    </profiles>
     <dependencies>
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -240,7 +257,7 @@
         <dependency>
         	<groupId>org.apache.sling</groupId>
         	<artifactId>org.apache.sling.commons.testing</artifactId>
-        	<version>2.0.24</version>
+        	<version>2.0.25-SNAPSHOT</version>
         	<scope>test</scope>
             <exclusions>
                 <!-- slf4j simple implementation logs INFO + higher to stdout (we don't want that behaviour) -->

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/RepositoryDelaysTest.java Wed Apr 27 09:25:49 2016
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertTru
 import org.apache.log4j.Level;
 import org.apache.log4j.LogManager;
 import org.apache.sling.discovery.TopologyView;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.TopologyEvent.Type;
 import org.apache.sling.discovery.base.its.setup.VirtualInstanceBuilder;
 import org.apache.sling.discovery.base.its.setup.mock.AssertingTopologyEventListener;
@@ -33,6 +34,7 @@ import org.apache.sling.discovery.impl.s
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -81,6 +83,7 @@ public class RepositoryDelaysTest {
      * typically for longer than the configured heartbeat
      * timeout
      */
+    @Category(Slow.class) //TODO: test takes couple minutes!
     @Test
     public void testSlowSessionSaves() throws Exception {
         VirtualInstanceBuilder builder1 = newBuilder();

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/cluster/voting/VotingHandlerTest.java Wed Apr 27 09:25:49 2016
@@ -41,6 +41,7 @@ import javax.jcr.Session;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.commons.testing.jcr.RepositoryProvider;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.commons.threads.ModifiableThreadPoolConfig;
 import org.apache.sling.commons.threads.impl.DefaultThreadPool;
 import org.apache.sling.discovery.base.its.setup.OSGiMock;
@@ -55,6 +56,7 @@ import org.eclipse.jetty.util.Concurrent
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -361,26 +363,40 @@ public class VotingHandlerTest {
         doTestConcurrentVotes(123, 12, votingHandler1);
     }
     
+    @Category(Slow.class) //TODO: takes env 15sec
     @Test
     public void testConcurrentVotesTwoNodes() throws Exception {
         doTestConcurrentVotes(456, 12, votingHandler1, votingHandler2);
     }
     
     @Test
+    public void testFastConcurrentVotesTwoNodes() throws Exception {
+        doTestConcurrentVotes(42, 12, votingHandler1, votingHandler2);
+    }
+
+    @Category(Slow.class) //TODO: takes env 10sec
+    @Test
     public void testConcurrentVotesThreeNodes() throws Exception {
         doTestConcurrentVotes(234, 12, votingHandler1, votingHandler2, votingHandler3);
     }
     
+    @Category(Slow.class) //TODO: takes env 30sec
     @Test
     public void testConcurrentVotesFourNodes() throws Exception {
         doTestConcurrentVotes(247, 12, votingHandler1, votingHandler2, votingHandler3, votingHandler4);
     }
     
+    @Category(Slow.class) //TODO: takes env 25sec
     @Test
     public void testConcurrentVotesFiveNodes() throws Exception {
         doTestConcurrentVotes(285, 12, votingHandler1, votingHandler2, votingHandler3, votingHandler4, votingHandler5);
     }
     
+    @Test
+    public void testFastConcurrentVotesFiveNodes() throws Exception {
+        doTestConcurrentVotes(12, 12, votingHandler1, votingHandler2, votingHandler3, votingHandler4, votingHandler5);
+    }
+
     private void add(List<VotingDetail> votingDetails, Map<VotingDetail, Integer> totals) {
         for (VotingDetail d : votingDetails) {
             Integer i = totals.get(d);

Modified: sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java (original)
+++ sling/trunk/bundles/extensions/discovery/impl/src/test/java/org/apache/sling/discovery/impl/common/heartbeat/HeartbeatTest.java Wed Apr 27 09:25:49 2016
@@ -40,6 +40,7 @@ import org.apache.sling.api.resource.Mod
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
+import org.apache.sling.commons.testing.junit.categories.Slow;
 import org.apache.sling.discovery.TopologyEvent;
 import org.apache.sling.discovery.TopologyEventListener;
 import org.apache.sling.discovery.TopologyView;
@@ -52,6 +53,7 @@ import org.apache.sling.discovery.impl.s
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
+import org.junit.experimental.categories.Category;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -138,11 +140,13 @@ public class HeartbeatTest {
         }
     }
 
+    @Category(Slow.class) //TODO: takes env 40sec
     @Test
     public void testPartitioning() throws Throwable {
         doTestPartitioning(true);
     }
     
+    @Category(Slow.class) //TODO: takes env 35sec
     @Test
     public void testPartitioningWithFailingScheduler() throws Throwable {
         doTestPartitioning(false);
@@ -437,11 +441,13 @@ public class HeartbeatTest {
      * TOPOLOGY_CHANGED until it finally sends heartbeats again and the voting can 
      * happen again.
      */
+    @Category(Slow.class) //TODO: takes env 25sec
     @Test
     public void testSlowAndFastMachine() throws Throwable {
         doTestSlowAndFastMachine(false);
     }
 
+    @Category(Slow.class) //TODO: takes env 25sec
     @Test
     public void testSlowAndFastMachineWithFailingScheduler() throws Throwable {
         doTestSlowAndFastMachine(true);

Modified: sling/trunk/bundles/extensions/discovery/oak/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/discovery/oak/pom.xml?rev=1741177&r1=1741176&r2=1741177&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/discovery/oak/pom.xml (original)
+++ sling/trunk/bundles/extensions/discovery/oak/pom.xml Wed Apr 27 09:25:49 2016
@@ -36,6 +36,9 @@
 
     <properties>
       <jackrabbit.version>2.12.1</jackrabbit.version>
+
+      <!-- by default Slow tests are excluded - use -PincludeSlowTests to include them -->
+      <sling.excluded.surefire.groups>org.apache.sling.commons.testing.junit.categories.Slow</sling.excluded.surefire.groups>
     </properties>
 
     <scm>
@@ -49,10 +52,11 @@
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-surefire-plugin</artifactId>
-	  	 <configuration>
-       		 	<redirectTestOutputToFile>false</redirectTestOutputToFile>
-       		 	<argLine>-Xmx2048m</argLine>
-        	 </configuration>
+                <configuration>
+                    <redirectTestOutputToFile>true</redirectTestOutputToFile>
+                    <argLine>-Xmx2048m</argLine>
+                    <excludedGroups>${sling.excluded.surefire.groups}</excludedGroups>
+                </configuration>
             </plugin>
             <plugin>
                 <groupId>org.apache.felix</groupId>
@@ -75,6 +79,17 @@
             </plugin>
         </plugins>
     </build>
+    <profiles>
+        <profile>
+            <!-- when -PincludeSlowTests is set, the Slow tests should also be executed, 
+                hence unsetting the category excludes 'sling.excluded.surefire.groups' to 
+                achieve that. -->
+            <id>includeSlowTests</id>
+            <properties>
+                <sling.excluded.surefire.groups></sling.excluded.surefire.groups>
+            </properties>
+        </profile>
+    </profiles>
     <dependencies>
         <dependency>
             <groupId>org.apache.felix</groupId>
@@ -241,7 +256,7 @@
         <dependency>
         	<groupId>org.apache.sling</groupId>
         	<artifactId>org.apache.sling.commons.testing</artifactId>
-        	<version>2.0.16</version>
+        	<version>2.0.25-SNAPSHOT</version>
         	<scope>test</scope>
             <exclusions>
                 <!-- slf4j simple implementation logs INFO + higher to stdout (we don't want that behaviour) -->