Search in sources :

Example 16 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method testInitialIdleDelayWhenRecentIsSupported.

@Test
public void testInitialIdleDelayWhenRecentIsSupported() throws Exception {
    ImapIdleChannelAdapter adapter = this.context.getBean("simpleAdapter", ImapIdleChannelAdapter.class);
    QueueChannel channel = new QueueChannel();
    adapter.setOutputChannel(channel);
    adapter.setReconnectDelay(1);
    ImapMailReceiver receiver = new ImapMailReceiver("imap:foo");
    receiver.setCancelIdleInterval(1);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    final IMAPFolder folder = mock(IMAPFolder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.RECENT));
    given(folder.isOpen()).willReturn(false).willReturn(true);
    given(folder.exists()).willReturn(true);
    DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
    adapterAccessor.setPropertyValue("mailReceiver", receiver);
    Field storeField = AbstractMailReceiver.class.getDeclaredField("store");
    storeField.setAccessible(true);
    Store store = mock(Store.class);
    given(store.isConnected()).willReturn(true);
    given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
    storeField.set(receiver, store);
    willAnswer(invocation -> folder).given(receiver).getFolder();
    MimeMessage mailMessage = mock(MimeMessage.class);
    Flags flags = mock(Flags.class);
    given(mailMessage.getFlags()).willReturn(flags);
    final Message[] messages = new Message[] { mailMessage };
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    final CountDownLatch idles = new CountDownLatch(2);
    willAnswer(invocation -> {
        idles.countDown();
        Thread.sleep(500);
        return null;
    }).given(folder).idle(true);
    adapter.start();
    /*
		 * Idle takes 5 seconds; since this server supports RECENT, we should
		 * not receive any early messages.
		 */
    assertThat(channel.receive(100)).isNull();
    assertThat(channel.receive(5000)).isNotNull();
    assertThat(idles.await(5, TimeUnit.SECONDS)).isTrue();
    adapter.stop();
}
Also used : QueueChannel(org.springframework.integration.channel.QueueChannel) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) IMAPFolder(com.sun.mail.imap.IMAPFolder) URLName(jakarta.mail.URLName) Store(jakarta.mail.Store) Flags(jakarta.mail.Flags) CountDownLatch(java.util.concurrent.CountDownLatch) Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 17 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method receiveAndDontMarkAsRead.

@Test
public void receiveAndDontMarkAsRead() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    willAnswer(invocation -> null).given(receiver).openFolder();
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.SEEN, true);
    verify(msg2, times(0)).setFlag(Flag.SEEN, true);
}
Also used : Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 18 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method testIdleReconnects.

@Test
public void testIdleReconnects() throws Exception {
    ImapMailReceiver receiver = spy(new ImapMailReceiver("imap:foo"));
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    IMAPFolder folder = mock(IMAPFolder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    given(folder.isOpen()).willReturn(false).willReturn(true);
    given(folder.exists()).willReturn(true);
    given(folder.hasNewMessages()).willReturn(true);
    Field storeField = AbstractMailReceiver.class.getDeclaredField("store");
    storeField.setAccessible(true);
    Store store = mock(Store.class);
    given(store.isConnected()).willReturn(false);
    given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
    storeField.set(receiver, store);
    ImapIdleChannelAdapter adapter = new ImapIdleChannelAdapter(receiver);
    LogAccessor logger = spy(TestUtils.getPropertyValue(adapter, "logger", LogAccessor.class));
    new DirectFieldAccessor(adapter).setPropertyValue("logger", logger);
    willDoNothing().given(logger).warn(any(Throwable.class), anyString());
    willAnswer(i -> {
        i.callRealMethod();
        throw new FolderClosedException(folder, "test");
    }).given(receiver).waitForNewMessages();
    ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    taskScheduler.initialize();
    adapter.setTaskScheduler(taskScheduler);
    adapter.setReconnectDelay(1);
    adapter.afterPropertiesSet();
    final CountDownLatch latch = new CountDownLatch(3);
    adapter.setApplicationEventPublisher(e -> {
        latch.countDown();
    });
    adapter.start();
    assertThat(latch.await(60, TimeUnit.SECONDS)).isTrue();
    verify(store, atLeast(3)).connect();
    adapter.stop();
    taskScheduler.shutdown();
}
Also used : IMAPFolder(com.sun.mail.imap.IMAPFolder) URLName(jakarta.mail.URLName) FolderClosedException(jakarta.mail.FolderClosedException) Store(jakarta.mail.Store) Flags(jakarta.mail.Flags) CountDownLatch(java.util.concurrent.CountDownLatch) ThreadPoolTaskScheduler(org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler) Field(java.lang.reflect.Field) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) LogAccessor(org.springframework.core.log.LogAccessor) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 19 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method receiveMarkAsReadAndDelete.

@Test
public void receiveMarkAsReadAndDelete() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(true);
    receiver.setShouldDeleteMessages(true);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    willAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
        int folderOpenMode = (int) accessor.getPropertyValue("folderOpenMode");
        if (folderOpenMode != Folder.READ_WRITE) {
            throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode");
        }
        return null;
    }).given(receiver).openFolder();
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    receiver.receive();
    verify(msg1, times(1)).setFlag(Flag.SEEN, true);
    verify(msg2, times(1)).setFlag(Flag.SEEN, true);
    verify(receiver, times(1)).deleteMessages(Mockito.any());
}
Also used : Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 20 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method receiveAndDontMarkAsReadButDelete.

@Test
public void receiveAndDontMarkAsReadButDelete() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    receiver.setShouldDeleteMessages(true);
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    willAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
        int folderOpenMode = (int) accessor.getPropertyValue("folderOpenMode");
        if (folderOpenMode != Folder.READ_WRITE) {
            throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode");
        }
        return null;
    }).given(receiver).openFolder();
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.SEEN, true);
    verify(msg2, times(0)).setFlag(Flag.SEEN, true);
    verify(msg1, times(1)).setFlag(Flag.DELETED, true);
    verify(msg2, times(1)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Aggregations

Flags (jakarta.mail.Flags)24 BeanFactory (org.springframework.beans.factory.BeanFactory)19 Test (org.junit.jupiter.api.Test)17 Folder (jakarta.mail.Folder)16 Message (jakarta.mail.Message)16 Field (java.lang.reflect.Field)16 MimeMessage (jakarta.mail.internet.MimeMessage)15 IMAPFolder (com.sun.mail.imap.IMAPFolder)13 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)12 ServerSetupTest (com.icegreen.greenmail.util.ServerSetupTest)11 Store (jakarta.mail.Store)5 URLName (jakarta.mail.URLName)5 SearchTerm (jakarta.mail.search.SearchTerm)5 MessagingException (jakarta.mail.MessagingException)3 FlagTerm (jakarta.mail.search.FlagTerm)3 NotTerm (jakarta.mail.search.NotTerm)3 Method (java.lang.reflect.Method)3 QueueChannel (org.springframework.integration.channel.QueueChannel)3 FolderClosedException (jakarta.mail.FolderClosedException)2 AddressException (jakarta.mail.internet.AddressException)2