routing/mock now uses peer.ID and peer.PeerInfo

This commit is contained in:
Juan Batiz-Benet 2014-12-20 13:51:14 -08:00
parent 7aca07e2be
commit 74f530e79b
4 changed files with 42 additions and 44 deletions

View File

@ -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) {

View File

@ -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,
}
}

View File

@ -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)
}

View File

@ -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(),