diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
index 37e93f2..7b4569e 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/TestEventPublisher.java
@@ -16,6 +16,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
@@ -32,6 +33,9 @@
 
 @Ignore
 public class TestEventPublisher implements Runnable, EiffelEventHub.Consumer {
+  /* Milliseconds after which the publisher-thread is expected to have handled the event. */
+  public static int MILLIS_TO_WAIT = 500;
+
   Map<EventKey, EiffelEvent> publishedEvents = Maps.newConcurrentMap();
   List<EventKey> actualOrder = Lists.newArrayList();
   boolean keepTrying = true;
@@ -88,8 +92,20 @@
         keys.size());
   }
 
-  public EiffelEvent getPublished(EventKey key) {
+  public void assertNotPublished(EventKey key, String message) {
     waitForIt();
+    EiffelEvent event = publishedEvents.getOrDefault(key, null);
+    assertNull(message, event);
+  }
+
+  public EiffelEvent getPublished(EventKey key) {
+    int wait = 50;
+    for (int totalWait = 0; totalWait < MILLIS_TO_WAIT; totalWait += wait) {
+      if (publishedEvents.containsKey(key)) {
+        return publishedEvents.get(key);
+      }
+      waitFor(wait);
+    }
     return publishedEvents.getOrDefault(key, null);
   }
 
@@ -106,10 +122,13 @@
     pause = true;
   }
 
-  /* Give the publisher-thread some time to handle events. */
   private void waitForIt() {
+    waitFor(MILLIS_TO_WAIT);
+  }
+
+  private void waitFor(int millis) {
     try {
-      Thread.sleep(500);
+      Thread.sleep(millis);
     } catch (InterruptedException e) {
       e.printStackTrace();
     }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
index 126eb50..3d93b80 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/listeners/GerritEventListenersIT.java
@@ -19,7 +19,6 @@
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 
 import com.google.common.collect.Lists;
 import com.google.gerrit.acceptance.PushOneCommit;
@@ -86,8 +85,8 @@
 
   @Test
   public void patchSetCreatedForMetaDoesntResultsInEvent() throws Exception {
-    EiffelEvent event = publisher.getPublished(toSccKey(createMetaConfigChange()));
-    assertNull("refs/meta/config change shouldn't result in event", event);
+    publisher.assertNotPublished(
+        toSccKey(createMetaConfigChange()), "refs/meta/config change shouldn't result in event");
   }
 
   @Test
@@ -153,49 +152,45 @@
   @Test
   public void patchSetSubmittedForMetaDoesntResultsInEvent() throws Exception {
     PushOneCommit.Result res = createMetaConfigChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("refs/meta/config change shouldn't result in event", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "refs/meta/config change shouldn't result in event");
+
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("refs/meta/config change shouldn't result in event", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "refs/meta/config change shouldn't result in event");
   }
 
   @Test
   public void noEventsCreatedWhenDisabled() throws Exception {
     TestEventListenerConfigProvider.disable();
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when disabled", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when disabled");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("Patch-set submitted shouldn't result in event when disabled", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when disabled");
   }
 
   @Test
   public void noEventsCreatedWhenRefIsBlocked() throws Exception {
     TestEventListenerConfigProvider.setBlockedRefPatterns("refs/heads/master");
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when target ref is blocked", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when target ref is blocked");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull(
-        "Patch-set submitted shouldn't result in event when target ref is blocked", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when target ref is blocked");
   }
 
   @Test
   public void noEventsCreatedWhenProjectIsBlocked() throws Exception {
     TestEventListenerConfigProvider.setBlockedProjectPatterns(project.get());
     PushOneCommit.Result res = createChange();
-    SourceChangeEventKey sccKey = toSccKey(res);
-    EiffelEvent sccEvent = publisher.getPublished(sccKey);
-    assertNull("Patch-set created shouldn't result in event when project is blocked", sccEvent);
+    publisher.assertNotPublished(
+        toSccKey(res), "Patch-set created shouldn't result in event when project is blocked");
     merge(res);
-    EiffelEvent scsEvent = publisher.getPublished(sccKey.copy(SCS));
-    assertNull("Patch-set submitted shouldn't result in event when project is blocked", scsEvent);
+    publisher.assertNotPublished(
+        toScsKey(res), "Patch-set submitted shouldn't result in event when project is blocked");
   }
 
   @Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
index d483a66..cb77c91 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/rest/EventsEiffelRestIT.java
@@ -18,7 +18,6 @@
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCC;
 import static com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelEventType.SCS;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 import com.google.gerrit.acceptance.PushOneCommit;
 import com.google.gerrit.acceptance.RestResponse;
@@ -84,9 +83,8 @@
   @Test
   public void createSccsAsNonAdminForbidden() throws Exception {
     createSccs("master", false).assertStatus(403);
-    SourceChangeEventKey scc = keyFromMaster(SCC);
-    EiffelEvent event = publisher.getPublished(scc);
-    assertNull(event);
+    publisher.assertNotPublished(
+        keyFromMaster(SCC), "SCC event creation should be blocked for non admin");
   }
 
   @Test
@@ -111,9 +109,8 @@
   @Test
   public void createScssAsNonAdminForbidden() throws Exception {
     createScss("master", false).assertStatus(403);
-    SourceChangeEventKey scs = keyFromMaster(SCS);
-    EiffelEvent event = publisher.getPublished(scs);
-    assertNull(event);
+    publisher.assertNotPublished(
+        keyFromMaster(SCS), "SCS event creation should be blocked for non admin");
   }
 
   @Test
@@ -136,9 +133,9 @@
     createScss("master", true).assertStatus(202);
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
     createArtcs(tagName, false).assertStatus(403);
-    ArtifactEventKey artc = ArtifactEventKey.create(tagPURL(project.get(), tagName));
-    EiffelEvent event = publisher.getPublished(artc);
-    assertNull(event);
+    publisher.assertNotPublished(
+        ArtifactEventKey.create(tagPURL(project.get(), tagName)),
+        "ArtC event creation should be blocked for non admin");
   }
 
   @Test
