Merge branch 'stable-3.4'

* stable-3.4:
  Decrease size of serialized ParsingQueueTask
  TestEventPublisher: performance improvement

Solves: Jira GER-1554
Change-Id: I38c160f94e71c995a2dc19336bbd475785102371
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
index e1cd13c..09af40f 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EiffelEventMapper.java
@@ -20,7 +20,6 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.extensions.common.AccountInfo;
 import com.google.gerrit.extensions.common.GitPerson;
-import com.google.gerrit.extensions.events.RevisionCreatedListener;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.AccountResolver.UnresolvableAccountException;
@@ -34,6 +33,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelCompositionDefinedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeCreatedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeSubmittedEventInfo;
+import com.googlesource.gerrit.plugins.eventseiffel.parsing.PatchsetCreationData;
 import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
@@ -68,20 +68,20 @@
   }
 
   public EiffelSourceChangeCreatedEventInfo toScc(
-      RevisionCreatedListener.Event event, List<UUID> parentEventIds)
+      PatchsetCreationData data, List<UUID> parentEventIds)
       throws ConfigInvalidException, IOException {
-    PersonInfo author = toPersonInfo(event.getRevision().commit.author);
+    PersonInfo author = toPersonInfo(data.author);
     return eventFactoryProvider
         .get()
         .createScc(
             author.name,
             author.email,
             author.username,
-            event.getChange().project,
-            event.getChange().branch,
-            event.getRevision().commit.commit,
-            event.getChange()._number,
-            event.getWhen().getTime(),
+            data.project,
+            data.branch,
+            data.commitId,
+            data.changeNumber,
+            data.createdAt,
             parentEventIds);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
index faa1fed..3285993 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParser.java
@@ -14,19 +14,19 @@
 package com.googlesource.gerrit.plugins.eventseiffel.parsing;
 
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.SourceChangeEventKey;
 
 public interface EiffelEventParser {
 
   /**
-   * Creates SCC events for all commits reachable from the commit that triggered the {@link Event}
-   * event.
+   * Creates SCC events for all commits reachable from the commit that triggered the patchset
+   * creation described by the {@link PatchsetCreationData} data.
    *
-   * @param event - Describes a revision from which to create SCC events.
+   * @param data - Describes a patchset creation from which to create SCC events.
    * @throws EventParsingException- When event-creation fails.
    */
-  void createAndScheduleSccFromEvent(Event event) throws EventParsingException;
+  void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data)
+      throws EventParsingException;
 
   /**
    * Creates SCC events for all commits reachable from branchRef. I.e. create SCCs for already
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
index f4db832..b2320b5 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParserImpl.java
@@ -28,8 +28,6 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.exceptions.NoSuchEntityException;
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.common.CommitInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
@@ -92,29 +90,27 @@
    * @see com.googlesource.gerrit.plugins.eventseiffel.parsing.EiffelEventParser#createAndScheduleSccFromEvent(com.google.gerrit.extensions.events.RevisionCreatedListener.Event)
    */
   @Override
-  public void createAndScheduleSccFromEvent(Event event) throws EventParsingException {
-    CommitInfo commit = event.getRevision().commit;
+  public void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data)
+      throws EventParsingException {
     SourceChangeEventKey scc =
-        SourceChangeEventKey.sccKey(
-            event.getChange().project, event.getChange().branch, commit.commit);
+        SourceChangeEventKey.sccKey(data.project, data.branch, data.commitId);
     try {
       if (eventHub.getExistingId(scc).isPresent()) {
         logger.atWarning().log(
-            "Event %s already pushed for %d/%d",
-            scc, event.getChange()._number, event.getRevision()._number);
+            "Event %s already pushed for %d/%d", scc, data.changeNumber, data.patchsetNumber);
         return;
       }
       List<UUID> parentUuids = Lists.newArrayList();
-      for (CommitInfo parent : commit.parents) {
-        Optional<UUID> parentUuid = eventHub.getExistingId(scc.copy(parent.commit));
+      for (String parentId : data.parentCommitIds) {
+        Optional<UUID> parentUuid = eventHub.getExistingId(scc.copy(parentId));
         if (parentUuid.isPresent()) {
           parentUuids.add(parentUuid.get());
         }
       }
 
       /* Eiffel events have been scheduled or published for all parents. */
-      if (parentUuids.size() == commit.parents.size()) {
-        pushToHub(mapper.toScc(event, parentUuids));
+      if (parentUuids.size() == data.parentCommitIds.size()) {
+        pushToHub(mapper.toScc(data, parentUuids));
       } else {
         createAndScheduleMissingSccs(scc);
       }
@@ -126,9 +122,9 @@
       throw new EventParsingException(
           e,
           "Event creation failed for: %s, %s, %s to SCC.",
-          event.getChange().project,
-          event.getChange().branch,
-          event.getRevision().commit.commit);
+          data.project,
+          data.branch,
+          data.commitId);
     }
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
index 01d5233..7fd9f25 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/EiffelEventParsingQueue.java
@@ -182,9 +182,9 @@
       try {
         switch (task.type) {
           case SCC:
-            if (task.patchsetCreatedEvent != null) {
+            if (task.patchsetCreationData != null) {
               append = ", from event, ";
-              eventParser.createAndScheduleSccFromEvent(task.patchsetCreatedEvent);
+              eventParser.createAndScheduleSccFromPatchsetCreation(task.patchsetCreationData);
             } else if (task.commitId != null) {
               eventParser.createAndScheduleSccFromCommit(
                   task.repoName, task.branchRefOrTag, task.commitId);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
index 245c4b3..b35ff1b 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueueTask.java
@@ -46,7 +46,7 @@
     private Long _updateTime = null;
     private Boolean _force = null;
     private String _previousTip = null;
-    private RevisionCreatedListener.Event _patchsetCreatedEvent;
+    private PatchsetCreationData _patchsetCreationData;
 
     private Builder(EiffelEventType type, String repoName, String branchRefOrTag) {
       this._type = type;
@@ -55,7 +55,7 @@
     }
 
     private Builder(RevisionCreatedListener.Event event) {
-      this._patchsetCreatedEvent = event;
+      this._patchsetCreationData = new PatchsetCreationData(event);
     }
 
     public Builder commit(String commitId) {
@@ -84,8 +84,8 @@
     }
 
     public ParsingQueueTask build() {
-      if (this._patchsetCreatedEvent != null) {
-        return new ParsingQueueTask(_patchsetCreatedEvent);
+      if (this._patchsetCreationData != null) {
+        return new ParsingQueueTask(_patchsetCreationData);
       }
       return new ParsingQueueTask(
           this._type,
@@ -107,7 +107,7 @@
   final Long updateTime;
   final Boolean force;
   final String previousTip;
-  final RevisionCreatedListener.Event patchsetCreatedEvent;
+  final PatchsetCreationData patchsetCreationData;
 
   private ParsingQueueTask(
       EiffelEventType type,
@@ -129,19 +129,19 @@
     this.updateTime = updateTime;
     this.previousTip = previousTip;
     this.force = force;
-    this.patchsetCreatedEvent = null;
+    this.patchsetCreationData = null;
   }
 
-  private ParsingQueueTask(RevisionCreatedListener.Event patchsetCreatedEvent) {
+  private ParsingQueueTask(PatchsetCreationData data) {
     this.type = EiffelEventType.SCC;
-    this.repoName = patchsetCreatedEvent.getChange().project;
-    this.branchRefOrTag = patchsetCreatedEvent.getChange().branch;
-    this.commitId = patchsetCreatedEvent.getRevision().commit.commit;
+    this.repoName = data.project;
+    this.branchRefOrTag = data.branch;
+    this.commitId = data.commitId;
     this.updater = null;
     this.updateTime = null;
     this.previousTip = null;
     this.force = null;
-    this.patchsetCreatedEvent = patchsetCreatedEvent;
+    this.patchsetCreationData = data;
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java
new file mode 100644
index 0000000..c0ebb7e
--- /dev/null
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/PatchsetCreationData.java
@@ -0,0 +1,44 @@
+// Copyright (C) 2022 The Android Open Source Project
+//
+// Licensed 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 com.googlesource.gerrit.plugins.eventseiffel.parsing;
+
+import com.google.gerrit.extensions.common.GitPerson;
+import com.google.gerrit.extensions.events.RevisionCreatedListener;
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class PatchsetCreationData {
+  public final GitPerson author;
+  public final String project;
+  public final String branch;
+  public final String commitId;
+  public final List<String> parentCommitIds;
+  public final int changeNumber;
+  public final int patchsetNumber;
+  public final long createdAt;
+
+  public PatchsetCreationData(RevisionCreatedListener.Event event) {
+    this.author = event.getRevision().commit.author;
+    this.project = event.getChange().project;
+    this.branch = event.getChange().branch;
+    this.commitId = event.getRevision().commit.commit;
+    this.parentCommitIds =
+        event.getRevision().commit.parents.stream()
+            .map(ci -> ci.commit)
+            .collect(Collectors.toList());
+    this.changeNumber = event.getChange()._number;
+    this.patchsetNumber = event.getRevision()._number;
+    this.createdAt = event.getWhen().getTime();
+  }
+}
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 0527b19..4d0d44d 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
@@ -18,7 +18,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;
@@ -87,8 +86,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
@@ -154,49 +153,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 {
     TestEventListenersConfigProvider.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 {
     TestEventsFilterProvider.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 {
     TestEventsFilterProvider.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
@@ -237,16 +232,13 @@
     String tagName = createTagRef(true).substring(RefNames.REFS_TAGS.length());
 
     EventKey artcKey = ArtifactEventKey.create(tagPURL(project.get(), tagName));
-    EiffelEvent artcEvent = publisher.getPublished(artcKey);
-    assertNull("Publisher found ARTC event", artcEvent);
+    publisher.assertNotPublished(artcKey, "Publisher found ARTC event");
 
     EventKey cdKey = CompositionDefinedEventKey.create(tagCompositionName(project.get()), tagName);
-    EiffelEvent cdEvent = publisher.getPublished(cdKey);
-    assertNull("Publisher found CD event", cdEvent);
+    publisher.assertNotPublished(cdKey, "Publisher found CD event");
 
     EventKey scsKey = SourceChangeEventKey.scsKey(project.get(), "master", getMaster());
-    EiffelEvent scsEvent = publisher.getPublished(scsKey);
-    assertNull("Publisher found SCS event", scsEvent);
+    publisher.assertNotPublished(scsKey, "Publisher found SCS event");
   }
 
   @Test
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
index ee2b553..94301f7 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/mapping/EventMappingIT.java
@@ -48,6 +48,7 @@
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelPersonInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeCreatedEventInfo;
 import com.googlesource.gerrit.plugins.eventseiffel.eiffel.dto.EiffelSourceChangeSubmittedEventInfo;
+import com.googlesource.gerrit.plugins.eventseiffel.parsing.PatchsetCreationData;
 import java.net.URLEncoder;
 import java.sql.Timestamp;
 import java.time.Instant;
@@ -82,8 +83,9 @@
   }
 
   @Test
-  public void sccFromRevisionCreatedEvent() throws Exception {
-    EiffelSourceChangeCreatedEventInfo event = mapper.toScc(new TestEvent(), PARENT_UUIDS);
+  public void sccFromPatchsetCreationData() throws Exception {
+    EiffelSourceChangeCreatedEventInfo event =
+        mapper.toScc(new PatchsetCreationData(new TestEvent()), PARENT_UUIDS);
     assertPersonInfo(event.data.author, AUTHOR_NAME, AUTHOR_EMAIL, null);
     assertGitIdentifier(event.data.gitIdentifier, REPO_NAME, BRANCH, COMMIT_SHA1);
     assertChangeInfo(event.data.change, String.valueOf(CHANGE_NUMBER), REPO_NAME, COMMIT_SHA1);
@@ -342,6 +344,7 @@
       author.email = AUTHOR_EMAIL;
       author.name = AUTHOR_NAME;
       cInfo.author = author;
+      cInfo.parents = List.of();
       RevisionInfo rInfo = new RevisionInfo();
       rInfo.commit = cInfo;
       return rInfo;
diff --git a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
index 0923634..8c9ed72 100644
--- a/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
+++ b/src/test/java/com/googlesource/gerrit/plugins/eventseiffel/parsing/ParsingQueuePersistenceIT.java
@@ -21,7 +21,6 @@
 import com.google.gerrit.acceptance.UseLocalDisk;
 import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.common.AccountInfo;
-import com.google.gerrit.extensions.events.RevisionCreatedListener.Event;
 import com.google.gerrit.server.git.ProjectRunnable;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provider;
@@ -190,7 +189,7 @@
     public NoOpEventParser() {}
 
     @Override
-    public void createAndScheduleSccFromEvent(Event event) {}
+    public void createAndScheduleSccFromPatchsetCreation(PatchsetCreationData data) {}
 
     @Override
     public void createAndScheduleSccFromBranch(String repoName, String branchRef) {}
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 691acf1..e1c4598 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
@@ -134,9 +131,9 @@
   public void createArtcAsNonAdminForbidden() throws Exception {
     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