@@ -2,6 +2,7 @@ package internal_test
22
33import (
44 "context"
5+ "slices"
56 "testing"
67 "time"
78
@@ -22,20 +23,22 @@ func TestProtocolPeerCache(t *testing.T) {
2223 ctx , cancel := context .WithCancel (context .Background ())
2324 defer cancel ()
2425
26+ p1 := protocol .ID ("p1" )
27+ p2 := protocol .ID ("p2" )
28+ p3 := protocol .ID ("p3" )
29+
2530 // create three hosts, and a pcache for the first
31+ // the cache supports all 3
2632 h1 , err := p2pbuilder .DefaultLibP2PHost (unittest .DefaultAddress , unittest .KeyFixture (crypto .ECDSASecp256k1 ))
2733 require .NoError (t , err )
28- pcache , err := internal .NewProtocolPeerCache (zerolog .Nop (), h1 )
34+ pcache , err := internal .NewProtocolPeerCache (zerolog .Nop (), h1 , []protocol. ID { p1 , p2 , p3 } )
2935 require .NoError (t , err )
3036 h2 , err := p2pbuilder .DefaultLibP2PHost (unittest .DefaultAddress , unittest .KeyFixture (crypto .ECDSASecp256k1 ))
3137 require .NoError (t , err )
3238 h3 , err := p2pbuilder .DefaultLibP2PHost (unittest .DefaultAddress , unittest .KeyFixture (crypto .ECDSASecp256k1 ))
3339 require .NoError (t , err )
3440
3541 // register each host on a separate protocol
36- p1 := protocol .ID ("p1" )
37- p2 := protocol .ID ("p2" )
38- p3 := protocol .ID ("p3" )
3942 noopHandler := func (s network.Stream ) {}
4043 h1 .SetStreamHandler (p1 , noopHandler )
4144 h2 .SetStreamHandler (p2 , noopHandler )
@@ -50,8 +53,8 @@ func TestProtocolPeerCache(t *testing.T) {
5053 assert .Eventually (t , func () bool {
5154 peers2 := pcache .GetPeers (p2 )
5255 peers3 := pcache .GetPeers (p3 )
53- _ , ok2 := peers2 [ h2 .ID ()]
54- _ , ok3 := peers3 [ h3 .ID ()]
56+ ok2 := slices . Contains ( peers2 , h2 .ID ())
57+ ok3 := slices . Contains ( peers3 , h3 .ID ())
5558 return len (peers2 ) == 1 && len (peers3 ) == 1 && ok2 && ok3
5659 }, 3 * time .Second , 50 * time .Millisecond )
5760
@@ -64,15 +67,16 @@ func TestProtocolPeerCache(t *testing.T) {
6467 }, 3 * time .Second , 50 * time .Millisecond )
6568
6669 // add support for p4 on h2 and h3
70+ // note: pcache does NOT support p4 and should not cache it
6771 p4 := protocol .ID ("p4" )
6872 h2 .SetStreamHandler (p4 , noopHandler )
6973 h3 .SetStreamHandler (p4 , noopHandler )
7074
71- // check that h1's pcache reflects the change
72- assert .Eventually (t , func () bool {
75+ // check that h1's pcache never contains p4
76+ assert .Never (t , func () bool {
7377 peers4 := pcache .GetPeers (p4 )
74- _ , ok2 := peers4 [ h2 .ID ()]
75- _ , ok3 := peers4 [ h3 .ID ()]
78+ ok2 := slices . Contains ( peers4 , h2 .ID ())
79+ ok3 := slices . Contains ( peers4 , h3 .ID ())
7680 return len (peers4 ) == 2 && ok2 && ok3
77- }, 3 * time .Second , 50 * time .Millisecond )
81+ }, 1 * time .Second , 50 * time .Millisecond )
7882}
0 commit comments