public MessageMoveEvent build() { Preconditions.checkNotNull(user, "'user' is mandatory"); Preconditions.checkNotNull(messageMoves, "'messageMoves' is mandatory"); return new MessageMoveEvent(eventId.orElse(EventId.random()), user, messageMoves, messageIds.build()); } }
@Test void flagsUpdatedShouldBeNoopWhenEmpty() { MailboxListener.FlagsUpdated flagsUpdated = new MailboxListener.FlagsUpdated(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableList.of(), Event.EventId.random()); assertThat(flagsUpdated.isNoop()).isTrue(); }
@Test void removedShouldNotBeNoop() { MailboxListener.MailboxDeletion deletion = new MailboxListener.MailboxDeletion(SESSION_ID, BOB, PATH, QUOTA_ROOT, QUOTA_COUNT, QUOTA_SIZE, MAILBOX_ID, Event.EventId.random()); assertThat(deletion.isNoop()).isFalse(); }
@Test default void removeShouldKeepConsistencyWhenConcurrentRemove() throws Exception { EventDeadLetters eventDeadLetters = eventDeadLetters(); ImmutableMap<Integer, Group> groups = concurrentGroups(); ConcurrentHashMap<Integer, Event.EventId> storedEventIds = new ConcurrentHashMap<>(); ConcurrentTestRunner.builder() .operation((threadNumber, step) -> { int operationIndex = threadNumber * OPERATION_COUNT + step; Event.EventId eventId = Event.EventId.random(); storedEventIds.put(operationIndex, eventId); eventDeadLetters.store(groups.get(threadNumber), event(eventId)).subscribe(); }) .threadCount(THREAD_COUNT) .operationCount(OPERATION_COUNT) .runSuccessfullyWithin(RUN_SUCCESSFULLY_IN); ConcurrentTestRunner.builder() .operation((threadNumber, step) -> { int operationIndex = threadNumber * OPERATION_COUNT + step; eventDeadLetters.remove(groups.get(threadNumber), storedEventIds.get(operationIndex)); }) .threadCount(THREAD_COUNT) .operationCount(OPERATION_COUNT) .runSuccessfullyWithin(RUN_SUCCESSFULLY_IN); assertThat(allEventIds()) .isEmpty(); } }
@Test default void storeShouldKeepConsistencyWhenConcurrentStore() throws Exception { EventDeadLetters eventDeadLetters = eventDeadLetters(); ImmutableMap<Integer, Group> groups = concurrentGroups(); Multimap<Integer, Event.EventId> storedEventIds = Multimaps.synchronizedSetMultimap(HashMultimap.create()); ConcurrentTestRunner.builder() .operation((threadNumber, step) -> { Event.EventId eventId = Event.EventId.random(); storedEventIds.put(threadNumber, eventId); eventDeadLetters.store(groups.get(threadNumber), event(eventId)); }) .threadCount(THREAD_COUNT) .operationCount(OPERATION_COUNT) .runSuccessfullyWithin(RUN_SUCCESSFULLY_IN); groups.forEach((groupId, group) -> { Group storedGroup = groups.get(groupId); assertThat(eventDeadLetters.failedEventIds(storedGroup).toStream()) .hasSameElementsAs(storedEventIds.get(groupId)); }); } }
@Test void quotaUsageUpdatedEventShouldNotBeNoop() { MailboxListener.QuotaUsageUpdatedEvent event = new MailboxListener.QuotaUsageUpdatedEvent(Event.EventId.random(), BOB, QUOTA_ROOT, Quota.<QuotaCount>builder() .used(QUOTA_COUNT) .computedLimit(QuotaCount.unlimited()) .build(), Quota.<QuotaSize>builder() .used(QUOTA_SIZE) .computedLimit(QuotaSize.unlimited()) .build(), Instant.now()); assertThat(event.isNoop()).isFalse(); } }
@Test void expungedShouldNotBeNoopWhenNotEmpty() { MailboxListener.Expunged expunged = new MailboxListener.Expunged(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableSortedMap.of(UID, META_DATA), Event.EventId.random()); assertThat(expunged.isNoop()).isFalse(); }
@Test void addedShouldBeNoopWhenEmpty() { MailboxListener.Added added = new MailboxListener.Added(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableSortedMap.of(), Event.EventId.random()); assertThat(added.isNoop()).isTrue(); }
@Test void aclDiffWithDifferentAclShouldNotBeNoop() { MailboxListener.MailboxACLUpdated aclUpdated = new MailboxListener.MailboxACLUpdated(SESSION_ID, BOB, PATH, ACLDiff.computeDiff(ACL_1, ACL_2), MAILBOX_ID, Event.EventId.random()); assertThat(aclUpdated.isNoop()).isFalse(); }
@Test void aclDiffWithSameAclShouldBeNoop() { MailboxListener.MailboxACLUpdated aclUpdated = new MailboxListener.MailboxACLUpdated(SESSION_ID, BOB, PATH, ACLDiff.computeDiff(ACL_1, ACL_1), MAILBOX_ID, Event.EventId.random()); assertThat(aclUpdated.isNoop()).isTrue(); }
@Test default void registeredListenersShouldNotReceiveNoopEvents() throws Exception { MailboxListener listener = newListener(); eventBus().register(listener, KEY_1); 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()); eventBus().dispatch(noopEvent, KEY_1).block(); verify(listener, after(FIVE_HUNDRED_MS.toMillis()).never()) .event(any()); }
@Test default void groupListenersShouldNotReceiveNoopEvents() throws Exception { MailboxListener listener = newListener(); eventBus().register(listener, GROUP_A); 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()); eventBus().dispatch(noopEvent, NO_KEYS).block(); verify(listener, after(FIVE_HUNDRED_MS.toMillis()).never()) .event(any()); }
@Test void expungedShouldBeNoopWhenEmpty() { MailboxListener.Expunged expunged = new MailboxListener.Expunged(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableSortedMap.of(), Event.EventId.random()); assertThat(expunged.isNoop()).isTrue(); }
@Test void addedShouldNotBeNoop() { MailboxListener.MailboxAdded added = new MailboxListener.MailboxAdded(SESSION_ID, BOB, PATH, MAILBOX_ID, Event.EventId.random()); assertThat(added.isNoop()).isFalse(); }
@Test void renameWithSameNameShouldBeNoop() { MailboxListener.MailboxRenamed mailboxRenamed = new MailboxListener.MailboxRenamed(SESSION_ID, BOB, PATH, MAILBOX_ID, PATH, Event.EventId.random()); assertThat(mailboxRenamed.isNoop()).isTrue(); }
@Test void renameWithDifferentNameShouldNotBeNoop() { MailboxListener.MailboxRenamed mailboxRenamed = new MailboxListener.MailboxRenamed(SESSION_ID, BOB, PATH, MAILBOX_ID, OTHER_PATH, Event.EventId.random()); assertThat(mailboxRenamed.isNoop()).isFalse(); }
@Test void flagsUpdatedShouldNotBeNoopWhenNotEmpty() { MailboxListener.FlagsUpdated flagsUpdated = new MailboxListener.FlagsUpdated(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableList.of(UpdatedFlags.builder() .uid(UID) .modSeq(45) .newFlags(new Flags()) .oldFlags(new Flags(Flags.Flag.ANSWERED)) .build()), Event.EventId.random()); assertThat(flagsUpdated.isNoop()).isFalse(); }
@Test void addedShouldNotBeNoopWhenNotEmpty() { MailboxListener.Added added = new MailboxListener.Added(SESSION_ID, BOB, PATH, MAILBOX_ID, ImmutableSortedMap.of(UID, META_DATA), Event.EventId.random()); assertThat(added.isNoop()).isFalse(); }