@@ -652,7 +652,7 @@ suiteReport "PeerPool testing suite":
652
652
lenAcquired (pool) == 0
653
653
len (pool) == 0
654
654
655
- timedTest " Delete peer on release text " :
655
+ timedTest " Delete peer on release test " :
656
656
proc testDeleteOnRelease (): Future [bool ] {.async .} =
657
657
proc scoreCheck (peer: PeerTest ): bool =
658
658
if peer.weight >= 0 :
@@ -686,6 +686,106 @@ suiteReport "PeerPool testing suite":
686
686
687
687
check waitFor (testDeleteOnRelease ()) == true
688
688
689
+ timedTest " Notify when peer leaves pool test" :
690
+ proc testNotifyOnLeave (): Future [bool ] {.async .} =
691
+
692
+ var pool = newPeerPool [PeerTest , PeerTestID ]()
693
+ var peer0 = PeerTest .init (" idInc0" , 100 )
694
+ var peer1 = PeerTest .init (" idOut0" , 100 )
695
+ var peer2 = PeerTest .init (" idInc1" , 100 )
696
+ var peer3 = PeerTest .init (" idOut1" , 100 )
697
+
698
+ # Case 1. Deleting peer which is not part of PeerPool.
699
+ block :
700
+ var fut0 = pool.joinPeer (peer0)
701
+ doAssert (fut0.finished == false )
702
+ await sleepAsync (20 .milliseconds)
703
+ doAssert (fut0.finished == true and fut0.failed == false )
704
+
705
+ # Case 2. Deleting peer which is not acquired.
706
+ discard pool.addPeerNoWait (peer0, PeerType .Incoming )
707
+ block :
708
+ var fut0 = pool.joinPeer (peer0)
709
+ discard pool.deletePeer (peer0)
710
+ var fut1 = pool.joinPeer (peer0)
711
+ await sleepAsync (20 .milliseconds)
712
+ var fut2 = pool.joinPeer (peer0)
713
+ doAssert (fut0.finished == true and fut0.failed == false )
714
+ doAssert (fut1.finished == true and fut1.failed == false )
715
+ doAssert (fut2.finished == false )
716
+ await sleepAsync (20 .milliseconds)
717
+ doAssert (fut2.finished == true and fut2.failed == false )
718
+
719
+ # Case 3. Peer disconnected while it wasn't acquired.
720
+ discard pool.addPeerNoWait (peer1, PeerType .Outgoing )
721
+ block :
722
+ var fut0 = pool.joinPeer (peer1)
723
+ # Peer disconnecting
724
+ peer1.future.complete ()
725
+ var fut1 = pool.joinPeer (peer1)
726
+ await sleepAsync (20 .milliseconds)
727
+ var fut2 = pool.joinPeer (peer1)
728
+ doAssert (fut0.finished == true and fut0.failed == false )
729
+ doAssert (fut1.finished == true and fut1.failed == false )
730
+ doAssert (fut2.finished == false )
731
+ await sleepAsync (20 .milliseconds)
732
+ doAssert (fut2.finished == true and fut2.failed == false )
733
+
734
+ # Case 4. Peer deleted when it was acquired.
735
+ discard pool.addPeerNoWait (peer2, PeerType .Incoming )
736
+ block :
737
+ var fut0 = pool.joinPeer (peer2)
738
+ var p = await pool.acquire ()
739
+ doAssert (p.id == " idInc1" )
740
+ var fut1 = pool.joinPeer (peer2)
741
+ discard pool.deletePeer (peer2)
742
+ await sleepAsync (20 .milliseconds)
743
+ var fut2 = pool.joinPeer (peer2)
744
+ doAssert (fut0.finished == false )
745
+ doAssert (fut1.finished == false )
746
+ doAssert (fut2.finished == false )
747
+ pool.release (peer2)
748
+ var fut3 = pool.joinPeer (peer2)
749
+ await sleepAsync (20 .milliseconds)
750
+ var fut4 = pool.joinPeer (peer2)
751
+ doAssert (fut0.finished == true and fut0.failed == false )
752
+ doAssert (fut1.finished == true and fut1.failed == false )
753
+ doAssert (fut2.finished == true and fut2.failed == false )
754
+ doAssert (fut3.finished == true and fut3.failed == false )
755
+ doAssert (fut4.finished == false )
756
+ await sleepAsync (20 .milliseconds)
757
+ doAssert (fut4.finished == true and fut4.failed == false )
758
+
759
+ # Case 5. Peer disconnected while it was acquired.
760
+ discard pool.addPeerNoWait (peer3, PeerType .Outgoing )
761
+ block :
762
+ var fut0 = pool.joinPeer (peer3)
763
+ var p = await pool.acquire ()
764
+ doAssert (p.id == " idOut1" )
765
+ var fut1 = pool.joinPeer (peer3)
766
+ # Peer disconnecting
767
+ peer3.future.complete ()
768
+ await sleepAsync (20 .milliseconds)
769
+ var fut2 = pool.joinPeer (peer3)
770
+ doAssert (fut0.finished == false )
771
+ doAssert (fut1.finished == false )
772
+ doAssert (fut2.finished == false )
773
+ pool.release (peer3)
774
+ var fut3 = pool.joinPeer (peer3)
775
+ await sleepAsync (20 .milliseconds)
776
+ var fut4 = pool.joinPeer (peer3)
777
+ doAssert (fut0.finished == true and fut0.failed == false )
778
+ doAssert (fut1.finished == true and fut1.failed == false )
779
+ doAssert (fut2.finished == true and fut2.failed == false )
780
+ doAssert (fut3.finished == true and fut3.failed == false )
781
+ doAssert (fut4.finished == false )
782
+ await sleepAsync (20 .milliseconds)
783
+ doAssert (fut4.finished == true and fut4.failed == false )
784
+
785
+ result = true
786
+
787
+ check waitFor (testNotifyOnLeave ()) == true
788
+
689
789
timedTest " Space tests" :
690
790
var pool1 = newPeerPool [PeerTest , PeerTestID ](maxPeers = 79 )
691
791
var pool2 = newPeerPool [PeerTest , PeerTestID ](maxPeers = 79 ,
0 commit comments