55
55
import jakarta .mail .search .AndTerm ;
56
56
import jakarta .mail .search .FlagTerm ;
57
57
import jakarta .mail .search .FromTerm ;
58
+ import jakarta .mail .search .SearchTerm ;
58
59
import org .junit .jupiter .api .AfterAll ;
59
60
import org .junit .jupiter .api .AfterEach ;
60
61
import org .junit .jupiter .api .BeforeAll ;
@@ -219,7 +220,7 @@ public void testIdleWithServerGuts(ImapMailReceiver receiver, boolean mapped, bo
219
220
QueueChannel channel = new QueueChannel ();
220
221
adapter .setOutputChannel (channel );
221
222
adapter .setTaskScheduler (taskScheduler );
222
- adapter .setReconnectDelay (1 );
223
+ adapter .setReconnectDelay (10 );
223
224
adapter .afterPropertiesSet ();
224
225
adapter .start ();
225
226
MimeMessage message =
@@ -299,6 +300,7 @@ private AbstractMailReceiver receiveAndMarkAsReadDontDeleteGuts(AbstractMailRece
299
300
folderField .setAccessible (true );
300
301
Folder folder = mock (Folder .class );
301
302
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
303
+ given (folder .isOpen ()).willReturn (true );
302
304
folderField .set (receiver , folder );
303
305
304
306
final Message [] messages = new Message [] {msg1 , msg2 };
@@ -313,7 +315,7 @@ private AbstractMailReceiver receiveAndMarkAsReadDontDeleteGuts(AbstractMailRece
313
315
return null ;
314
316
}).given (receiver ).openFolder ();
315
317
316
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
318
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
317
319
318
320
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
319
321
receiver .receive ();
@@ -409,6 +411,7 @@ public void receiveMarkAsReadAndDelete() throws Exception {
409
411
folderField .setAccessible (true );
410
412
Folder folder = mock (Folder .class );
411
413
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
414
+ given (folder .isOpen ()).willReturn (true );
412
415
folderField .set (receiver , folder );
413
416
414
417
Message msg1 = GreenMailUtil .newMimeMessage ("test1" );
@@ -423,7 +426,7 @@ public void receiveMarkAsReadAndDelete() throws Exception {
423
426
return null ;
424
427
}).given (receiver ).openFolder ();
425
428
426
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
429
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
427
430
428
431
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
429
432
receiver .receive ();
@@ -446,6 +449,7 @@ public void receiveAndDontMarkAsRead() throws Exception {
446
449
folderField .setAccessible (true );
447
450
Folder folder = mock (Folder .class );
448
451
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
452
+ given (folder .isOpen ()).willReturn (true );
449
453
folderField .set (receiver , folder );
450
454
451
455
@@ -454,7 +458,7 @@ public void receiveAndDontMarkAsRead() throws Exception {
454
458
final Message [] messages = new Message [] {msg1 , msg2 };
455
459
willAnswer (invocation -> null ).given (receiver ).openFolder ();
456
460
457
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
461
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
458
462
459
463
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
460
464
receiver .afterPropertiesSet ();
@@ -476,6 +480,7 @@ public void receiveAndDontMarkAsReadButDelete() throws Exception {
476
480
folderField .setAccessible (true );
477
481
Folder folder = mock (Folder .class );
478
482
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
483
+ given (folder .isOpen ()).willReturn (true );
479
484
folderField .set (receiver , folder );
480
485
481
486
Message msg1 = GreenMailUtil .newMimeMessage ("test1" );
@@ -490,7 +495,7 @@ public void receiveAndDontMarkAsReadButDelete() throws Exception {
490
495
return null ;
491
496
}).given (receiver ).openFolder ();
492
497
493
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
498
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
494
499
495
500
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
496
501
receiver .afterPropertiesSet ();
@@ -513,6 +518,7 @@ public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception {
513
518
folderField .setAccessible (true );
514
519
Folder folder = mock (Folder .class );
515
520
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
521
+ given (folder .isOpen ()).willReturn (true );
516
522
folderField .set (receiver , folder );
517
523
518
524
Message msg1 = GreenMailUtil .newMimeMessage ("test1" );
@@ -527,7 +533,7 @@ public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception {
527
533
return null ;
528
534
}).given (receiver ).openFolder ();
529
535
530
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
536
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
531
537
532
538
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
533
539
receiver .receive ();
@@ -539,7 +545,7 @@ public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception {
539
545
@ Test
540
546
public void testMessageHistory () throws Exception {
541
547
ImapIdleChannelAdapter adapter = this .context .getBean ("simpleAdapter" , ImapIdleChannelAdapter .class );
542
- adapter .setReconnectDelay (1 );
548
+ adapter .setReconnectDelay (10 );
543
549
544
550
AbstractMailReceiver receiver = new ImapMailReceiver ();
545
551
receiver = spy (receiver );
@@ -552,16 +558,18 @@ public void testMessageHistory() throws Exception {
552
558
Message mailMessage = GreenMailUtil .newMimeMessage ("test1" );
553
559
final Message [] messages = new Message [] {mailMessage };
554
560
561
+ IMAPFolder folder = mock (IMAPFolder .class );
562
+ given (folder .isOpen ()).willReturn (true );
563
+ given (folder .hasNewMessages ()).willReturn (true );
564
+ given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
565
+
555
566
willAnswer (invocation -> {
556
567
DirectFieldAccessor accessor = new DirectFieldAccessor ((invocation .getMock ()));
557
- IMAPFolder folder = mock (IMAPFolder .class );
558
568
accessor .setPropertyValue ("folder" , folder );
559
- given (folder .isOpen ()).willReturn (true );
560
- given (folder .hasNewMessages ()).willReturn (true );
561
569
return null ;
562
570
}).given (receiver ).openFolder ();
563
571
564
- willAnswer (invocation -> messages ).given (receiver ). searchForNewMessages ( );
572
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
565
573
566
574
willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
567
575
@@ -595,32 +603,33 @@ protected Object handleRequestMessage(org.springframework.messaging.Message<?> r
595
603
adapter .setOutputChannel (channel );
596
604
QueueChannel errorChannel = new QueueChannel ();
597
605
adapter .setErrorChannel (errorChannel );
598
- adapter .setReconnectDelay (1 );
606
+ adapter .setReconnectDelay (10 );
599
607
600
608
AbstractMailReceiver receiver = new ImapMailReceiver ();
601
- receiver = spy (receiver );
602
609
receiver .setBeanFactory (mock (BeanFactory .class ));
603
610
receiver .afterPropertiesSet ();
604
611
605
612
Field folderField = AbstractMailReceiver .class .getDeclaredField ("folder" );
606
613
folderField .setAccessible (true );
607
614
Folder folder = mock (IMAPFolder .class );
608
615
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
616
+ given (folder .isOpen ()).willReturn (true );
617
+ given (folder .exists ()).willReturn (true );
609
618
folderField .set (receiver , folder );
610
619
611
- willAnswer (invocation -> true ).given (folder ).isOpen ();
612
-
613
- willAnswer (invocation -> null ).given (receiver ).openFolder ();
620
+ Field storeField = AbstractMailReceiver .class .getDeclaredField ("store" );
621
+ storeField .setAccessible (true );
622
+ Store store = mock (Store .class );
623
+ given (store .isConnected ()).willReturn (true );
624
+ storeField .set (receiver , store );
614
625
615
626
DirectFieldAccessor adapterAccessor = new DirectFieldAccessor (adapter );
616
627
adapterAccessor .setPropertyValue ("mailReceiver" , receiver );
617
628
618
629
Message mailMessage = GreenMailUtil .newMimeMessage ("test1" );
619
630
Message [] messages = new Message [] {mailMessage };
620
631
621
- willAnswer (invocation -> messages ).given (receiver ).searchForNewMessages ();
622
-
623
- willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
632
+ willAnswer (invocation -> messages ).given (folder ).search (any (SearchTerm .class ));
624
633
625
634
adapter .start ();
626
635
org .springframework .messaging .Message <?> replMessage = errorChannel .receive (10000 );
@@ -636,29 +645,28 @@ public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception {
636
645
637
646
QueueChannel channel = new QueueChannel ();
638
647
adapter .setOutputChannel (channel );
639
- adapter .setReconnectDelay (1 );
648
+ adapter .setReconnectDelay (10 );
640
649
641
650
ImapMailReceiver receiver = new ImapMailReceiver ("imap:foo" );
642
- receiver = spy (receiver );
643
- receiver .setBeanFactory (mock (BeanFactory .class ));
644
- receiver .afterPropertiesSet ();
651
+ ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler ();
652
+ setUpScheduler (receiver , taskScheduler );
645
653
646
654
final IMAPFolder folder = mock (IMAPFolder .class );
647
655
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .USER ));
648
656
given (folder .isOpen ()).willReturn (false ).willReturn (true );
649
657
given (folder .exists ()).willReturn (true );
650
658
651
- DirectFieldAccessor adapterAccessor = new DirectFieldAccessor (adapter );
652
- adapterAccessor .setPropertyValue ("mailReceiver" , receiver );
653
-
654
659
Field storeField = AbstractMailReceiver .class .getDeclaredField ("store" );
655
660
storeField .setAccessible (true );
656
661
Store store = mock (Store .class );
657
662
given (store .isConnected ()).willReturn (true );
658
663
given (store .getFolder (Mockito .any (URLName .class ))).willReturn (folder );
659
664
storeField .set (receiver , store );
660
665
661
- willAnswer (invocation -> folder ).given (receiver ).getFolder ();
666
+ receiver .afterPropertiesSet ();
667
+
668
+ DirectFieldAccessor adapterAccessor = new DirectFieldAccessor (adapter );
669
+ adapterAccessor .setPropertyValue ("mailReceiver" , receiver );
662
670
663
671
Message mailMessage = GreenMailUtil .newMimeMessage ("test1" );
664
672
final Message [] messages = new Message [] {mailMessage };
@@ -677,9 +685,7 @@ public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception {
677
685
else {
678
686
return new Message [0 ];
679
687
}
680
- }).given (receiver ).searchForNewMessages ();
681
-
682
- willAnswer (invocation -> null ).given (receiver ).fetchMessages (messages );
688
+ }).given (folder ).search (any (SearchTerm .class ));
683
689
684
690
willAnswer (invocation -> {
685
691
Thread .sleep (300 );
@@ -698,6 +704,7 @@ public void testNoInitialIdleDelayWhenRecentNotSupported() throws Exception {
698
704
assertThat (channel .receive (100 )).isNull ();
699
705
assertThat (channel .receive (10000 )).isNotNull ();
700
706
adapter .stop ();
707
+ taskScheduler .shutdown ();
701
708
}
702
709
703
710
@ Test
@@ -706,40 +713,36 @@ public void testInitialIdleDelayWhenRecentIsSupported() throws Exception {
706
713
707
714
QueueChannel channel = new QueueChannel ();
708
715
adapter .setOutputChannel (channel );
709
- adapter .setReconnectDelay (1 );
716
+ adapter .setReconnectDelay (100 );
710
717
adapter .afterPropertiesSet ();
711
718
712
719
ImapMailReceiver receiver = new ImapMailReceiver ("imap:foo" );
713
- receiver .setCancelIdleInterval (1 );
714
- receiver = spy (receiver );
715
- receiver .setBeanFactory (mock (BeanFactory .class ));
716
- receiver .afterPropertiesSet ();
717
-
718
- final IMAPFolder folder = mock (IMAPFolder .class );
720
+ receiver .setCancelIdleInterval (10 );
721
+ ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler ();
722
+ setUpScheduler (receiver , taskScheduler );
723
+ IMAPFolder folder = mock (IMAPFolder .class );
719
724
given (folder .getPermanentFlags ()).willReturn (new Flags (Flags .Flag .RECENT ));
720
725
given (folder .isOpen ()).willReturn (false ).willReturn (true );
721
726
given (folder .exists ()).willReturn (true );
722
727
723
- DirectFieldAccessor adapterAccessor = new DirectFieldAccessor (adapter );
724
- adapterAccessor .setPropertyValue ("mailReceiver" , receiver );
725
-
726
728
Field storeField = AbstractMailReceiver .class .getDeclaredField ("store" );
727
729
storeField .setAccessible (true );
728
730
Store store = mock (Store .class );
729
731
given (store .isConnected ()).willReturn (true );
730
732
given (store .getFolder (Mockito .any (URLName .class ))).willReturn (folder );
731
733
storeField .set (receiver , store );
732
734
733
- willAnswer ( invocation -> folder ). given ( receiver ). getFolder ();
735
+ receiver . afterPropertiesSet ();
734
736
735
- Message mailMessage = GreenMailUtil . newMimeMessage ( "test1" );
736
- final Message [] messages = new Message [] { mailMessage } ;
737
+ DirectFieldAccessor adapterAccessor = new DirectFieldAccessor ( adapter );
738
+ adapterAccessor . setPropertyValue ( "mailReceiver" , receiver ) ;
737
739
738
- willAnswer (invocation -> messages ).given (receiver ).searchForNewMessages ();
740
+ Message mailMessage = GreenMailUtil .newMimeMessage ("test1" );
741
+ Message [] messages = new Message [] {mailMessage };
739
742
740
- willAnswer (invocation -> null ).given (receiver ). fetchMessages ( messages );
743
+ willAnswer (invocation -> messages ).given (folder ). search ( any ( SearchTerm . class ) );
741
744
742
- final CountDownLatch idles = new CountDownLatch (2 );
745
+ CountDownLatch idles = new CountDownLatch (2 );
743
746
willAnswer (invocation -> {
744
747
idles .countDown ();
745
748
Thread .sleep (500 );
@@ -756,6 +759,7 @@ public void testInitialIdleDelayWhenRecentIsSupported() throws Exception {
756
759
assertThat (channel .receive (20000 )).isNotNull ();
757
760
assertThat (idles .await (10 , TimeUnit .SECONDS )).isTrue ();
758
761
adapter .stop ();
762
+ taskScheduler .shutdown ();
759
763
}
760
764
761
765
@ Test
@@ -771,7 +775,7 @@ public void testConnectionException() throws Exception {
771
775
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler ();
772
776
taskScheduler .initialize ();
773
777
adapter .setTaskScheduler (taskScheduler );
774
- adapter .setReconnectDelay (1 );
778
+ adapter .setReconnectDelay (10 );
775
779
adapter .start ();
776
780
assertThat (latch .await (10 , TimeUnit .SECONDS )).isTrue ();
777
781
assertThat (theEvent .get ().toString ())
@@ -957,7 +961,7 @@ public void testIdleReconnects() throws Exception {
957
961
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler ();
958
962
taskScheduler .initialize ();
959
963
adapter .setTaskScheduler (taskScheduler );
960
- adapter .setReconnectDelay (1 );
964
+ adapter .setReconnectDelay (10 );
961
965
adapter .afterPropertiesSet ();
962
966
final CountDownLatch latch = new CountDownLatch (3 );
963
967
adapter .setApplicationEventPublisher (e -> latch .countDown ());
0 commit comments