From da7ff2502c3f9fdc003d6b599e251ac955ac8309 Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Sun, 26 Feb 2017 14:15:31 -0500 Subject: [PATCH] Improve IMAP Idle Reconnect Test Related to: https://jira.spring.io/browse/INT-3536 Also see previous commit. Add a mock `Store` to verify we actually call `connect()` after the failure(s). --- .../mail/ImapMailReceiverTests.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java index caeb7ea27a..1900e9e184 100644 --- a/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java +++ b/spring-integration-mail/src/test/java/org/springframework/integration/mail/ImapMailReceiverTests.java @@ -29,7 +29,7 @@ import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.willAnswer; import static org.mockito.BDDMockito.willDoNothing; -import static org.mockito.BDDMockito.willThrow; +import static org.mockito.Mockito.atLeast; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -876,12 +876,26 @@ public class ImapMailReceiverTests { 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); Log logger = spy(TestUtils.getPropertyValue(adapter, "logger", Log.class)); new DirectFieldAccessor(adapter).setPropertyValue("logger", logger); willDoNothing().given(logger).warn(anyString(), any(Throwable.class)); - Folder folder = mock(Folder.class); - willThrow(new FolderClosedException(folder, "test")).given(receiver).waitForNewMessages(); + willAnswer(i -> { + i.callRealMethod(); + throw new FolderClosedException(folder, "test"); + }).given(receiver).waitForNewMessages(); ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler(); taskScheduler.initialize(); adapter.setTaskScheduler(taskScheduler); @@ -893,6 +907,7 @@ public class ImapMailReceiverTests { }); adapter.start(); assertTrue(latch.await(60, TimeUnit.SECONDS)); + verify(store, atLeast(3)).connect(); taskScheduler.shutdown(); }