@@ -19,6 +19,7 @@ import (
1919 circuitv2_proto "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/proto"
2020
2121 ma "github.com/multiformats/go-multiaddr"
22+ "github.com/stretchr/testify/assert"
2223 "github.com/stretchr/testify/require"
2324)
2425
@@ -524,13 +525,14 @@ func TestNoBusyLoop0MinInterval(t *testing.T) {
524525}
525526func TestAutoRelayAddrsEvent (t * testing.T ) {
526527 cl := newMockClock ()
527- r1 , r2 := newRelay (t ), newRelay (t )
528+ relays := []host. Host { newRelay (t ), newRelay (t ), newRelay ( t ), newRelay ( t ), newRelay ( t )}
528529 t .Cleanup (func () {
529- r1 .Close ()
530- r2 .Close ()
530+ for _ , r := range relays {
531+ r .Close ()
532+ }
531533 })
532534
533- relayFromP2PAddr := func (a ma.Multiaddr ) peer.ID {
535+ relayIDFromP2PAddr := func (a ma.Multiaddr ) peer.ID {
534536 r , c := ma .SplitLast (a )
535537 if c .Protocol ().Code != ma .P_CIRCUIT {
536538 return ""
@@ -541,47 +543,61 @@ func TestAutoRelayAddrsEvent(t *testing.T) {
541543 return ""
542544 }
543545
544- checkPeersExist := func (addrs []ma.Multiaddr , peers ... peer.ID ) bool {
546+ checkAddrsContainsPeersAsRelay := func (addrs []ma.Multiaddr , peers ... peer.ID ) bool {
545547 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 }) {
547549 return false
548550 }
549551 }
550552 return true
551553 }
552- peerChan := make (chan peer.AddrInfo , 3 )
554+ peerChan := make (chan peer.AddrInfo , 5 )
553555 h := newPrivateNode (t ,
554556 func (context.Context , int ) <- chan peer.AddrInfo {
555557 return peerChan
556558 },
557559 autorelay .WithClock (cl ),
558560 autorelay .WithMinCandidates (1 ),
559561 autorelay .WithMaxCandidates (10 ),
560- autorelay .WithNumRelays (3 ),
562+ autorelay .WithNumRelays (5 ),
561563 autorelay .WithBootDelay (1 * time .Second ),
562564 autorelay .WithMinInterval (time .Hour ),
563565 )
564566 defer h .Close ()
565567
566- sub , err := h .EventBus ().Subscribe (new (event.EvtAutoRelayAddrs ))
568+ sub , err := h .EventBus ().Subscribe (new (event.EvtAutoRelayAddrsUpdated ))
567569 require .NoError (t , err )
568570
569- peerChan <- peer.AddrInfo {ID : r1 .ID (), Addrs : r1 .Addrs ()}
571+ peerChan <- peer.AddrInfo {ID : relays [ 0 ] .ID (), Addrs : relays [ 0 ] .Addrs ()}
570572 cl .AdvanceBy (time .Second )
571573
572- require .Eventually (t , func () bool {
574+ require .EventuallyWithT (t , func (collect * assert. CollectT ) {
573575 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 )
576579 }
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 )
579582 }
580- return true
581583 }, 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 ) {
584588 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+ }
586597 }, 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+ }
587603}
0 commit comments