feat(bitswap/testnet) impl a version of bitswap testnet that uses mockpeernet under the hood
License: MIT Signed-off-by: Brian Tiger Chow <brian@perfmode.com>
Brian Tiger Chow committed
Dec 16, 2014 at 19:10 UTC
6da57c6764344454d91d1801ffcb8cf1cb74060b
2 files changed
+66
-9
epictest/addcat_test.go
+11
-9
@@ -8,6 +8,7 @@ import (
8
"testing"
9
"time"
10
11
+ context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
12
"github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-random"
13
blockservice "github.com/jbenet/go-ipfs/blockservice"
14
bitswap "github.com/jbenet/go-ipfs/exchange/bitswap"
@@ -85,15 +86,16 @@ func RandomBytes(n int64) []byte {
86
}
87
88
func AddCatBytes(data []byte, conf Config) error {
88
-
89
- sessionGenerator := bitswap.NewSessionGenerator(
90
- tn.VirtualNetwork(
91
- mockrouting.NewServerWithDelay(mockrouting.DelayConfig{
92
- Query: delay.Fixed(conf.RoutingLatency),
93
- ValueVisibility: delay.Fixed(conf.RoutingLatency),
94
- }),
95
- delay.Fixed(conf.NetworkLatency)), // TODO rename VirtualNetwork
96
- )
89
+ ctx := context.Background()
90
+ rs := mockrouting.NewServerWithDelay(mockrouting.DelayConfig{
91
+ Query: delay.Fixed(conf.RoutingLatency),
92
+ ValueVisibility: delay.Fixed(conf.RoutingLatency),
93
+ })
94
+ net, err := tn.StreamNetWithDelay(ctx, rs, delay.Fixed(conf.NetworkLatency))
95
+ if err != nil {
96
+ return errors.Wrap(err)
97
+ }
98
+ sessionGenerator := bitswap.NewSessionGenerator(net)
99
defer sessionGenerator.Close()
100
101
adder := sessionGenerator.Next()
exchange/bitswap/testnet/peernet.go
new
+55
@@ -0,0 +1,55 @@
1
+package bitswap
2
+
3
+import (
4
+ "math"
5
+
6
+ context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
7
+ bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network"
8
+ mockpeernet "github.com/jbenet/go-ipfs/net/mock"
9
+ peer "github.com/jbenet/go-ipfs/peer"
10
+ mockrouting "github.com/jbenet/go-ipfs/routing/mock"
11
+ delay "github.com/jbenet/go-ipfs/util/delay"
12
+ testutil "github.com/jbenet/go-ipfs/util/testutil"
13
+)
14
+
15
+type peernet struct {
16
+ mockpeernet.Mocknet
17
+ routingserver mockrouting.Server
18
+}
19
+
20
+func StreamNetWithDelay(
21
+ ctx context.Context,
22
+ rs mockrouting.Server,
23
+ d delay.D) (Network, error) {
24
+
25
+ net := mockpeernet.New(ctx)
26
+ net.SetLinkDefaults(mockpeernet.LinkOptions{
27
+ Latency: d.Get(),
28
+ Bandwidth: math.MaxInt32, // TODO inject
29
+ })
30
+ return &peernet{net, rs}, nil
31
+}
32
+
33
+func (pn *peernet) Adapter(p testutil.Peer) bsnet.BitSwapNetwork {
34
+ peers := pn.Mocknet.Peers()
35
+ client, err := pn.Mocknet.AddPeer(p.PrivateKey(), p.Address())
36
+ if err != nil {
37
+ panic(err.Error())
38
+ }
39
+ for _, other := range peers {
40
+ pn.Mocknet.LinkPeers(p.ID(), other)
41
+ }
42
+ routing := pn.routingserver.Client(peer.PeerInfo{ID: p.ID()})
43
+ return bsnet.NewFromIpfsNetwork(client, routing)
44
+}
45
+
46
+func (pn *peernet) HasPeer(p peer.ID) bool {
47
+ for _, member := range pn.Mocknet.Peers() {
48
+ if p == member {
49
+ return true
50
+ }
51
+ }
52
+ return false
53
+}
54
+
55
+var _ Network = &peernet{}