You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/01/09 03:01:12 UTC

[2/3] james-project git commit: MAILBOX-366 Events should carry an EventId

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
index 4ce097d..9a81746 100644
--- a/mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
@@ -20,6 +20,7 @@
 package org.apache.james.event.json;
 
 import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
+import static org.apache.james.event.json.SerializerFixture.EVENT_ID;
 import static org.apache.james.event.json.SerializerFixture.EVENT_SERIALIZER;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -48,6 +49,7 @@ class QuotaUsageUpdatedEventSerializationTest {
         .build();
     private static final Instant INSTANT = Instant.parse("2018-11-13T12:00:55Z");
     private final MailboxListener.QuotaUsageUpdatedEvent eventWithUserContainsUsername = new MailboxListener.QuotaUsageUpdatedEvent(
+        EVENT_ID,
         User.fromUsername("onlyUsername"),
         QUOTA_ROOT,
         QUOTA_COUNT,
@@ -56,6 +58,7 @@ class QuotaUsageUpdatedEventSerializationTest {
     private final String quotaUsageUpdatedEvent =
         "{" +
         "    \"QuotaUsageUpdatedEvent\":{" +
+        "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
         "        \"quotaRoot\":\"foo\"," +
         "        \"countQuota\":{\"used\":12,\"limit\":100,\"limits\":{}}," +
         "        \"time\":\"2018-11-13T12:00:55Z\"," +
@@ -81,6 +84,7 @@ class QuotaUsageUpdatedEventSerializationTest {
         String quotaUsageUpdatedEvent =
             "{" +
             "    \"QuotaUsageUpdatedEvent\":{" +
+            "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
             "        \"quotaRoot\":\"foo\"," +
             "        \"countQuota\":{\"used\":12,\"limit\":100,\"limits\":{}}," +
             "        \"time\":\"2018-11-13T12:00:55Z\"," +
@@ -97,11 +101,12 @@ class QuotaUsageUpdatedEventSerializationTest {
         String quotaUsageUpdatedEvent =
             "{" +
             "    \"QuotaUsageUpdatedEvent\":{" +
+            "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
             "        \"quotaRoot\":\"foo\"," +
             "        \"time\":\"2018-11-13T12:00:55Z\"," +
             "        \"sizeQuota\":{\"used\":1234,\"limit\":10000,\"limits\":{}}," +
             "        \"user\":\"onlyUsername\"" +
-            "        }" +
+            "    }" +
             "}";
 
         assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(quotaUsageUpdatedEvent).get())
@@ -113,11 +118,12 @@ class QuotaUsageUpdatedEventSerializationTest {
         String quotaUsageUpdatedEvent =
             "{" +
             "    \"QuotaUsageUpdatedEvent\":{" +
+            "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
             "        \"quotaRoot\":\"foo\"," +
             "        \"time\":\"2018-11-13T12:00:55Z\"," +
             "        \"countQuota\":{\"used\":12,\"limit\":100,\"limits\":{}}," +
             "        \"user\":\"onlyUsername\"" +
-            "        }" +
+            "    }" +
             "}";
 
         assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(quotaUsageUpdatedEvent).get())
@@ -129,11 +135,12 @@ class QuotaUsageUpdatedEventSerializationTest {
         String quotaUsageUpdatedEvent =
             "{" +
             "    \"QuotaUsageUpdatedEvent\":{" +
+            "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
             "        \"quotaRoot\":\"foo\"," +
             "        \"countQuota\":{\"used\":12,\"limit\":100,\"limits\":{\"Domain\":100}}," +
             "        \"sizeQuota\":{\"used\":1234,\"limit\":10000,\"limits\":{}}," +
             "        \"user\":\"user\"" +
-            "        }" +
+            "    }" +
             "}";
 
         assertThatThrownBy(() -> EVENT_SERIALIZER.fromJson(quotaUsageUpdatedEvent).get())
@@ -145,6 +152,7 @@ class QuotaUsageUpdatedEventSerializationTest {
         String quotaUsageUpdatedEvent =
             "{" +
             "    \"QuotaUsageUpdatedEvent\":{" +
+            "        \"eventId\":\"6e0dd59d-660e-4d9b-b22f-0354479f47b4\"," +
             "        \"quotaRoot\":\"foo\"," +
             "        \"countQuota\":{\"used\":12,\"limit\":100,\"limits\":{\"Domain\":100}}," +
             "        \"time\":\"\"," +

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
index 5d9bcaf..14eb14d 100644
--- a/mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
@@ -19,10 +19,15 @@
 
 package org.apache.james.event.json;
 
+
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.model.TestId;
 import org.apache.james.mailbox.model.TestMessageId;
 
 public interface SerializerFixture {
     JsonSerialize DTO_JSON_SERIALIZE = new JsonSerialize(new TestId.Factory(), new TestMessageId.Factory());
     EventSerializer EVENT_SERIALIZER = new EventSerializer(new TestId.Factory(), new TestMessageId.Factory());
+
+    String SERIALIZED_EVENT_ID = "6e0dd59d-660e-4d9b-b22f-0354479f47b4";
+    Event.EventId EVENT_ID = Event.EventId.of(SERIALIZED_EVENT_ID);
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java
----------------------------------------------------------------------
diff --git a/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java b/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java
new file mode 100644
index 0000000..0c5b7c0
--- /dev/null
+++ b/mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.james.event.json.dtos;
+
+import static org.apache.james.event.json.SerializerFixture.DTO_JSON_SERIALIZE;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import org.apache.james.event.json.SerializerFixture;
+import org.junit.jupiter.api.Test;
+
+import play.api.libs.json.JsError;
+import play.api.libs.json.JsNull$;
+import play.api.libs.json.JsNumber;
+import play.api.libs.json.JsString;
+import scala.math.BigDecimal;
+
+class EventIdTest {
+    @Test
+    void eventIdShouldBeWellSerialized() {
+        assertThat(DTO_JSON_SERIALIZE.eventIdWrites().writes(SerializerFixture.EVENT_ID))
+            .isEqualTo(new JsString(SerializerFixture.SERIALIZED_EVENT_ID));
+    }
+
+    @Test
+    void eventIdShouldBeWellDeSerialized() {
+        assertThat(DTO_JSON_SERIALIZE.eventIdReads().reads(new JsString(SerializerFixture.SERIALIZED_EVENT_ID)).get())
+            .isEqualTo(SerializerFixture.EVENT_ID);
+    }
+
+    @Test
+    void eventIdDeserializationShouldReturnErrorWhenNumber() {
+        assertThat(DTO_JSON_SERIALIZE.eventIdReads().reads(new JsNumber(BigDecimal.valueOf(18))))
+            .isInstanceOf(JsError.class);
+    }
+
+    @Test
+    void eventIdDeserializationShouldReturnErrorWhenNull() {
+        assertThat(DTO_JSON_SERIALIZE.eventIdReads().reads(JsNull$.MODULE$))
+            .isInstanceOf(JsError.class);
+    }
+
+    @Test
+    void eventIdDeserializationShouldThrowWhenInvalid() {
+        assertThatThrownBy(() -> DTO_JSON_SERIALIZE.eventIdReads().reads(new JsString("invalid")))
+            .isInstanceOf(IllegalArgumentException.class);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
index 3114c65..adfdccf 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
@@ -29,6 +29,7 @@ import static org.apache.james.mailbox.quota.model.QuotaThresholdFixture.mailetC
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.eventsourcing.eventstore.EventStore;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.quota.QuotaFixture.Counts;
 import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration;
@@ -37,6 +38,7 @@ import org.apache.mailet.base.test.FakeMailContext;
 import org.junit.jupiter.api.Test;
 
 public interface QuotaThresholdConfigurationChangesTest {
+    Event.EventId EVENT_ID = Event.EventId.of("6e0dd59d-660e-4d9b-b22f-0354479f47b4");
 
     QuotaMailingListenerConfiguration CONFIGURATION_50 = QuotaMailingListenerConfiguration.builder()
         .addThreshold(_50)
@@ -51,14 +53,19 @@ public interface QuotaThresholdConfigurationChangesTest {
         .gracePeriod(GRACE_PERIOD)
         .build();
 
+    static EventFactory.RequireQuotaCount<EventFactory.RequireQuotaSize<EventFactory.RequireInstant<EventFactory.QuotaUsageUpdatedFinalStage>>> eventBase() {
+        return EventFactory.quotaUpdated()
+            .eventId(EVENT_ID)
+            .user(BOB_USER)
+            .quotaRoot(QUOTAROOT);
+    }
+
     @Test
     default void shouldNotSendMailWhenNoNewExceededThresholdAfterThresholdIncrease(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -68,9 +75,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -84,9 +89,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -96,9 +99,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -112,9 +113,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -124,9 +123,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -140,9 +137,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -152,9 +147,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -168,9 +161,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -179,9 +170,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
         mailetContext.resetSentMails();
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -195,9 +184,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -207,9 +194,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -223,9 +208,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -236,9 +219,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -252,9 +233,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_50);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -265,9 +244,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -281,9 +258,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, CONFIGURATION_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -294,9 +269,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -311,9 +284,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store,
             CONFIGURATION_50_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -323,9 +294,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -340,9 +309,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store,
             CONFIGURATION_50_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -352,9 +319,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._92_PERCENT)
             .instant(NOW)
@@ -369,9 +334,7 @@ public interface QuotaThresholdConfigurationChangesTest {
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store,
             CONFIGURATION_50_75);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -381,9 +344,7 @@ public interface QuotaThresholdConfigurationChangesTest {
 
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
index cefec6e..3f76a88 100644
--- a/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
+++ b/mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
@@ -38,6 +38,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 import java.time.Duration;
 
 import org.apache.james.eventsourcing.eventstore.EventStore;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.quota.QuotaFixture.Counts;
 import org.apache.james.mailbox.quota.QuotaFixture.Sizes;
 import org.apache.james.mailbox.quota.mailing.QuotaMailingListenerConfiguration;
@@ -47,15 +48,21 @@ import org.apache.mailet.base.test.FakeMailContext;
 import org.junit.jupiter.api.Test;
 
 public interface QuotaThresholdMailingIntegrationTest {
+    Event.EventId EVENT_ID = Event.EventId.of("6e0dd59d-660e-4d9b-b22f-0354479f47b4");
+
+    static EventFactory.RequireQuotaCount<EventFactory.RequireQuotaSize<EventFactory.RequireInstant<EventFactory.QuotaUsageUpdatedFinalStage>>> eventBase() {
+        return EventFactory.quotaUpdated()
+            .eventId(EVENT_ID)
+            .user(BOB_USER)
+            .quotaRoot(QUOTAROOT);
+    }
 
     @Test
     default void shouldNotSendMailWhenUnderAllThresholds(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -69,18 +76,14 @@ public interface QuotaThresholdMailingIntegrationTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(ONE_HOUR_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -93,25 +96,19 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldNotSendMailWhenThresholdOverPassedRecently(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(TWELVE_HOURS_AGO)
             .build());
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(SIX_HOURS_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -125,9 +122,7 @@ public interface QuotaThresholdMailingIntegrationTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -140,17 +135,13 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldNotSendDuplicates(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(ONE_HOUR_AGO)
             .build());
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -163,17 +154,13 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldNotifySeparatelyCountAndSize(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(ONE_HOUR_AGO)
             .build());
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(NOW)
@@ -187,9 +174,7 @@ public interface QuotaThresholdMailingIntegrationTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -202,25 +187,19 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldSendMailWhenThresholdOverPassedOverGracePeriod(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(TWELVE_DAYS_AGO)
             .build());
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(SIX_DAYS_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(NOW)
@@ -233,18 +212,14 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldNotSendMailWhenNoThresholdUpdateForCount(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._32_PERCENT)
             .quotaSize(Sizes._55_PERCENT)
             .instant(TWO_DAYS_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._60_PERCENT)
             .instant(TWO_DAYS_AGO)
@@ -257,25 +232,19 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldNotSendMailWhenThresholdOverPassedRecentlyForCount(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(TWELVE_HOURS_AGO)
             .build());
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(SIX_HOURS_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -289,9 +258,7 @@ public interface QuotaThresholdMailingIntegrationTest {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(TWELVE_HOURS_AGO)
@@ -304,25 +271,19 @@ public interface QuotaThresholdMailingIntegrationTest {
     default void shouldSendMailWhenThresholdOverPassedOverGracePeriodForCount(EventStore store) throws Exception {
         FakeMailContext mailetContext = mailetContext();
         QuotaThresholdListenersTestSystem testee = new QuotaThresholdListenersTestSystem(mailetContext, store, DEFAULT_CONFIGURATION);
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(TWELVE_DAYS_AGO)
             .build());
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._40_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(SIX_DAYS_AGO)
             .build());
         mailetContext.resetSentMails();
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
@@ -340,16 +301,12 @@ public interface QuotaThresholdMailingIntegrationTest {
                 .gracePeriod(GRACE_PERIOD)
                 .build());
 
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._52_PERCENT)
             .quotaSize(Sizes._30_PERCENT)
             .instant(NOW)
             .build());
-        testee.event(EventFactory.quotaUpdated()
-            .user(BOB_USER)
-            .quotaRoot(QUOTAROOT)
+        testee.event(eventBase()
             .quotaCount(Counts._85_PERCENT)
             .quotaSize(Sizes._42_PERCENT)
             .instant(NOW)
@@ -369,9 +326,7 @@ public interface QuotaThresholdMailingIntegrationTest {
                 .build());
 
         ConcurrentTestRunner.builder()
-            .operation((threadNb, step) -> testee.event(EventFactory.quotaUpdated()
-                    .user(BOB_USER)
-                    .quotaRoot(QUOTAROOT)
+            .operation((threadNb, step) -> testee.event(eventBase()
                     .quotaCount(Counts._40_PERCENT)
                     .quotaSize(Sizes._55_PERCENT)
                     .instant(NOW)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
index 4f33fe5..cd369f3 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListenerTest.java
@@ -50,6 +50,7 @@ import org.junit.rules.RuleChain;
 import org.junit.rules.TemporaryFolder;
 
 public class ElasticSearchQuotaMailboxListenerTest {
+    private static Event.EventId EVENT_ID = Event.EventId.of("6e0dd59d-660e-4d9b-b22f-0354479f47b4");
 
     private static final int BATCH_SIZE = 1;
     private static final Event DUMB_EVENT = mock(Event.class);
@@ -94,6 +95,7 @@ public class ElasticSearchQuotaMailboxListenerTest {
     @Test
     public void eventShouldIndexEventWhenQuotaEvent() throws Exception {
         quotaMailboxListener.event(EventFactory.quotaUpdated()
+            .eventId(EVENT_ID)
             .user(BOB_USER)
             .quotaRoot(QUOTAROOT)
             .quotaCount(Counts._52_PERCENT)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJsonTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJsonTest.java b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJsonTest.java
index be9a938..b5eb274 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJsonTest.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/test/java/org/apache/james/quota/search/elasticsearch/json/QuotaRatioToElasticSearchJsonTest.java
@@ -27,6 +27,7 @@ import java.util.Optional;
 
 import org.apache.james.core.Domain;
 import org.apache.james.core.User;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener.QuotaUsageUpdatedEvent;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.QuotaFixture;
@@ -35,18 +36,19 @@ import org.apache.james.util.ClassLoaderUtils;
 import org.junit.jupiter.api.Test;
 
 class QuotaRatioToElasticSearchJsonTest {
+    private static Event.EventId EVENT_ID = Event.EventId.of("6e0dd59d-660e-4d9b-b22f-0354479f47b4");
 
     @Test
     void quotaRatioShouldBeWellConvertedToJson() throws IOException {
         String user = "user@domain.org";
         QuotaUsageUpdatedEvent event = EventFactory.quotaUpdated()
+            .eventId(EVENT_ID)
             .user(User.fromUsername(user))
             .quotaRoot(QuotaRoot.quotaRoot(user, Optional.of(Domain.of("domain.org"))))
             .quotaCount(QuotaFixture.Counts._52_PERCENT)
             .quotaSize(QuotaFixture.Sizes._55_PERCENT)
             .instant(Instant.now())
             .build();
-
         QuotaRatioToElasticSearchJson quotaRatioToElasticSearchJson = new QuotaRatioToElasticSearchJson();
         String convertToJson = quotaRatioToElasticSearchJson.convertToJson(user, event);
 
@@ -59,6 +61,7 @@ class QuotaRatioToElasticSearchJsonTest {
     void quotaRatioShouldBeWellConvertedToJsonWhenNoDomain() throws IOException {
         String user = "user";
         QuotaUsageUpdatedEvent event = EventFactory.quotaUpdated()
+            .eventId(EVENT_ID)
             .user(User.fromUsername(user))
             .quotaRoot(QuotaRoot.quotaRoot(user, Optional.empty()))
             .quotaCount(QuotaFixture.Counts._52_PERCENT)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
index a46d836..e1647ae 100644
--- a/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
+++ b/mailbox/plugin/spamassassin/src/test/java/org/apache/james/mailbox/spamassassin/SpamAssassinListenerTest.java
@@ -233,6 +233,7 @@ public class SpamAssassinListenerTest {
         SimpleMailboxMessage message = createMessage(inbox);
 
         MailboxListener.Added addedEvent = EventFactory.added()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(inbox)
             .addMessage(message)
@@ -248,6 +249,7 @@ public class SpamAssassinListenerTest {
         SimpleMailboxMessage message = createMessage(mailbox1);
 
         MailboxListener.Added addedEvent = EventFactory.added()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(mailbox1)
             .addMessage(message)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 310fa05..55c0262 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -513,6 +513,7 @@ public class StoreMailboxManager implements MailboxManager {
                             mapper.execute(Mapper.toTransaction(() -> mailboxIds.add(mapper.save(m))));
                             // notify listeners
                             delegatingListener.event(EventFactory.mailboxAdded()
+                                .randomEventId()
                                 .mailboxSession(mailboxSession)
                                 .mailbox(m)
                                 .build());
@@ -560,6 +561,7 @@ public class StoreMailboxManager implements MailboxManager {
             SimpleMailbox m = new SimpleMailbox(mailbox);
             mailboxMapper.delete(mailbox);
             delegatingListener.event(EventFactory.mailboxDeleted()
+                .randomEventId()
                 .mailboxSession(session)
                 .mailbox(mailbox)
                 .quotaRoot(quotaRoot)
@@ -605,6 +607,7 @@ public class StoreMailboxManager implements MailboxManager {
         mapper.save(mailbox);
 
         delegatingListener.event(EventFactory.mailboxRenamed()
+            .randomEventId()
             .mailboxSession(session)
             .mailboxId(mailbox.getMailboxId())
             .oldPath(from)
@@ -622,6 +625,7 @@ public class StoreMailboxManager implements MailboxManager {
                 sub.setName(subNewName);
                 mapper.save(sub);
                 delegatingListener.event(EventFactory.mailboxRenamed()
+                    .randomEventId()
                     .mailboxSession(session)
                     .mailboxId(sub.getMailboxId())
                     .oldPath(fromPath)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
index 7e01114..3efdb14 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
@@ -219,6 +219,7 @@ public class StoreMessageIdManager implements MessageIdManager {
         MailboxMapper mailboxMapper = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession);
         for (MetadataWithMailboxId metadataWithMailboxId : metadataWithMailbox) {
             delegatingMailboxListener.event(EventFactory.expunged()
+                .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(metadataWithMailboxId.mailboxId))
                 .addMetaData(metadataWithMailboxId.messageMetaData)
@@ -300,6 +301,7 @@ public class StoreMessageIdManager implements MessageIdManager {
         for (MailboxId mailboxId: mailboxesToRemove) {
             messageIdMapper.delete(message.getMessageId(), mailboxesToRemove);
             delegatingMailboxListener.event(EventFactory.expunged()
+                .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMetaData(eventPayload)
@@ -316,6 +318,7 @@ public class StoreMessageIdManager implements MessageIdManager {
             Mailbox mailbox = mailboxSessionMapperFactory.getMailboxMapper(mailboxSession).findMailboxById(mailboxId);
 
             delegatingMailboxListener.event(EventFactory.flagsUpdated()
+                .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailbox)
                 .updatedFlag(updatedFlags)
@@ -382,6 +385,7 @@ public class StoreMessageIdManager implements MessageIdManager {
             save(mailboxSession, messageIdMapper, copy);
 
             delegatingMailboxListener.event(EventFactory.added()
+                .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailboxMapper.findMailboxById(mailboxId))
                 .addMessage(copy)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 4b5e994..a92914c 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -257,6 +257,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         Map<MessageUid, MessageMetaData> uids = deleteMarkedInMailbox(set, mailboxSession);
 
         delegatingMailboxListener.event(EventFactory.expunged()
+            .randomEventId()
             .mailboxSession(mailboxSession)
             .mailbox(getMailboxEntity())
             .metaData(ImmutableSortedMap.copyOf(uids))
@@ -403,6 +404,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
                         Mailbox mailbox = getMailboxEntity();
                         MailboxMessage copy = copyMessage(message);
                         delegatingMailboxListener.event(EventFactory.added()
+                            .randomEventId()
                             .mailboxSession(mailboxSession)
                             .mailbox(mailbox)
                             .addMessage(copy)
@@ -564,6 +566,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         List<UpdatedFlags> updatedFlags = Iterators.toStream(it).collect(Guavate.toImmutableList());
 
         delegatingMailboxListener.event(EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(mailboxSession)
             .mailbox(getMailboxEntity())
             .updatedFlags(updatedFlags)
@@ -727,6 +730,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         }
 
         delegatingMailboxListener.event(EventFactory.added()
+            .randomEventId()
             .mailboxSession(session)
             .mailbox(to.getMailboxEntity())
             .metaData(copiedUids)
@@ -755,11 +759,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         }
 
         delegatingMailboxListener.event(EventFactory.added()
+            .randomEventId()
             .mailboxSession(session)
             .mailbox(to.getMailboxEntity())
             .metaData(moveUids)
             .build());
         delegatingMailboxListener.event(EventFactory.expunged()
+            .randomEventId()
             .mailboxSession(session)
             .mailbox(getMailboxEntity())
             .addMetaData(moveResult.getOriginalMessages())

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
index bcd6959..84bc1f0 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
@@ -140,6 +140,7 @@ public class StoreRightManager implements RightManager {
         ACLDiff aclDiff = mapper.updateACL(mailbox, mailboxACLCommand);
 
         delegatingMailboxListener.event(EventFactory.aclUpdated()
+            .randomEventId()
             .mailboxSession(session)
             .mailbox(mailbox)
             .aclDiff(aclDiff)
@@ -222,6 +223,7 @@ public class StoreRightManager implements RightManager {
         ACLDiff aclDiff = mapper.setACL(mailbox, mailboxACL);
 
         delegatingMailboxListener.event(EventFactory.aclUpdated()
+            .randomEventId()
             .mailboxSession(session)
             .mailbox(mailbox)
             .aclDiff(aclDiff)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
index 6dd75a9..5ad8d09 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
@@ -27,6 +27,7 @@ import java.util.SortedMap;
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageMoveEvent;
@@ -48,6 +49,15 @@ import com.google.common.collect.ImmutableSortedMap;
 
 public class EventFactory {
     @FunctionalInterface
+    public interface  RequireEventId<T> {
+        T eventId(Event.EventId eventId);
+
+        default T randomEventId() {
+            return eventId(Event.EventId.random());
+        }
+    }
+
+    @FunctionalInterface
     public interface RequireUser<T> {
         T user(User user);
     }
@@ -172,15 +182,17 @@ public class EventFactory {
     }
 
     @FunctionalInterface
-    public interface RequireMailboxEvent<T> extends RequireSession<RequireMailbox<T>> {}
+    public interface RequireMailboxEvent<T> extends RequireEventId<RequireSession<RequireMailbox<T>>> {}
 
     public static class MailboxAddedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
 
-        MailboxAddedFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId) {
+        MailboxAddedFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -193,18 +205,20 @@ public class EventFactory {
             Preconditions.checkNotNull(user);
             Preconditions.checkNotNull(sessionId);
 
-            return new MailboxListener.MailboxAdded(sessionId, user, path, mailboxId);
+            return new MailboxListener.MailboxAdded(sessionId, user, path, mailboxId, eventId);
         }
     }
 
     public static class AddedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
         private final ImmutableSortedMap<MessageUid, MessageMetaData> metaData;
 
-        AddedFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, Map<MessageUid, MessageMetaData> metaData) {
+        AddedFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, Map<MessageUid, MessageMetaData> metaData) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -219,18 +233,20 @@ public class EventFactory {
             Preconditions.checkNotNull(sessionId);
             Preconditions.checkNotNull(metaData);
 
-            return new MailboxListener.Added(sessionId, user, path, mailboxId, metaData);
+            return new MailboxListener.Added(sessionId, user, path, mailboxId, metaData, eventId);
         }
     }
 
     public static class ExpungedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
         private final ImmutableSortedMap<MessageUid, MessageMetaData> metaData;
 
-        ExpungedFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, Map<MessageUid, MessageMetaData> metaData) {
+        ExpungedFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, Map<MessageUid, MessageMetaData> metaData) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -245,18 +261,20 @@ public class EventFactory {
             Preconditions.checkNotNull(sessionId);
             Preconditions.checkNotNull(metaData);
 
-            return new MailboxListener.Expunged(sessionId, user, path, mailboxId, metaData);
+            return new MailboxListener.Expunged(sessionId, user, path, mailboxId, metaData, eventId);
         }
     }
 
     public static class MailboxAclUpdatedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
         private final ACLDiff aclDiff;
 
-        MailboxAclUpdatedFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, ACLDiff aclDiff) {
+        MailboxAclUpdatedFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, ACLDiff aclDiff) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -271,11 +289,12 @@ public class EventFactory {
             Preconditions.checkNotNull(sessionId);
             Preconditions.checkNotNull(aclDiff);
 
-            return new MailboxListener.MailboxACLUpdated(sessionId, user, path, aclDiff, mailboxId);
+            return new MailboxListener.MailboxACLUpdated(sessionId, user, path, aclDiff, mailboxId, eventId);
         }
     }
 
     public static class MailboxDeletionFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
@@ -284,7 +303,8 @@ public class EventFactory {
         private final QuotaCount deletedMessageCount;
         private final QuotaSize totalDeletedSize;
 
-        MailboxDeletionFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) {
+        MailboxDeletionFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, QuotaRoot quotaRoot, QuotaCount deletedMessageCount, QuotaSize totalDeletedSize) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -303,18 +323,20 @@ public class EventFactory {
             Preconditions.checkNotNull(deletedMessageCount);
             Preconditions.checkNotNull(totalDeletedSize);
 
-            return new MailboxListener.MailboxDeletion(sessionId, user, path, quotaRoot, deletedMessageCount, totalDeletedSize, mailboxId);
+            return new MailboxListener.MailboxDeletion(sessionId, user, path, quotaRoot, deletedMessageCount, totalDeletedSize, mailboxId, eventId);
         }
     }
 
     public static class MailboxRenamedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath oldPath;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
         private final MailboxPath newPath;
 
-        MailboxRenamedFinalStage(MailboxPath oldPath, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, MailboxPath newPath) {
+        MailboxRenamedFinalStage(Event.EventId eventId, MailboxPath oldPath, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, MailboxPath newPath) {
+            this.eventId = eventId;
             this.oldPath = oldPath;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -330,18 +352,20 @@ public class EventFactory {
             Preconditions.checkNotNull(user);
             Preconditions.checkNotNull(sessionId);
 
-            return new MailboxListener.MailboxRenamed(sessionId, user, oldPath, mailboxId, newPath);
+            return new MailboxListener.MailboxRenamed(sessionId, user, oldPath, mailboxId, newPath, eventId);
         }
     }
 
     public static class FlagsUpdatedFinalStage {
+        private final Event.EventId eventId;
         private final MailboxPath path;
         private final MailboxId mailboxId;
         private final User user;
         private final MailboxSession.SessionId sessionId;
         private final ImmutableList<UpdatedFlags> updatedFlags;
 
-        FlagsUpdatedFinalStage(MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, ImmutableList<UpdatedFlags> updatedFlags) {
+        FlagsUpdatedFinalStage(Event.EventId eventId, MailboxPath path, MailboxId mailboxId, User user, MailboxSession.SessionId sessionId, ImmutableList<UpdatedFlags> updatedFlags) {
+            this.eventId = eventId;
             this.path = path;
             this.mailboxId = mailboxId;
             this.user = user;
@@ -357,18 +381,20 @@ public class EventFactory {
             Preconditions.checkNotNull(sessionId);
             Preconditions.checkNotNull(updatedFlags);
 
-            return new MailboxListener.FlagsUpdated(sessionId, user, path, mailboxId, updatedFlags);
+            return new MailboxListener.FlagsUpdated(sessionId, user, path, mailboxId, updatedFlags, eventId);
         }
     }
 
     public static final class QuotaUsageUpdatedFinalStage {
+        private final Event.EventId eventId;
         private final User user;
         private final QuotaRoot quotaRoot;
         private final Quota<QuotaCount> countQuota;
         private final Quota<QuotaSize> sizeQuota;
         private final Instant instant;
 
-        QuotaUsageUpdatedFinalStage(User user, QuotaRoot quotaRoot, Quota<QuotaCount> countQuota, Quota<QuotaSize> sizeQuota, Instant instant) {
+        QuotaUsageUpdatedFinalStage(Event.EventId eventId, User user, QuotaRoot quotaRoot, Quota<QuotaCount> countQuota, Quota<QuotaSize> sizeQuota, Instant instant) {
+            this.eventId = eventId;
             this.user = user;
             this.quotaRoot = quotaRoot;
             this.countQuota = countQuota;
@@ -377,41 +403,41 @@ public class EventFactory {
         }
 
         public MailboxListener.QuotaUsageUpdatedEvent build() {
-            return new MailboxListener.QuotaUsageUpdatedEvent(user, quotaRoot, countQuota, sizeQuota, instant);
+            return new MailboxListener.QuotaUsageUpdatedEvent(eventId, user, quotaRoot, countQuota, sizeQuota, instant);
         }
     }
 
     public static RequireMailboxEvent<RequireMetadata<AddedFinalStage>> added() {
-        return user -> sessionId -> mailboxId -> path -> metaData -> new AddedFinalStage(path, mailboxId, user, sessionId, metaData);
+        return eventId -> user -> sessionId -> mailboxId -> path -> metaData -> new AddedFinalStage(eventId, path, mailboxId, user, sessionId, metaData);
     }
 
     public static RequireMailboxEvent<RequireMetadata<ExpungedFinalStage>> expunged() {
-        return user -> sessionId -> mailboxId -> path -> metaData -> new ExpungedFinalStage(path, mailboxId, user, sessionId, metaData);
+        return eventId -> user -> sessionId -> mailboxId -> path -> metaData -> new ExpungedFinalStage(eventId, path, mailboxId, user, sessionId, metaData);
     }
 
     public static RequireMailboxEvent<RequireUpdatedFlags<FlagsUpdatedFinalStage>> flagsUpdated() {
-        return user -> sessionId -> mailboxId -> path -> updatedFlags -> new FlagsUpdatedFinalStage(path, mailboxId, user, sessionId, updatedFlags);
+        return eventId -> user -> sessionId -> mailboxId -> path -> updatedFlags -> new FlagsUpdatedFinalStage(eventId, path, mailboxId, user, sessionId, updatedFlags);
     }
 
-    public static RequireSession<RequireMailboxId<RequireOldPath<RequireNewPath<MailboxRenamedFinalStage>>>> mailboxRenamed() {
-        return user -> sessionId -> mailboxId -> oldPath -> newPath -> new MailboxRenamedFinalStage(oldPath, mailboxId, user, sessionId, newPath);
+    public static RequireEventId<RequireSession<RequireMailboxId<RequireOldPath<RequireNewPath<MailboxRenamedFinalStage>>>>> mailboxRenamed() {
+        return eventId -> user -> sessionId -> mailboxId -> oldPath -> newPath -> new MailboxRenamedFinalStage(eventId, oldPath, mailboxId, user, sessionId, newPath);
     }
 
     public static  RequireMailboxEvent<RequireQuotaRoot<RequireQuotaCountValue<RequireQuotaSizeValue<MailboxDeletionFinalStage>>>> mailboxDeleted() {
-        return user -> sessionId -> mailboxId -> path -> quotaRoot -> quotaCount -> quotaSize -> new MailboxDeletionFinalStage(
-            path, mailboxId, user, sessionId, quotaRoot, quotaCount, quotaSize);
+        return eventId -> user -> sessionId -> mailboxId -> path -> quotaRoot -> quotaCount -> quotaSize -> new MailboxDeletionFinalStage(
+            eventId, path, mailboxId, user, sessionId, quotaRoot, quotaCount, quotaSize);
     }
 
     public static RequireMailboxEvent<MailboxAddedFinalStage> mailboxAdded() {
-        return user -> sessionId -> mailboxId -> path -> new MailboxAddedFinalStage(path, mailboxId, user, sessionId);
+        return eventId -> user -> sessionId -> mailboxId -> path -> new MailboxAddedFinalStage(eventId, path, mailboxId, user, sessionId);
     }
 
     public static RequireMailboxEvent<RequireAclDiff<MailboxAclUpdatedFinalStage>> aclUpdated() {
-        return user -> sessionId -> mailboxId -> path -> aclDiff -> new MailboxAclUpdatedFinalStage(path, mailboxId, user, sessionId, aclDiff);
+        return eventId -> user -> sessionId -> mailboxId -> path -> aclDiff -> new MailboxAclUpdatedFinalStage(eventId, path, mailboxId, user, sessionId, aclDiff);
     }
 
-    public static RequireUser<RequireQuotaRoot<RequireQuotaCount<RequireQuotaSize<RequireInstant<QuotaUsageUpdatedFinalStage>>>>> quotaUpdated() {
-        return user -> quotaRoot -> quotaCount -> quotaSize -> instant -> new QuotaUsageUpdatedFinalStage(user, quotaRoot, quotaCount, quotaSize, instant);
+    public static RequireEventId<RequireUser<RequireQuotaRoot<RequireQuotaCount<RequireQuotaSize<RequireInstant<QuotaUsageUpdatedFinalStage>>>>>> quotaUpdated() {
+        return eventId -> user -> quotaRoot -> quotaCount -> quotaSize -> instant -> new QuotaUsageUpdatedFinalStage(eventId, user, quotaRoot, quotaCount, quotaSize, instant);
     }
 
     public static MessageMoveEvent.Builder moved() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index e27bccc..e00c087 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -91,6 +91,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
         }
         delegatingMailboxListener.event(
             EventFactory.quotaUpdated()
+                .randomEventId()
                 .user(expunged.getUser())
                 .quotaRoot(quotaRoot)
                 .quotaCount(quotaManager.getMessageQuota(quotaRoot))
@@ -112,6 +113,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat
         }
         delegatingMailboxListener.event(
             EventFactory.quotaUpdated()
+                .randomEventId()
                 .user(added.getUser())
                 .quotaRoot(quotaRoot)
                 .quotaCount(quotaManager.getMessageQuota(quotaRoot))

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
index fd31281..6cc6933 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
@@ -83,6 +83,7 @@ public class MessageIdManagerTestSystem {
             MailboxMessage message = createMessage(mailboxId, flags, messageId, uid);
             mapperFactory.getMessageMapper(mailboxSession).add(mailbox, message);
             mailboxManager.getDelegationListener().event(EventFactory.added()
+                .randomEventId()
                 .mailboxSession(mailboxSession)
                 .mailbox(mailbox)
                 .addMessage(message)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
index 1bebdd5..9490f63 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListenerTest.java
@@ -27,6 +27,7 @@ import static org.mockito.Mockito.when;
 import org.apache.james.core.User;
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
@@ -84,7 +85,7 @@ public class DefaultDelegatingMailboxListenerTest {
 
     @Test
     public void eventShouldWork() {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -93,7 +94,7 @@ public class DefaultDelegatingMailboxListenerTest {
 
     @Test
     public void eventShouldOnlyTriggerMAILBOXListenerRelatedToTheEvent() {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, OTHER_MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, OTHER_MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).isEmpty();
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -105,9 +106,9 @@ public class DefaultDelegatingMailboxListenerTest {
         QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", null);
         QuotaCount deletedMessageCount = QuotaCount.count(123);
         QuotaSize totalDeletedSize = QuotaSize.size(456);
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, deletedMessageCount, totalDeletedSize, MAILBOX_ID);
+        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, deletedMessageCount, totalDeletedSize, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(secondEvent);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
@@ -119,9 +120,9 @@ public class DefaultDelegatingMailboxListenerTest {
         QuotaRoot quotaRoot = QuotaRoot.quotaRoot("root", null);
         QuotaCount quotaCount = QuotaCount.count(123);
         QuotaSize quotaSize = QuotaSize.size(456);
-        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize, MAILBOX_ID);
+        MailboxListener.MailboxDeletion event = new MailboxListener.MailboxDeletion(null, null, MAILBOX_PATH, quotaRoot, quotaCount, quotaSize, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
-        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent secondEvent = new MailboxListener.MailboxAdded(null, null, OTHER_MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(secondEvent);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).containsOnly(event, secondEvent);
@@ -131,7 +132,7 @@ public class DefaultDelegatingMailboxListenerTest {
     @Test
     public void removeListenerShouldWork() {
         defaultDelegatingMailboxListener.removeListener(MAILBOX_ID, mailboxEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).isEmpty();
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -141,7 +142,7 @@ public class DefaultDelegatingMailboxListenerTest {
     @Test
     public void removeListenerShouldNotRemoveAListenerFromADifferentPath() {
         defaultDelegatingMailboxListener.removeListener(OTHER_MAILBOX_ID, mailboxEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -151,7 +152,7 @@ public class DefaultDelegatingMailboxListenerTest {
     @Test
     public void removeGlobalListenerShouldWorkForONCE() {
         defaultDelegatingMailboxListener.removeGlobalListener(eachNodeEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).isEmpty();
@@ -161,7 +162,7 @@ public class DefaultDelegatingMailboxListenerTest {
     @Test
     public void removeGlobalListenerShouldWorkForEACH_NODE() throws Exception {
         defaultDelegatingMailboxListener.removeGlobalListener(onceEventCollector, null);
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         defaultDelegatingMailboxListener.event(event);
         assertThat(mailboxEventCollector.getEvents()).containsExactly(event);
         assertThat(eachNodeEventCollector.getEvents()).containsExactly(event);
@@ -172,7 +173,7 @@ public class DefaultDelegatingMailboxListenerTest {
     public void listenersErrorsShouldNotBePropageted() throws Exception {
         MailboxSession session = MailboxSessionUtil.create("benwa");
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(session.getSessionId(),
-            session.getUser(), MAILBOX_PATH, MAILBOX_ID);
+            session.getUser(), MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         MailboxListener mockedListener = mock(MailboxListener.class);
         when(mockedListener.getType()).thenReturn(MailboxListener.ListenerType.ONCE);
         doThrow(new RuntimeException()).when(mockedListener).event(event);
@@ -185,7 +186,7 @@ public class DefaultDelegatingMailboxListenerTest {
 
     @Test
     public void listenersShouldReceiveEvents() {
-        MailboxListener.Added noopEvent = new MailboxListener.Added(MailboxSession.SessionId.of(18), User.fromUsername("bob"), MailboxPath.forUser("bob", "mailbox"), TestId.of(58), ImmutableSortedMap.of());
+        MailboxListener.Added noopEvent = new MailboxListener.Added(MailboxSession.SessionId.of(18), User.fromUsername("bob"), MailboxPath.forUser("bob", "mailbox"), TestId.of(58), ImmutableSortedMap.of(), Event.EventId.random());
 
         defaultDelegatingMailboxListener.event(noopEvent);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
index 1b55fb5..13efd68 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
@@ -30,6 +30,7 @@ import java.util.Optional;
 
 import org.apache.james.core.quota.QuotaCount;
 import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -78,6 +79,7 @@ public class MailboxAnnotationListenerTest {
         listener = new MailboxAnnotationListener(mailboxSessionMapperFactory, mailboxManager);
 
         deleteEvent = EventFactory.mailboxDeleted()
+            .randomEventId()
             .mailboxSession(mailboxSession)
             .mailboxId(mailboxId)
             .mailboxPath(MailboxPath.forUser("user", "name"))
@@ -93,7 +95,7 @@ public class MailboxAnnotationListenerTest {
 
     @Test
     public void eventShouldDoNothingIfDoNotHaveMailboxDeletionEvent() {
-        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID);
+        MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(null, null, MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
         listener.event(event);
 
         verifyNoMoreInteractions(mailboxSessionMapperFactory);

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
index ef3934c..b6eff37 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
@@ -32,6 +32,7 @@ import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.imap.api.ImapSessionState;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.mailbox.Event;
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
@@ -115,6 +116,7 @@ public class MailboxEventAnalyserTest {
     private static final int UID_VALIDITY = 1024;
     private static final SimpleMailbox DEFAULT_MAILBOX = new SimpleMailbox(MAILBOX_PATH, UID_VALIDITY, MAILBOX_ID);
     private static final MailboxListener.Added ADDED = EventFactory.added()
+        .randomEventId()
         .mailboxSession(MAILBOX_SESSION)
         .mailbox(DEFAULT_MAILBOX)
         .addMetaData(new MessageMetaData(MessageUid.of(11), 0, new Flags(), 45, new Date(), new DefaultMessageId()))
@@ -156,7 +158,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldBeNoSizeChangeOnOtherEvent() {
         MailboxListener.MailboxEvent event = new MailboxListener.MailboxAdded(MAILBOX_SESSION.getSessionId(),
-            MAILBOX_SESSION.getUser(), MAILBOX_PATH, MAILBOX_ID);
+            MAILBOX_SESSION.getUser(), MAILBOX_PATH, MAILBOX_ID, Event.EventId.random());
       
         testee.event(event);
 
@@ -181,6 +183,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldNotSetUidWhenNoSystemFlagChange() {
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(NOOP_UPDATED_FLAGS)
@@ -194,6 +197,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldSetUidWhenSystemFlagChange() {
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(OTHER_MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(ADD_ANSWERED_UPDATED_FLAGS)
@@ -209,6 +213,7 @@ public class MailboxEventAnalyserTest {
         SelectedMailboxImpl analyser = this.testee;
 
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(ADD_ANSWERED_UPDATED_FLAGS)
@@ -224,6 +229,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldSetUidWhenSystemFlagChangeDifferentSessionInSilentMode() {
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(OTHER_MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(ADD_ANSWERED_UPDATED_FLAGS)
@@ -239,6 +245,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldNotSetUidWhenSystemFlagChangeSameSessionInSilentMode() {
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(NOOP_UPDATED_FLAGS)
@@ -254,6 +261,7 @@ public class MailboxEventAnalyserTest {
     @Test
     public void testShouldNotSetUidWhenOnlyRecentFlagUpdated() {
         MailboxListener.FlagsUpdated update = EventFactory.flagsUpdated()
+            .randomEventId()
             .mailboxSession(MAILBOX_SESSION)
             .mailbox(DEFAULT_MAILBOX)
             .updatedFlag(ADD_RECENT_UPDATED_FLAGS)

http://git-wip-us.apache.org/repos/asf/james-project/blob/60919d85/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
----------------------------------------------------------------------
diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
index 2e13921..0b4a0a8 100644
--- a/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
+++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
@@ -164,6 +164,7 @@ public class SelectedMailboxImplTest {
 
     private void emitEvent(MailboxListener mailboxListener) {
         mailboxListener.event(EventFactory.added()
+            .randomEventId()
             .mailboxSession(MailboxSessionUtil.create("user"))
             .mailbox(mailbox)
             .addMetaData(new MessageMetaData(EMITTED_EVENT_UID, MOD_SEQ, new Flags(), SIZE, new Date(), new DefaultMessageId()))


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org