@@ -19,6 +19,7 @@ import (
19
19
circuitv2_proto "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/proto"
20
20
21
21
ma "github.com/multiformats/go-multiaddr"
22
+ "github.com/stretchr/testify/assert"
22
23
"github.com/stretchr/testify/require"
23
24
)
24
25
@@ -524,13 +525,14 @@ func TestNoBusyLoop0MinInterval(t *testing.T) {
524
525
}
525
526
func TestAutoRelayAddrsEvent (t * testing.T ) {
526
527
cl := newMockClock ()
527
- r1 , r2 := newRelay (t ), newRelay (t )
528
+ relays := []host. Host { newRelay (t ), newRelay (t ), newRelay ( t ), newRelay ( t ), newRelay ( t )}
528
529
t .Cleanup (func () {
529
- r1 .Close ()
530
- r2 .Close ()
530
+ for _ , r := range relays {
531
+ r .Close ()
532
+ }
531
533
})
532
534
533
- relayFromP2PAddr := func (a ma.Multiaddr ) peer.ID {
535
+ relayIDFromP2PAddr := func (a ma.Multiaddr ) peer.ID {
534
536
r , c := ma .SplitLast (a )
535
537
if c .Protocol ().Code != ma .P_CIRCUIT {
536
538
return ""
@@ -541,47 +543,61 @@ func TestAutoRelayAddrsEvent(t *testing.T) {
541
543
return ""
542
544
}
543
545
544
- checkPeersExist := func (addrs []ma.Multiaddr , peers ... peer.ID ) bool {
546
+ checkAddrsContainsPeersAsRelay := func (addrs []ma.Multiaddr , peers ... peer.ID ) bool {
545
547
for _ , p := range peers {
546
- if ! slices .ContainsFunc (addrs , func (a ma.Multiaddr ) bool { return relayFromP2PAddr (a ) == p }) {
548
+ if ! slices .ContainsFunc (addrs , func (a ma.Multiaddr ) bool { return relayIDFromP2PAddr (a ) == p }) {
547
549
return false
548
550
}
549
551
}
550
552
return true
551
553
}
552
- peerChan := make (chan peer.AddrInfo , 3 )
554
+ peerChan := make (chan peer.AddrInfo , 5 )
553
555
h := newPrivateNode (t ,
554
556
func (context.Context , int ) <- chan peer.AddrInfo {
555
557
return peerChan
556
558
},
557
559
autorelay .WithClock (cl ),
558
560
autorelay .WithMinCandidates (1 ),
559
561
autorelay .WithMaxCandidates (10 ),
560
- autorelay .WithNumRelays (3 ),
562
+ autorelay .WithNumRelays (5 ),
561
563
autorelay .WithBootDelay (1 * time .Second ),
562
564
autorelay .WithMinInterval (time .Hour ),
563
565
)
564
566
defer h .Close ()
565
567
566
- sub , err := h .EventBus ().Subscribe (new (event.EvtAutoRelayAddrs ))
568
+ sub , err := h .EventBus ().Subscribe (new (event.EvtAutoRelayAddrsUpdated ))
567
569
require .NoError (t , err )
568
570
569
- peerChan <- peer.AddrInfo {ID : r1 .ID (), Addrs : r1 .Addrs ()}
571
+ peerChan <- peer.AddrInfo {ID : relays [ 0 ] .ID (), Addrs : relays [ 0 ] .Addrs ()}
570
572
cl .AdvanceBy (time .Second )
571
573
572
- require .Eventually (t , func () bool {
574
+ require .EventuallyWithT (t , func (collect * assert. CollectT ) {
573
575
e := <- sub .Out ()
574
- if ! checkPeersExist (e .(event.EvtAutoRelayAddrs ).RelayAddrs , r1 .ID ()) {
575
- return false
576
+ evt := e .(event.EvtAutoRelayAddrsUpdated )
577
+ if ! checkAddrsContainsPeersAsRelay (evt .RelayAddrs , relays [0 ].ID ()) {
578
+ collect .Errorf ("expected %s to be in %v" , relays [0 ].ID (), evt .RelayAddrs )
576
579
}
577
- if checkPeersExist ( e .(event. EvtAutoRelayAddrs ). RelayAddrs , r2 .ID ()) {
578
- return false
580
+ if checkAddrsContainsPeersAsRelay ( evt . RelayAddrs , relays [ 1 ] .ID ()) {
581
+ collect . Errorf ( "expected %s to not be in %v" , relays [ 1 ]. ID (), evt . RelayAddrs )
579
582
}
580
- return true
581
583
}, 5 * time .Second , 50 * time .Millisecond )
582
- peerChan <- peer.AddrInfo {ID : r2 .ID (), Addrs : r2 .Addrs ()}
583
- require .Eventually (t , func () bool {
584
+ for _ , r := range relays [1 :] {
585
+ peerChan <- peer.AddrInfo {ID : r .ID (), Addrs : r .Addrs ()}
586
+ }
587
+ require .EventuallyWithT (t , func (c * assert.CollectT ) {
584
588
e := <- sub .Out ()
585
- return checkPeersExist (e .(event.EvtAutoRelayAddrs ).RelayAddrs , r1 .ID (), r2 .ID ())
589
+ evt := e .(event.EvtAutoRelayAddrsUpdated )
590
+ relayIds := []peer.ID {}
591
+ for _ , r := range relays [1 :] {
592
+ relayIds = append (relayIds , r .ID ())
593
+ }
594
+ if ! checkAddrsContainsPeersAsRelay (evt .RelayAddrs , relayIds ... ) {
595
+ c .Errorf ("expected %s to be in %v" , relayIds , evt .RelayAddrs )
596
+ }
586
597
}, 5 * time .Second , 50 * time .Millisecond )
598
+ select {
599
+ case e := <- sub .Out ():
600
+ t .Fatal ("expected no more events after all reservations obtained; got: " , e .(event.EvtAutoRelayAddrsUpdated ))
601
+ case <- time .After (1 * time .Second ):
602
+ }
587
603
}
0 commit comments