@cryptotaxi247 / kubo / commits / 3c44ad1fd

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