From 74f530e79b19ffdf5e32fff4f5439ec25de36217 Mon Sep 17 00:00:00 2001 From: Juan Batiz-Benet Date: Sat, 20 Dec 2014 13:51:14 -0800 Subject: [PATCH] routing/mock now uses peer.ID and peer.PeerInfo --- routing/mock/client.go | 12 ++++----- routing/mock/interface.go | 8 +++--- routing/mock/mockrouting_test.go | 44 +++++++++++++++----------------- routing/mock/server.go | 22 ++++++++-------- 4 files changed, 42 insertions(+), 44 deletions(-) diff --git a/routing/mock/client.go b/routing/mock/client.go index 444a4b960..9be43b653 100644 --- a/routing/mock/client.go +++ b/routing/mock/client.go @@ -15,7 +15,7 @@ var log = u.Logger("mockrouter") type client struct { datastore ds.Datastore server server - peer peer.Peer + peer peer.PeerInfo } // FIXME(brian): is this method meant to simulate putting a value into the network? @@ -40,17 +40,17 @@ func (c *client) GetValue(ctx context.Context, key u.Key) ([]byte, error) { return data, nil } -func (c *client) FindProviders(ctx context.Context, key u.Key) ([]peer.Peer, error) { +func (c *client) FindProviders(ctx context.Context, key u.Key) ([]peer.PeerInfo, error) { return c.server.Providers(key), nil } -func (c *client) FindPeer(ctx context.Context, pid peer.ID) (peer.Peer, error) { +func (c *client) FindPeer(ctx context.Context, pid peer.ID) (peer.PeerInfo, error) { log.Debugf("FindPeer: %s", pid) - return nil, nil + return peer.PeerInfo{}, nil } -func (c *client) FindProvidersAsync(ctx context.Context, k u.Key, max int) <-chan peer.Peer { - out := make(chan peer.Peer) +func (c *client) FindProvidersAsync(ctx context.Context, k u.Key, max int) <-chan peer.PeerInfo { + out := make(chan peer.PeerInfo) go func() { defer close(out) for i, p := range c.server.Providers(k) { diff --git a/routing/mock/interface.go b/routing/mock/interface.go index 639736292..abb869eb4 100644 --- a/routing/mock/interface.go +++ b/routing/mock/interface.go @@ -15,13 +15,13 @@ import ( // Server provides mockrouting Clients type Server interface { - Client(p peer.Peer) Client - ClientWithDatastore(peer.Peer, ds.Datastore) Client + Client(p peer.PeerInfo) Client + ClientWithDatastore(peer.PeerInfo, ds.Datastore) Client } // Client implements IpfsRouting type Client interface { - FindProviders(context.Context, u.Key) ([]peer.Peer, error) + FindProviders(context.Context, u.Key) ([]peer.PeerInfo, error) routing.IpfsRouting } @@ -37,7 +37,7 @@ func NewServer() Server { // NewServerWithDelay returns a mockrouting Server with a delay! func NewServerWithDelay(conf DelayConfig) Server { return &s{ - providers: make(map[u.Key]map[u.Key]providerRecord), + providers: make(map[u.Key]map[peer.ID]providerRecord), delayConf: conf, } } diff --git a/routing/mock/mockrouting_test.go b/routing/mock/mockrouting_test.go index 44b1b52bd..541e5e580 100644 --- a/routing/mock/mockrouting_test.go +++ b/routing/mock/mockrouting_test.go @@ -1,7 +1,6 @@ package mockrouting import ( - "bytes" "testing" "time" @@ -9,17 +8,16 @@ import ( peer "github.com/jbenet/go-ipfs/peer" u "github.com/jbenet/go-ipfs/util" delay "github.com/jbenet/go-ipfs/util/delay" - testutil "github.com/jbenet/go-ipfs/util/testutil" ) func TestKeyNotFound(t *testing.T) { - var peer = testutil.NewPeerWithID(peer.ID([]byte("the peer id"))) + var pi = peer.PeerInfo{ID: peer.ID("the peer id")} var key = u.Key("mock key") var ctx = context.Background() rs := NewServer() - providers := rs.Client(peer).FindProvidersAsync(ctx, key, 10) + providers := rs.Client(pi).FindProvidersAsync(ctx, key, 10) _, ok := <-providers if ok { t.Fatal("should be closed") @@ -27,9 +25,9 @@ func TestKeyNotFound(t *testing.T) { } func TestClientFindProviders(t *testing.T) { - peer := testutil.NewPeerWithIDString("42") + pi := peer.PeerInfo{ID: peer.ID("42")} rs := NewServer() - client := rs.Client(peer) + client := rs.Client(pi) k := u.Key("hello") err := client.Provide(context.Background(), k) @@ -41,14 +39,14 @@ func TestClientFindProviders(t *testing.T) { time.Sleep(time.Millisecond * 300) max := 100 - providersFromHashTable, err := rs.Client(peer).FindProviders(context.Background(), k) + providersFromHashTable, err := rs.Client(pi).FindProviders(context.Background(), k) if err != nil { t.Fatal(err) } isInHT := false - for _, p := range providersFromHashTable { - if bytes.Equal(p.ID(), peer.ID()) { + for _, pi := range providersFromHashTable { + if pi.ID == pi.ID { isInHT = true } } @@ -57,8 +55,8 @@ func TestClientFindProviders(t *testing.T) { } providersFromClient := client.FindProvidersAsync(context.Background(), u.Key("hello"), max) isInClient := false - for p := range providersFromClient { - if bytes.Equal(p.ID(), peer.ID()) { + for pi := range providersFromClient { + if pi.ID == pi.ID { isInClient = true } } @@ -72,16 +70,16 @@ func TestClientOverMax(t *testing.T) { k := u.Key("hello") numProvidersForHelloKey := 100 for i := 0; i < numProvidersForHelloKey; i++ { - peer := testutil.NewPeerWithIDString(string(i)) - err := rs.Client(peer).Provide(context.Background(), k) + pi := peer.PeerInfo{ID: peer.ID(i)} + err := rs.Client(pi).Provide(context.Background(), k) if err != nil { t.Fatal(err) } } max := 10 - peer := testutil.NewPeerWithIDString("TODO") - client := rs.Client(peer) + pi := peer.PeerInfo{ID: peer.ID("TODO")} + client := rs.Client(pi) providersFromClient := client.FindProvidersAsync(context.Background(), k, max) i := 0 @@ -102,8 +100,8 @@ func TestCanceledContext(t *testing.T) { i := 0 go func() { // infinite stream for { - peer := testutil.NewPeerWithIDString(string(i)) - err := rs.Client(peer).Provide(context.Background(), k) + pi := peer.PeerInfo{ID: peer.ID(i)} + err := rs.Client(pi).Provide(context.Background(), k) if err != nil { t.Fatal(err) } @@ -111,7 +109,7 @@ func TestCanceledContext(t *testing.T) { } }() - local := testutil.NewPeerWithIDString("peer id doesn't matter") + local := peer.PeerInfo{ID: peer.ID("peer id doesn't matter")} client := rs.Client(local) t.Log("warning: max is finite so this test is non-deterministic") @@ -137,7 +135,7 @@ func TestCanceledContext(t *testing.T) { func TestValidAfter(t *testing.T) { - var p = testutil.NewPeerWithID(peer.ID([]byte("the peer id"))) + var pi = peer.PeerInfo{ID: peer.ID("the peer id")} var key = u.Key("mock key") var ctx = context.Background() conf := DelayConfig{ @@ -147,10 +145,10 @@ func TestValidAfter(t *testing.T) { rs := NewServerWithDelay(conf) - rs.Client(p).Provide(ctx, key) + rs.Client(pi).Provide(ctx, key) - var providers []peer.Peer - providers, err := rs.Client(p).FindProviders(ctx, key) + var providers []peer.PeerInfo + providers, err := rs.Client(pi).FindProviders(ctx, key) if err != nil { t.Fatal(err) } @@ -159,7 +157,7 @@ func TestValidAfter(t *testing.T) { } conf.ValueVisibility.Set(0) - providers, err = rs.Client(p).FindProviders(ctx, key) + providers, err = rs.Client(pi).FindProviders(ctx, key) if err != nil { t.Fatal(err) } diff --git a/routing/mock/server.go b/routing/mock/server.go index e176c7aeb..31ae4b730 100644 --- a/routing/mock/server.go +++ b/routing/mock/server.go @@ -12,8 +12,8 @@ import ( // server is the mockrouting.Client's private interface to the routing server type server interface { - Announce(peer.Peer, u.Key) error - Providers(u.Key) []peer.Peer + Announce(peer.PeerInfo, u.Key) error + Providers(u.Key) []peer.PeerInfo Server } @@ -23,36 +23,36 @@ type s struct { delayConf DelayConfig lock sync.RWMutex - providers map[u.Key]map[u.Key]providerRecord + providers map[u.Key]map[peer.ID]providerRecord } type providerRecord struct { - Peer peer.Peer + Peer peer.PeerInfo Created time.Time } -func (rs *s) Announce(p peer.Peer, k u.Key) error { +func (rs *s) Announce(p peer.PeerInfo, k u.Key) error { rs.lock.Lock() defer rs.lock.Unlock() _, ok := rs.providers[k] if !ok { - rs.providers[k] = make(map[u.Key]providerRecord) + rs.providers[k] = make(map[peer.ID]providerRecord) } - rs.providers[k][p.Key()] = providerRecord{ + rs.providers[k][p.ID] = providerRecord{ Created: time.Now(), Peer: p, } return nil } -func (rs *s) Providers(k u.Key) []peer.Peer { +func (rs *s) Providers(k u.Key) []peer.PeerInfo { rs.delayConf.Query.Wait() // before locking rs.lock.RLock() defer rs.lock.RUnlock() - var ret []peer.Peer + var ret []peer.PeerInfo records, ok := rs.providers[k] if !ok { return ret @@ -71,11 +71,11 @@ func (rs *s) Providers(k u.Key) []peer.Peer { return ret } -func (rs *s) Client(p peer.Peer) Client { +func (rs *s) Client(p peer.PeerInfo) Client { return rs.ClientWithDatastore(p, ds.NewMapDatastore()) } -func (rs *s) ClientWithDatastore(p peer.Peer, datastore ds.Datastore) Client { +func (rs *s) ClientWithDatastore(p peer.PeerInfo, datastore ds.Datastore) Client { return &client{ peer: p, datastore: ds.NewMapDatastore(),