feat(bs/testnet) use delay in virtual network
License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>
Brian Tiger Chow committed
Dec 12, 2014 at 22:28 UTC
3c44ad1fd19e582db97a04357c80df1b57a7a086
4 files changed
+20
-12
blockservice/mock.go
+3
-2
@@ -5,12 +5,13 @@ import (
5
6
bitswap "github.com/jbenet/go-ipfs/exchange/bitswap"
7
tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
8
- "github.com/jbenet/go-ipfs/routing/mock"
8
+ mock "github.com/jbenet/go-ipfs/routing/mock"
9
+ delay "github.com/jbenet/go-ipfs/util/delay"
10
)
11
12
// Mocks returns |n| connected mock Blockservices
13
func Mocks(t *testing.T, n int) []*BlockService {
13
- net := tn.VirtualNetwork()
14
+ net := tn.VirtualNetwork(delay.Fixed(0))
15
rs := mock.VirtualRoutingServer()
16
sg := bitswap.NewSessionGenerator(net, rs)
17
exchange/bitswap/bitswap_test.go
+7
-6
@@ -11,13 +11,14 @@ import (
11
blocksutil "github.com/jbenet/go-ipfs/blocks/blocksutil"
12
tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
13
mock "github.com/jbenet/go-ipfs/routing/mock"
14
+ delay "github.com/jbenet/go-ipfs/util/delay"
15
testutil "github.com/jbenet/go-ipfs/util/testutil"
16
)
17
18
func TestClose(t *testing.T) {
19
// TODO
20
t.Skip("TODO Bitswap's Close implementation is a WIP")
20
- vnet := tn.VirtualNetwork()
21
+ vnet := tn.VirtualNetwork(delay.Fixed(0))
22
rout := mock.VirtualRoutingServer()
23
sesgen := NewSessionGenerator(vnet, rout)
24
bgen := blocksutil.NewBlockGenerator()
@@ -31,7 +32,7 @@ func TestClose(t *testing.T) {
32
33
func TestGetBlockTimeout(t *testing.T) {
34
34
- net := tn.VirtualNetwork()
35
+ net := tn.VirtualNetwork(delay.Fixed(0))
36
rs := mock.VirtualRoutingServer()
37
g := NewSessionGenerator(net, rs)
38
@@ -48,7 +49,7 @@ func TestGetBlockTimeout(t *testing.T) {
49
50
func TestProviderForKeyButNetworkCannotFind(t *testing.T) {
51
51
- net := tn.VirtualNetwork()
52
+ net := tn.VirtualNetwork(delay.Fixed(0))
53
rs := mock.VirtualRoutingServer()
54
g := NewSessionGenerator(net, rs)
55
@@ -69,7 +70,7 @@ func TestProviderForKeyButNetworkCannotFind(t *testing.T) {
70
71
func TestGetBlockFromPeerAfterPeerAnnounces(t *testing.T) {
72
72
- net := tn.VirtualNetwork()
73
+ net := tn.VirtualNetwork(delay.Fixed(0))
74
rs := mock.VirtualRoutingServer()
75
block := blocks.NewBlock([]byte("block"))
76
g := NewSessionGenerator(net, rs)
@@ -121,7 +122,7 @@ func PerformDistributionTest(t *testing.T, numInstances, numBlocks int) {
122
if testing.Short() {
123
t.SkipNow()
124
}
124
- net := tn.VirtualNetwork()
125
+ net := tn.VirtualNetwork(delay.Fixed(0))
126
rs := mock.VirtualRoutingServer()
127
sg := NewSessionGenerator(net, rs)
128
bg := blocksutil.NewBlockGenerator()
@@ -181,7 +182,7 @@ func TestSendToWantingPeer(t *testing.T) {
182
t.SkipNow()
183
}
184
184
- net := tn.VirtualNetwork()
185
+ net := tn.VirtualNetwork(delay.Fixed(0))
186
rs := mock.VirtualRoutingServer()
187
sg := NewSessionGenerator(net, rs)
188
bg := blocksutil.NewBlockGenerator()
exchange/bitswap/testnet/network.go
+7
-2
@@ -10,6 +10,7 @@ import (
10
bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network"
11
peer "github.com/jbenet/go-ipfs/peer"
12
"github.com/jbenet/go-ipfs/util"
13
+ delay "github.com/jbenet/go-ipfs/util/delay"
14
)
15
16
type Network interface {
@@ -33,14 +34,16 @@ type Network interface {
34
35
// network impl
36
36
-func VirtualNetwork() Network {
37
+func VirtualNetwork(d delay.D) Network {
38
return &network{
39
clients: make(map[util.Key]bsnet.Receiver),
40
+ delay: d,
41
}
42
}
43
44
type network struct {
45
clients map[util.Key]bsnet.Receiver
46
+ delay delay.D
47
}
48
49
func (n *network) Adapter(p peer.Peer) bsnet.BitSwapNetwork {
@@ -84,13 +87,15 @@ func (n *network) deliver(
87
return errors.New("Invalid input")
88
}
89
90
+ n.delay.Wait()
91
+
92
nextPeer, nextMsg := r.ReceiveMessage(context.TODO(), from, message)
93
94
if (nextPeer == nil && nextMsg != nil) || (nextMsg == nil && nextPeer != nil) {
95
return errors.New("Malformed client request")
96
}
97
93
- if nextPeer == nil && nextMsg == nil {
98
+ if nextPeer == nil && nextMsg == nil { // no response to send
99
return nil
100
}
101
exchange/bitswap/testnet/network_test.go
+3
-2
@@ -9,11 +9,12 @@ import (
9
bsmsg "github.com/jbenet/go-ipfs/exchange/bitswap/message"
10
bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network"
11
peer "github.com/jbenet/go-ipfs/peer"
12
+ delay "github.com/jbenet/go-ipfs/util/delay"
13
testutil "github.com/jbenet/go-ipfs/util/testutil"
14
)
15
16
func TestSendRequestToCooperativePeer(t *testing.T) {
16
- net := VirtualNetwork()
17
+ net := VirtualNetwork(delay.Fixed(0))
18
19
idOfRecipient := []byte("recipient")
20
@@ -60,7 +61,7 @@ func TestSendRequestToCooperativePeer(t *testing.T) {
61
}
62
63
func TestSendMessageAsyncButWaitForResponse(t *testing.T) {
63
- net := VirtualNetwork()
64
+ net := VirtualNetwork(delay.Fixed(0))
65
idOfResponder := []byte("responder")
66
waiter := net.Adapter(testutil.NewPeerWithIDString("waiter"))
67
responder := net.Adapter(testutil.NewPeerWithID(idOfResponder))