mirror of
https://github.com/ipfs/kubo.git
synced 2026-03-07 09:17:49 +08:00
routing/mock now uses peer.ID and peer.PeerInfo
This commit is contained in:
parent
7aca07e2be
commit
74f530e79b
@ -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) {
|
||||
|
||||
@ -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,
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user