You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/12/29 12:45:31 UTC

svn commit: r1722110 - in /sling/trunk/bundles/extensions/event: ./ src/main/java/org/apache/sling/event/impl/support/ src/test/java/org/apache/sling/event/impl/ src/test/java/org/apache/sling/event/impl/jobs/config/ src/test/java/org/apache/sling/even...

Author: cziegeler
Date: Tue Dec 29 11:45:31 2015
New Revision: 1722110

URL: http://svn.apache.org/viewvc?rev=1722110&view=rev
Log:
Clean up test dependencies and wait for service registrations to propagate

Added:
    sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java   (with props)
Modified:
    sling/trunk/bundles/extensions/event/pom.xml
    sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/TopicMatcherHelper.java
    sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/config/JobManagerConfigurationTest.java
    sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/jmx/AllJobStatisticsMBeanTest.java
    sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java
    sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/TopicMatchingTest.java

Modified: sling/trunk/bundles/extensions/event/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/pom.xml?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/pom.xml (original)
+++ sling/trunk/bundles/extensions/event/pom.xml Tue Dec 29 11:45:31 2015
@@ -46,7 +46,7 @@
         <site.jira.version.id>12315369</site.jira.version.id>
         <sling.java.version>7</sling.java.version>
         <exam.version>4.4.0</exam.version>
-        <url.version>2.4.3</url.version>
+        <url.version>2.4.5</url.version>
         <bundle.build.dir>${basedir}/target</bundle.build.dir>
         <bundle.file.name>${bundle.build.dir}/${project.build.finalName}.jar</bundle.file.name>
         <min.port>37000</min.port>
@@ -229,8 +229,9 @@
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
-            <artifactId>org.osgi.core</artifactId>
-            <version>4.2.0</version>
+            <artifactId>osgi.core</artifactId>
+            <version>6.0.0</version>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.osgi</groupId>
@@ -286,32 +287,15 @@
         </dependency>
       <!-- Testing -->
         <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <version>4.12</version>
-        </dependency>
-        <dependency>
-            <groupId>junit-addons</groupId>
-            <artifactId>junit-addons</artifactId>
-            <version>1.4</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.jmock</groupId>
-            <artifactId>jmock-junit4</artifactId>
-            <version>2.6.0</version>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-all</artifactId>
-            <version>1.9.5</version>
+            <version>1.10.19</version>
             <scope>test</scope>
         </dependency>
-
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.tools</artifactId>
@@ -321,7 +305,7 @@
 
         <dependency>
             <groupId>org.ops4j.pax.exam</groupId>
-            <artifactId>pax-exam-container-forked</artifactId>
+            <artifactId>pax-exam-container-native</artifactId>
             <version>${exam.version}</version>
             <scope>test</scope>
         </dependency>
@@ -353,20 +337,6 @@
             <version>5.4.0</version>
             <scope>test</scope>
         </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-core</artifactId>
-            <version>0.9.20</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>ch.qos.logback</groupId>
-            <artifactId>logback-classic</artifactId>
-            <version>0.9.20</version>
-            <scope>test</scope>
-        </dependency>
          <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.launchpad.api</artifactId>
@@ -374,17 +344,10 @@
             <scope>test</scope>
         </dependency>
          <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.testing.resourceresolver-mock</artifactId>
-            <version>0.1.0</version>
-            <scope>test</scope>
-        </dependency>
-         <dependency>
              <groupId>javax.inject</groupId>
              <artifactId>javax.inject</artifactId>
              <version>1</version>
              <scope>test</scope>
          </dependency>
-
     </dependencies>
 </project>

Modified: sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/TopicMatcherHelper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/TopicMatcherHelper.java?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/TopicMatcherHelper.java (original)
+++ sling/trunk/bundles/extensions/event/src/main/java/org/apache/sling/event/impl/support/TopicMatcherHelper.java Tue Dec 29 11:45:31 2015
@@ -62,7 +62,7 @@ public abstract class TopicMatcherHelper
                }
            }
            matchers = newMatchers;
-       }
+        }
         return matchers;
     }
 

Added: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java?rev=1722110&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java (added)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java Tue Dec 29 11:45:31 2015
@@ -0,0 +1,53 @@
+/*
+ * 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.event.impl;
+
+import java.lang.reflect.Field;
+
+public class TestUtil {
+
+    private static Object getSetField(final Object obj, final String fieldName, final boolean isGet, final Object value) {
+        Class<?> clazz = obj.getClass();
+        while ( clazz != null ) {
+            try {
+                final Field field = clazz.getDeclaredField(fieldName);
+                field.setAccessible(true);
+
+                if ( isGet ) {
+                    return field.get(obj);
+                } else {
+                    field.set(obj, value);
+                    return null;
+                }
+            } catch ( final Exception ignore ) {
+                // ignore
+            }
+            clazz = clazz.getSuperclass();
+        }
+        throw new RuntimeException("Field " + fieldName + " not found on object " + obj);
+    }
+
+    public static void setFieldValue(final Object obj, final String fieldName, final Object value) {
+        getSetField(obj, fieldName, false, value);
+    }
+
+    public static Object getFieldValue(final Object obj, final String fieldName) {
+        return getSetField(obj, fieldName, true, null);
+    }
+}

Propchange: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/TestUtil.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision rev url

Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/config/JobManagerConfigurationTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/config/JobManagerConfigurationTest.java?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/config/JobManagerConfigurationTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/config/JobManagerConfigurationTest.java Tue Dec 29 11:45:31 2015
@@ -41,11 +41,10 @@ import org.apache.sling.discovery.Cluste
 import org.apache.sling.discovery.InstanceDescription;
 import org.apache.sling.discovery.TopologyEvent;
 import org.apache.sling.discovery.TopologyView;
+import org.apache.sling.event.impl.TestUtil;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import junitx.util.PrivateAccessor;
-
 public class JobManagerConfigurationTest {
 
     private TopologyView createView() {
@@ -205,8 +204,8 @@ public class JobManagerConfigurationTest
         // add change listener and verify
         ccl.init(1);
         final JobManagerConfiguration config = new JobManagerConfiguration();
-        PrivateAccessor.setField(config, "scheduler", scheduler);
-        ((AtomicBoolean)PrivateAccessor.getField(config, "active")).set(true);
+        TestUtil.setFieldValue(config, "scheduler", scheduler);
+        ((AtomicBoolean)TestUtil.getFieldValue(config, "active")).set(true);
 
         config.addListener(ccl);
         ccl.await();

Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/jmx/AllJobStatisticsMBeanTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/jmx/AllJobStatisticsMBeanTest.java?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/jmx/AllJobStatisticsMBeanTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/impl/jobs/jmx/AllJobStatisticsMBeanTest.java Tue Dec 29 11:45:31 2015
@@ -19,8 +19,7 @@ package org.apache.sling.event.impl.jobs
 
 import java.util.Date;
 
-import junitx.util.PrivateAccessor;
-
+import org.apache.sling.event.impl.TestUtil;
 import org.apache.sling.event.jobs.JobManager;
 import org.junit.Assert;
 import org.junit.Before;
@@ -43,7 +42,7 @@ public class AllJobStatisticsMBeanTest {
     @Before
     public void setup() throws NoSuchFieldException {
         mbean = new AllJobStatisticsMBean();
-        PrivateAccessor.setField(mbean, "jobManager", jobManager);
+        TestUtil.setFieldValue(mbean, "jobManager", jobManager);
         seed = System.currentTimeMillis();
         Mockito.when(jobManager.getStatistics()).thenReturn(
                 new DummyStatistics(seed));

Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/AbstractJobHandlingTest.java Tue Dec 29 11:45:31 2015
@@ -38,6 +38,7 @@ import org.apache.sling.api.resource.Per
 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.discovery.PropertyProvider;
 import org.apache.sling.event.impl.jobs.config.JobManagerConfiguration;
 import org.apache.sling.event.jobs.JobManager;
 import org.apache.sling.event.jobs.consumer.JobConsumer;
@@ -48,6 +49,7 @@ import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.CoreOptions;
 import org.ops4j.pax.exam.Option;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ConfigurationAdmin;
@@ -96,22 +98,24 @@ public abstract class AbstractJobHandlin
                 ),
                 when( System.getProperty(PORT_CONFIG) != null ).useOptions(
                         systemProperty(PORT_CONFIG).value(System.getProperty(PORT_CONFIG))),
-                mavenBundle("org.apache.sling", "org.apache.sling.fragment.xml", "1.0.2"),
-                mavenBundle("org.apache.sling", "org.apache.sling.fragment.transaction", "1.0.0"),
-                mavenBundle("org.apache.sling", "org.apache.sling.fragment.activation", "1.0.2"),
-                mavenBundle("org.apache.sling", "org.apache.sling.fragment.ws", "1.0.2"),
-
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.log", "4.0.0"),
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.logservice", "1.0.2"),
-
-                mavenBundle("org.slf4j", "slf4j-api", "1.6.4"),
-                mavenBundle("org.slf4j", "jcl-over-slf4j", "1.6.4"),
-                mavenBundle("org.slf4j", "log4j-over-slf4j", "1.6.4"),
+                systemProperty("pax.exam.osgi.unresolved.fail").value("true"),
 
-                mavenBundle("commons-io", "commons-io", "1.4"),
+                // logging
+                systemProperty("pax.exam.logging").value("none"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.log", "4.0.6"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.logservice", "1.0.6"),
+                mavenBundle("org.slf4j", "slf4j-api", "1.7.13"),
+                mavenBundle("org.slf4j", "jcl-over-slf4j", "1.7.13"),
+                mavenBundle("org.slf4j", "log4j-over-slf4j", "1.7.13"),
+
+                // launchpad api and settings
+                mavenBundle("org.apache.sling", "org.apache.sling.launchpad.api", "1.1.0"),
+                mavenBundle("org.apache.sling", "org.apache.sling.settings", "1.3.4"),
+
+                mavenBundle("commons-io", "commons-io", "2.4"),
                 mavenBundle("commons-fileupload", "commons-fileupload", "1.3.1"),
-                mavenBundle("commons-collections", "commons-collections", "3.2.1"),
-                mavenBundle("commons-codec", "commons-codec", "1.9"),
+                mavenBundle("commons-collections", "commons-collections", "3.2.2"),
+                mavenBundle("commons-codec", "commons-codec", "1.10"),
                 mavenBundle("commons-lang", "commons-lang", "2.6"),
                 mavenBundle("commons-pool", "commons-pool", "1.6"),
 
@@ -121,29 +125,27 @@ public abstract class AbstractJobHandlin
                 mavenBundle("org.apache.tika", "tika-core", "1.9"),
                 mavenBundle("org.apache.tika", "tika-bundle", "1.9"),
 
-                mavenBundle("org.apache.felix", "org.apache.felix.http.servlet-api", "1.0.0"),
-                mavenBundle("org.apache.felix", "org.apache.felix.http.api", "2.3.0"),
-                //mavenBundle("org.apache.felix", "org.apache.felix.http.jetty", "2.3.0"),
-                mavenBundle("org.apache.felix", "org.apache.felix.eventadmin", "1.4.2"),
-                mavenBundle("org.apache.felix", "org.apache.felix.scr", "1.8.2"),
-                mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.0"),
+                // infrastructure
+                mavenBundle("org.apache.felix", "org.apache.felix.http.servlet-api", "1.1.2"),
+                mavenBundle("org.apache.felix", "org.apache.felix.eventadmin", "1.4.4"),
+                mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.2"),
+                mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.8"),
                 mavenBundle("org.apache.felix", "org.apache.felix.inventory", "1.0.4"),
-//                mavenBundle("org.apache.felix", "org.apache.felix.metatype", "1.0.6"),
+                mavenBundle("org.apache.felix", "org.apache.felix.metatype", "1.1.2"),
 
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.osgi", "2.2.0"),
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.json", "2.0.6"),
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.mime", "2.1.4"),
+                // sling
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.osgi", "2.3.0"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.json", "2.0.16"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.mime", "2.1.8"),
                 mavenBundle("org.apache.sling", "org.apache.sling.commons.classloader", "1.3.2"),
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.scheduler", "2.4.4"),
-                mavenBundle("org.apache.sling", "org.apache.sling.commons.threads", "3.2.0"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.scheduler", "2.4.14"),
+                mavenBundle("org.apache.sling", "org.apache.sling.commons.threads", "3.2.2"),
 
-                mavenBundle("org.apache.sling", "org.apache.sling.launchpad.api", "1.1.0"),
-                mavenBundle("org.apache.sling", "org.apache.sling.auth.core", "1.3.0"),
+                mavenBundle("org.apache.sling", "org.apache.sling.auth.core", "1.3.12"),
                 mavenBundle("org.apache.sling", "org.apache.sling.discovery.api", "1.0.2"),
                 mavenBundle("org.apache.sling", "org.apache.sling.discovery.standalone", "1.0.0"),
 
                 mavenBundle("org.apache.sling", "org.apache.sling.api", "2.8.0"),
-                mavenBundle("org.apache.sling", "org.apache.sling.settings", "1.3.4"),
                 mavenBundle("org.apache.sling", "org.apache.sling.resourceresolver", "1.1.6"),
                 mavenBundle("org.apache.sling", "org.apache.sling.adapter", "2.1.2"),
                 mavenBundle("org.apache.sling", "org.apache.sling.jcr.resource", "2.3.12"),
@@ -174,8 +176,22 @@ public abstract class AbstractJobHandlin
     }
 
     protected JobManager getJobManager() {
-        final ServiceReference sr = this.bc.getServiceReference(JobManager.class.getName());
-        return (JobManager)this.bc.getService(sr);
+        JobManager result = null;
+        int count = 0;
+        do {
+            final ServiceReference sr = this.bc.getServiceReference(JobManager.class.getName());
+            if ( sr != null ) {
+                result = (JobManager)this.bc.getService(sr);
+            } else {
+                count++;
+                if ( count == 10 ) {
+                    break;
+                }
+                sleep(500);
+            }
+
+        } while ( result == null );
+        return result;
     }
 
     protected void sleep(final long time) {
@@ -264,15 +280,42 @@ public abstract class AbstractJobHandlin
         return reg;
     }
 
+    protected long getConsumerChangeCount() {
+        long result = -1;
+        try {
+            final ServiceReference[] refs = this.bc.getServiceReferences(PropertyProvider.class.getName(), "(changeCount=*)");
+            if ( refs != null && refs.length > 0 ) {
+                result = (Long)refs[0].getProperty("changeCount");
+            }
+        } catch ( final InvalidSyntaxException ignore ) {
+            // ignore
+        }
+        return result;
+    }
+
+    protected void waitConsumerChangeCount(final long minimum) {
+        do {
+            final long cc = getConsumerChangeCount();
+            if ( cc >= minimum ) {
+                // we need to wait for the topology events (TODO)
+                sleep(200);
+                return;
+            }
+            sleep(50);
+        } while ( true );
+    }
+
     /**
      * Helper method to register a job consumer
      */
     protected ServiceRegistration registerJobConsumer(final String topic,
             final JobConsumer handler) {
+        long cc = this.getConsumerChangeCount();
         final Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put(JobConsumer.PROPERTY_TOPICS, topic);
         final ServiceRegistration reg = this.bc.registerService(JobConsumer.class.getName(),
                 handler, props);
+        this.waitConsumerChangeCount(cc + 1);
         return reg;
     }
 
@@ -281,10 +324,12 @@ public abstract class AbstractJobHandlin
      */
     protected ServiceRegistration registerJobExecutor(final String topic,
             final JobExecutor handler) {
+        long cc = this.getConsumerChangeCount();
         final Dictionary<String, Object> props = new Hashtable<String, Object>();
         props.put(JobConsumer.PROPERTY_TOPICS, topic);
         final ServiceRegistration reg = this.bc.registerService(JobExecutor.class.getName(),
                 handler, props);
+        this.waitConsumerChangeCount(cc + 1);
         return reg;
     }
 

Modified: sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/TopicMatchingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/TopicMatchingTest.java?rev=1722110&r1=1722109&r2=1722110&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/TopicMatchingTest.java (original)
+++ sling/trunk/bundles/extensions/event/src/test/java/org/apache/sling/event/it/TopicMatchingTest.java Tue Dec 29 11:45:31 2015
@@ -19,8 +19,8 @@
 package org.apache.sling.event.it;
 
 import java.io.IOException;
-import java.util.concurrent.atomic.AtomicInteger;
 
+import org.apache.sling.event.impl.Barrier;
 import org.apache.sling.event.jobs.Job;
 import org.apache.sling.event.jobs.NotificationConstants;
 import org.apache.sling.event.jobs.consumer.JobExecutionContext;
@@ -56,11 +56,11 @@ public class TopicMatchingTest extends A
     }
 
     /**
-     * Test simple pattern matching
+     * Test simple pattern matching /*
      */
     @Test(timeout = DEFAULT_TEST_TIMEOUT)
     public void testSimpleMatching() throws Exception {
-        final AtomicInteger finishedCount = new AtomicInteger();
+        final Barrier barrier = new Barrier(2);
 
         final ServiceRegistration reg = this.registerJobExecutor("sling/test/*",
                 new JobExecutor() {
@@ -75,15 +75,13 @@ public class TopicMatchingTest extends A
 
                     @Override
                     public void handleEvent(final Event event) {
-                        finishedCount.incrementAndGet();
+                        barrier.block();
                     }
                 });
 
         try {
             this.getJobManager().addJob(TOPIC, null);
-            while ( finishedCount.get() == 0 ) {
-                this.sleep(10);
-            }
+            barrier.block();
         } finally {
             reg.unregister();
             eventHandler.unregister();
@@ -91,11 +89,11 @@ public class TopicMatchingTest extends A
     }
 
     /**
-     * Test deep pattern matching
+     * Test deep pattern matching /**
      */
     @Test(timeout = DEFAULT_TEST_TIMEOUT)
     public void testDeepMatching() throws Exception {
-        final AtomicInteger finishedCount = new AtomicInteger();
+        final Barrier barrier = new Barrier(2);
 
         final ServiceRegistration reg = this.registerJobExecutor("sling/**",
                 new JobExecutor() {
@@ -110,15 +108,13 @@ public class TopicMatchingTest extends A
 
                     @Override
                     public void handleEvent(final Event event) {
-                        finishedCount.incrementAndGet();
+                        barrier.block();
                     }
                 });
 
         try {
             this.getJobManager().addJob(TOPIC, null);
-            while ( finishedCount.get() == 0 ) {
-                this.sleep(10);
-            }
+            barrier.block();
         } finally {
             reg.unregister();
             eventHandler.unregister();
@@ -130,16 +126,16 @@ public class TopicMatchingTest extends A
      */
     @Test(timeout = DEFAULT_TEST_TIMEOUT)
     public void testOrdering() throws Exception {
-        final AtomicInteger count1 = new AtomicInteger();
-        final AtomicInteger count2 = new AtomicInteger();
-        final AtomicInteger count3 = new AtomicInteger();
+        final Barrier barrier1 = new Barrier(2);
+        final Barrier barrier2 = new Barrier(2);
+        final Barrier barrier3 = new Barrier(2);
 
         final ServiceRegistration reg1 = this.registerJobExecutor("sling/**",
                 new JobExecutor() {
 
                     @Override
                     public JobExecutionResult process(final Job job, final JobExecutionContext context) {
-                        count1.incrementAndGet();
+                        barrier1.block();
                         return context.result().succeeded();
                     }
                 });
@@ -148,7 +144,7 @@ public class TopicMatchingTest extends A
 
                     @Override
                     public JobExecutionResult process(final Job job, final JobExecutionContext context) {
-                        count2.incrementAndGet();
+                        barrier2.block();
                         return context.result().succeeded();
                     }
                 });
@@ -157,30 +153,28 @@ public class TopicMatchingTest extends A
 
                     @Override
                     public JobExecutionResult process(final Job job, final JobExecutionContext context) {
-                        count3.incrementAndGet();
+                        barrier3.block();
                         return context.result().succeeded();
                     }
                 });
 
         // first test, all three registered, reg3 should get the precedence
         this.getJobManager().addJob(TOPIC, null);
-        while ( count3.get() != 1 ) {
-            this.sleep(10);
-        }
+        barrier3.block();
 
         // second test, unregister reg3, now it should be reg2
+        long cc = this.getConsumerChangeCount();
         reg3.unregister();
+        this.waitConsumerChangeCount(cc + 1);
         this.getJobManager().addJob(TOPIC, null);
-        while ( count2.get() != 1 ) {
-            this.sleep(10);
-        }
+        barrier2.block();
 
         // third test, unregister reg2, reg1 is now the only one
+        cc = this.getConsumerChangeCount();
         reg2.unregister();
+        this.waitConsumerChangeCount(cc + 1);
         this.getJobManager().addJob(TOPIC, null);
-        while ( count1.get() != 1 ) {
-            this.sleep(10);
-        }
+        barrier1.block();
         reg1.unregister();
     }
 }