diff --git a/go.mod b/go.mod index 764603105b..65ba88448b 100644 --- a/go.mod +++ b/go.mod @@ -43,6 +43,7 @@ require ( github.com/libp2p/zeroconf/v2 v2.1.1 github.com/multiformats/go-multiaddr v0.5.0 github.com/multiformats/go-multiaddr-dns v0.3.1 + github.com/multiformats/go-multihash v0.0.15 github.com/multiformats/go-multistream v0.2.2 github.com/multiformats/go-varint v0.0.6 github.com/prometheus/common v0.30.0 // indirect diff --git a/p2p/discovery/backoff/backoffcache_test.go b/p2p/discovery/backoff/backoffcache_test.go index 96dc9b4c30..d358658b46 100644 --- a/p2p/discovery/backoff/backoffcache_test.go +++ b/p2p/discovery/backoff/backoffcache_test.go @@ -7,9 +7,12 @@ import ( "testing" "time" - bhost "github.com/libp2p/go-libp2p-blankhost" + "github.com/libp2p/go-libp2p/p2p/discovery/mocks" + "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/peer" + + bhost "github.com/libp2p/go-libp2p-blankhost" swarmt "github.com/libp2p/go-libp2p-swarm/testing" ) @@ -66,14 +69,14 @@ func TestBackoffDiscoverySingleBackoff(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - discServer := newDiscoveryServer() + discServer := mocks.NewDiscoveryServer() h1 := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h1.Close() h2 := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h2.Close() - d1 := &mockDiscoveryClient{h1, discServer} - d2 := &mockDiscoveryClient{h2, discServer} + d1 := mocks.NewDiscoveryClient(h1, discServer) + d2 := mocks.NewDiscoveryClient(h2, discServer) bkf := NewExponentialBackoff(time.Millisecond*100, time.Second*10, NoJitter, time.Millisecond*100, 2.5, 0, rand.NewSource(0)) @@ -108,14 +111,14 @@ func TestBackoffDiscoveryMultipleBackoff(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - discServer := newDiscoveryServer() + discServer := mocks.NewDiscoveryServer() h1 := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h1.Close() h2 := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h2.Close() - d1 := &mockDiscoveryClient{h1, discServer} - d2 := &mockDiscoveryClient{h2, discServer} + d1 := mocks.NewDiscoveryClient(h1, discServer) + d2 := mocks.NewDiscoveryClient(h2, discServer) // Startup delay is 0ms. First backoff after finding data is 100ms, second backoff is 250ms. bkf := NewExponentialBackoff( @@ -164,7 +167,7 @@ func TestBackoffDiscoverySimultaneousQuery(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - discServer := newDiscoveryServer() + discServer := mocks.NewDiscoveryServer() // Testing with n larger than most internal buffer sizes (32) n := 40 @@ -173,7 +176,7 @@ func TestBackoffDiscoverySimultaneousQuery(t *testing.T) { for i := 0; i < n; i++ { h := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h.Close() - advertisers[i] = &mockDiscoveryClient{h, discServer} + advertisers[i] = mocks.NewDiscoveryClient(h, discServer) } d1 := &delayedDiscovery{advertisers[0], time.Millisecond * 10} @@ -223,7 +226,7 @@ func TestBackoffDiscoveryCacheCapacity(t *testing.T) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - discServer := newDiscoveryServer() + discServer := mocks.NewDiscoveryServer() // Testing with n larger than most internal buffer sizes (32) n := 40 @@ -232,11 +235,11 @@ func TestBackoffDiscoveryCacheCapacity(t *testing.T) { for i := 0; i < n; i++ { h := bhost.NewBlankHost(swarmt.GenSwarm(t)) defer h.Close() - advertisers[i] = &mockDiscoveryClient{h, discServer} + advertisers[i] = mocks.NewDiscoveryClient(h, discServer) } h1 := bhost.NewBlankHost(swarmt.GenSwarm(t)) - d1 := &mockDiscoveryClient{h1, discServer} + d1 := mocks.NewDiscoveryClient(h1, discServer) const discoveryInterval = time.Millisecond * 100 diff --git a/p2p/discovery/backoff/mocks_test.go b/p2p/discovery/mocks/mocks.go similarity index 73% rename from p2p/discovery/backoff/mocks_test.go rename to p2p/discovery/mocks/mocks.go index e772be64c9..1cf97dd60b 100644 --- a/p2p/discovery/backoff/mocks_test.go +++ b/p2p/discovery/mocks/mocks.go @@ -1,4 +1,4 @@ -package backoff +package mocks import ( "context" @@ -10,7 +10,7 @@ import ( "github.com/libp2p/go-libp2p-core/peer" ) -type mockDiscoveryServer struct { +type MockDiscoveryServer struct { mx sync.Mutex db map[string]map[peer.ID]*discoveryRegistration } @@ -20,13 +20,13 @@ type discoveryRegistration struct { expiration time.Time } -func newDiscoveryServer() *mockDiscoveryServer { - return &mockDiscoveryServer{ +func NewDiscoveryServer() *MockDiscoveryServer { + return &MockDiscoveryServer{ db: make(map[string]map[peer.ID]*discoveryRegistration), } } -func (s *mockDiscoveryServer) Advertise(ns string, info peer.AddrInfo, ttl time.Duration) (time.Duration, error) { +func (s *MockDiscoveryServer) Advertise(ns string, info peer.AddrInfo, ttl time.Duration) (time.Duration, error) { s.mx.Lock() defer s.mx.Unlock() @@ -39,7 +39,7 @@ func (s *mockDiscoveryServer) Advertise(ns string, info peer.AddrInfo, ttl time. return ttl, nil } -func (s *mockDiscoveryServer) FindPeers(ns string, limit int) (<-chan peer.AddrInfo, error) { +func (s *MockDiscoveryServer) FindPeers(ns string, limit int) (<-chan peer.AddrInfo, error) { s.mx.Lock() defer s.mx.Unlock() @@ -75,12 +75,19 @@ func (s *mockDiscoveryServer) FindPeers(ns string, limit int) (<-chan peer.AddrI return ch, nil } -type mockDiscoveryClient struct { +type MockDiscoveryClient struct { host host.Host - server *mockDiscoveryServer + server *MockDiscoveryServer } -func (d *mockDiscoveryClient) Advertise(ctx context.Context, ns string, opts ...discovery.Option) (time.Duration, error) { +func NewDiscoveryClient(h host.Host, server *MockDiscoveryServer) *MockDiscoveryClient { + return &MockDiscoveryClient{ + host: h, + server: server, + } +} + +func (d *MockDiscoveryClient) Advertise(ctx context.Context, ns string, opts ...discovery.Option) (time.Duration, error) { var options discovery.Options err := options.Apply(opts...) if err != nil { @@ -90,7 +97,7 @@ func (d *mockDiscoveryClient) Advertise(ctx context.Context, ns string, opts ... return d.server.Advertise(ns, *host.InfoFromHost(d.host), options.Ttl) } -func (d *mockDiscoveryClient) FindPeers(ctx context.Context, ns string, opts ...discovery.Option) (<-chan peer.AddrInfo, error) { +func (d *MockDiscoveryClient) FindPeers(ctx context.Context, ns string, opts ...discovery.Option) (<-chan peer.AddrInfo, error) { var options discovery.Options err := options.Apply(opts...) if err != nil { diff --git a/p2p/discovery/routing/routing.go b/p2p/discovery/routing/routing.go index a05071da1c..ed010617ce 100644 --- a/p2p/discovery/routing/routing.go +++ b/p2p/discovery/routing/routing.go @@ -1,15 +1,14 @@ -package discovery +package routing import ( "context" - "github.com/libp2p/go-libp2p-core/discovery" "time" - "github.com/ipfs/go-cid" - + "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/routing" + "github.com/ipfs/go-cid" mh "github.com/multiformats/go-multihash" ) diff --git a/p2p/discovery/routing/routing_test.go b/p2p/discovery/routing/routing_test.go index 1dbf553ebc..9ced12514a 100644 --- a/p2p/discovery/routing/routing_test.go +++ b/p2p/discovery/routing/routing_test.go @@ -1,4 +1,4 @@ -package discovery +package routing import ( "context" @@ -6,6 +6,10 @@ import ( "testing" "time" + "github.com/libp2p/go-libp2p/p2p/discovery/mocks" + + "github.com/libp2p/go-libp2p/p2p/discovery/util" + "github.com/ipfs/go-cid" bhost "github.com/libp2p/go-libp2p-blankhost" "github.com/libp2p/go-libp2p-core/discovery" @@ -90,7 +94,7 @@ func TestRoutingDiscovery(t *testing.T) { t.Fatal(err) } - pis, err := FindPeers(ctx, d2, "/test", discovery.Limit(20)) + pis, err := util.FindPeers(ctx, d2, "/test", discovery.Limit(20)) if err != nil { t.Fatal(err) } @@ -112,9 +116,9 @@ func TestDiscoveryRouting(t *testing.T) { h1 := bhost.NewBlankHost(swarmt.GenSwarm(t)) h2 := bhost.NewBlankHost(swarmt.GenSwarm(t)) - dserver := newDiscoveryServer() - d1 := &mockDiscoveryClient{h1, dserver} - d2 := &mockDiscoveryClient{h2, dserver} + dserver := mocks.NewDiscoveryServer() + d1 := mocks.NewDiscoveryClient(h1, dserver) + d2 := mocks.NewDiscoveryClient(h2, dserver) r1 := NewDiscoveryRouting(d1, discovery.TTL(time.Hour)) r2 := NewDiscoveryRouting(d2, discovery.TTL(time.Hour))