refac(bitswap:testnet) give testnet its own package
Brian Tiger Chow committed
Sep 19, 2014 at 13:15 UTC
a8a7caa088d9f44736c516d4fc1e2b9791eeb114
7 files changed
+31
-28
exchange/bitswap/bitswap.go
+2
-11
@@ -17,18 +17,9 @@ import (
17
u "github.com/jbenet/go-ipfs/util"
18
)
19
20
-// TODO rename -> Router?
21
-type Routing interface {
22
- // FindProvidersAsync returns a channel of providers for the given key
23
- FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
24
-
25
- // Provide provides the key to the network
26
- Provide(key u.Key) error
27
-}
28
-
20
// NetMessageSession initializes a BitSwap session that communicates over the
21
// provided NetMessage service
31
-func NetMessageSession(parent context.Context, s bsnet.NetMessageService, p *peer.Peer, d ds.Datastore, directory Routing) exchange.Interface {
22
+func NetMessageSession(parent context.Context, s bsnet.NetMessageService, p *peer.Peer, d ds.Datastore, directory bsnet.Routing) exchange.Interface {
23
24
networkAdapter := bsnet.NetMessageAdapter(s, nil)
25
bs := &bitswap{
@@ -54,7 +45,7 @@ type bitswap struct {
45
blockstore blockstore.Blockstore
46
47
// routing interface for communication
57
- routing Routing
48
+ routing bsnet.Routing
49
50
notifications notifications.PubSub
51
exchange/bitswap/bitswap_test.go
+8
-7
@@ -11,14 +11,15 @@ import (
11
exchange "github.com/jbenet/go-ipfs/exchange"
12
notifications "github.com/jbenet/go-ipfs/exchange/bitswap/notifications"
13
strategy "github.com/jbenet/go-ipfs/exchange/bitswap/strategy"
14
+ testnet "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
15
peer "github.com/jbenet/go-ipfs/peer"
16
testutil "github.com/jbenet/go-ipfs/util/testutil"
17
)
18
19
func TestGetBlockTimeout(t *testing.T) {
20
20
- net := LocalNetwork()
21
- rs := newRoutingServer()
21
+ net := testnet.VirtualNetwork()
22
+ rs := testnet.VirtualRoutingServer()
23
ipfs := session(net, rs, []byte("peer id"))
24
ctx, _ := context.WithTimeout(context.Background(), time.Nanosecond)
25
block := testutil.NewBlockOrFail(t, "block")
@@ -31,8 +32,8 @@ func TestGetBlockTimeout(t *testing.T) {
32
33
func TestProviderForKeyButNetworkCannotFind(t *testing.T) {
34
34
- net := LocalNetwork()
35
- rs := newRoutingServer()
35
+ net := testnet.VirtualNetwork()
36
+ rs := testnet.VirtualRoutingServer()
37
38
block := testutil.NewBlockOrFail(t, "block")
39
rs.Announce(&peer.Peer{}, block.Key()) // but not on network
@@ -52,8 +53,8 @@ func TestProviderForKeyButNetworkCannotFind(t *testing.T) {
53
func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) {
54
t.Skip("Failing. Work in progress")
55
55
- net := LocalNetwork()
56
- rs := newRoutingServer()
56
+ net := testnet.VirtualNetwork()
57
+ rs := testnet.VirtualRoutingServer()
58
block := testutil.NewBlockOrFail(t, "block")
59
60
hasBlock := session(net, rs, []byte("hasBlock"))
@@ -78,7 +79,7 @@ type ipfs struct {
79
blockstore bstore.Blockstore
80
}
81
81
-func session(net Network, rs RoutingServer, id peer.ID) ipfs {
82
+func session(net testnet.Network, rs testnet.RoutingServer, id peer.ID) ipfs {
83
p := &peer.Peer{}
84
85
adapter := net.Adapter(p)
exchange/bitswap/network/interface.go
+10
@@ -7,6 +7,7 @@ import (
7
bsmsg "github.com/jbenet/go-ipfs/exchange/bitswap/message"
8
netmsg "github.com/jbenet/go-ipfs/net/message"
9
peer "github.com/jbenet/go-ipfs/peer"
10
+ u "github.com/jbenet/go-ipfs/util"
11
)
12
13
// Adapter provides network connectivity for BitSwap sessions
@@ -41,3 +42,12 @@ type NetMessageService interface {
42
SendMessage(ctx context.Context, m netmsg.NetMessage) error
43
SetHandler(netservice.Handler)
44
}
45
+
46
+// TODO rename -> Router?
47
+type Routing interface {
48
+ // FindProvidersAsync returns a channel of providers for the given key
49
+ FindProvidersAsync(context.Context, u.Key, int) <-chan *peer.Peer
50
+
51
+ // Provide provides the key to the network
52
+ Provide(key u.Key) error
53
+}
exchange/bitswap/testnet/network.go
renamed
+1
-1
@@ -30,7 +30,7 @@ type Network interface {
30
31
// network impl
32
33
-func LocalNetwork() Network {
33
+func VirtualNetwork() Network {
34
return &network{
35
clients: make(map[util.Key]bsnet.Receiver),
36
}
exchange/bitswap/testnet/network_test.go
renamed
+2
-2
@@ -12,7 +12,7 @@ import (
12
)
13
14
func TestSendRequestToCooperativePeer(t *testing.T) {
15
- net := LocalNetwork()
15
+ net := VirtualNetwork()
16
17
idOfRecipient := []byte("recipient")
18
@@ -59,7 +59,7 @@ func TestSendRequestToCooperativePeer(t *testing.T) {
59
}
60
61
func TestSendMessageAsyncButWaitForResponse(t *testing.T) {
62
- net := LocalNetwork()
62
+ net := VirtualNetwork()
63
idOfResponder := []byte("responder")
64
waiter := net.Adapter(&peer.Peer{ID: []byte("waiter")})
65
responder := net.Adapter(&peer.Peer{ID: idOfResponder})
exchange/bitswap/testnet/routing.go
renamed
+4
-3
@@ -5,6 +5,7 @@ import (
5
"sync"
6
7
context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
8
+ bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network"
9
peer "github.com/jbenet/go-ipfs/peer"
10
u "github.com/jbenet/go-ipfs/util"
11
)
@@ -18,10 +19,10 @@ type RoutingServer interface {
19
20
// TODO
21
// Returns a Routing instance configured to query this hash table
21
- Client(*peer.Peer) Routing
22
+ Client(*peer.Peer) bsnet.Routing
23
}
24
24
-func newRoutingServer() RoutingServer {
25
+func VirtualRoutingServer() RoutingServer {
26
return &hashTable{
27
m: make(map[u.Key]map[*peer.Peer]bool),
28
}
@@ -61,7 +62,7 @@ func (rs *hashTable) Providers(k u.Key) []*peer.Peer {
62
}
63
64
// TODO
64
-func (rs *hashTable) Client(p *peer.Peer) Routing {
65
+func (rs *hashTable) Client(p *peer.Peer) bsnet.Routing {
66
return &routingClient{
67
peer: p,
68
hashTable: rs,
exchange/bitswap/testnet/routing_test.go
renamed
+4
-4
@@ -29,7 +29,7 @@ func TestSetAndGet(t *testing.T) {
29
ID: pid,
30
}
31
k := u.Key("42")
32
- rs := newRoutingServer()
32
+ rs := VirtualRoutingServer()
33
err := rs.Announce(p, k)
34
if err != nil {
35
t.Fatal(err)
@@ -50,7 +50,7 @@ func TestClientFindProviders(t *testing.T) {
50
peer := &peer.Peer{
51
ID: []byte("42"),
52
}
53
- rs := newRoutingServer()
53
+ rs := VirtualRoutingServer()
54
client := rs.Client(peer)
55
k := u.Key("hello")
56
err := client.Provide(k)
@@ -83,7 +83,7 @@ func TestClientFindProviders(t *testing.T) {
83
}
84
85
func TestClientOverMax(t *testing.T) {
86
- rs := newRoutingServer()
86
+ rs := VirtualRoutingServer()
87
k := u.Key("hello")
88
numProvidersForHelloKey := 100
89
for i := 0; i < numProvidersForHelloKey; i++ {
@@ -115,7 +115,7 @@ func TestClientOverMax(t *testing.T) {
115
116
// TODO does dht ensure won't receive self as a provider? probably not.
117
func TestCanceledContext(t *testing.T) {
118
- rs := newRoutingServer()
118
+ rs := VirtualRoutingServer()
119
k := u.Key("hello")
120
121
t.Log("async'ly announce infinite stream of providers for key")