@Test public void concurrentEventShouldNotSkipAddedEventsEmittedDuringInitialisation() throws Exception { final AtomicInteger successCount = new AtomicInteger(0); doAnswer(generateEmitEventAnswer(successCount)) .when(mailboxManager) .addListener(eq(mailboxPath), any(MailboxListener.class), any(MailboxSession.class)); SelectedMailboxImpl selectedMailbox = new SelectedMailboxImpl( mailboxManager, imapSession, mailboxPath); assertThat(selectedMailbox.getLastUid().get()).isEqualTo(EMITTED_EVENT_UID); }
@Test public void concurrentEventShouldBeProcessedSuccessfullyDuringInitialisation() throws Exception { final AtomicInteger successCount = new AtomicInteger(0); doAnswer(generateEmitEventAnswer(successCount)) .when(mailboxManager) .addListener(eq(mailboxPath), any(MailboxListener.class), any(MailboxSession.class)); new SelectedMailboxImpl( mailboxManager, imapSession, mailboxPath); assertThat(successCount.get()) .as("Get the incremented value in case of successful event processing.") .isEqualTo(1); }
@Test public void test() throws Exception { final MockMailboxSession mockMailboxSession = new MockMailboxSession("re-indexing"); when(mailboxManager.createSystemSession(any(String.class))) .thenReturn(mockMailboxSession); final MessageMapper messageMapper = mock(MessageMapper.class); final MailboxMapper mailboxMapper = mock(MailboxMapper.class); when(mailboxSessionMapperFactory.getMessageMapper(any(MailboxSession.class))) .thenReturn(messageMapper); when(mailboxSessionMapperFactory.getMailboxMapper(any(MailboxSession.class))) .thenReturn(mailboxMapper); final MailboxMessage message = new MessageBuilder().build(); final SimpleMailbox mailbox = new SimpleMailbox(INBOX, 42); mailbox.setMailboxId(message.getMailboxId()); when(mailboxMapper.findMailboxByPath(INBOX)).thenReturn(mailbox); when(messageMapper.findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT)) .thenReturn(Lists.newArrayList(message).iterator()); reIndexer.reIndex(INBOX); verify(mailboxManager).createSystemSession(any(String.class)); verify(mailboxSessionMapperFactory).getMailboxMapper(mockMailboxSession); verify(mailboxSessionMapperFactory).getMessageMapper(mockMailboxSession); verify(mailboxMapper).findMailboxByPath(INBOX); verify(messageMapper).findInMailbox(mailbox, MessageRange.all(), MessageMapper.FetchType.Full, LIMIT); verify(mailboxManager).addListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class)); verify(mailboxManager).removeListener(eq(INBOX), any(MailboxListener.class), any(MailboxSession.class)); verify(messageSearchIndex).add(any(MailboxSession.class), eq(mailbox), eq(message)); verify(messageSearchIndex).deleteAll(any(MailboxSession.class), eq(mailbox)); verifyNoMoreInteractions(mailboxMapper, mailboxSessionMapperFactory, messageSearchIndex, messageMapper, mailboxMapper); }
public SelectedMailboxImpl(MailboxManager mailboxManager, ImapSession session, MailboxPath path) throws MailboxException { this.session = session; this.sessionId = ImapSessionUtils.getMailboxSession(session).getSessionId(); this.mailboxManager = mailboxManager; // Ignore events from our session setSilentFlagChanges(true); this.path = path; MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); uidMsnConverter = new UidMsnConverter(); mailboxManager.addListener(path, this, mailboxSession); MessageManager messageManager = mailboxManager.getMailbox(path, mailboxSession); applicableFlags = messageManager.getApplicableFlags(mailboxSession); uidMsnConverter.addAll(ImmutableList.copyOf( messageManager.search(new SearchQuery(SearchQuery.all()), mailboxSession))); }
if (sm != null) { idleListener = new IdleMailboxListener(session, responder); mailboxManager.addListener(sm.getPath(), idleListener , mailboxSession); } else { idleListener = null;
if (sm != null) { idleListener = new IdleMailboxListener(session, responder); mailboxManager.addListener(sm.getPath(), idleListener, mailboxSession); } else { idleListener = null;
private void init() throws MailboxException { MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); mailboxManager.addListener(path, this, mailboxSession); MessageResultIterator messages = mailboxManager.getMailbox(path, mailboxSession).getMessages(MessageRange.all(), FetchGroupImpl.MINIMAL, mailboxSession); synchronized (this) { while(messages.hasNext()) { MessageResult mr = messages.next(); applicableFlags.add(mr.getFlags()); add(mr.getUid()); } // \RECENT is not a applicable flag in imap so remove it from the list applicableFlags.remove(Flags.Flag.RECENT); } }