@cryptotaxi247 / kubo / commits / 6da57c676

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{}