From 6da57c6764344454d91d1801ffcb8cf1cb74060b Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow Date: Tue, 16 Dec 2014 19:10:15 -0800 Subject: [PATCH] feat(bitswap/testnet) impl a version of bitswap testnet that uses mockpeernet under the hood License: MIT Signed-off-by: Brian Tiger Chow --- epictest/addcat_test.go | 20 ++++++----- exchange/bitswap/testnet/peernet.go | 55 +++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 exchange/bitswap/testnet/peernet.go diff --git a/epictest/addcat_test.go b/epictest/addcat_test.go index 7cf4d04e8..7c2d915ae 100644 --- a/epictest/addcat_test.go +++ b/epictest/addcat_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-random" blockservice "github.com/jbenet/go-ipfs/blockservice" bitswap "github.com/jbenet/go-ipfs/exchange/bitswap" @@ -85,15 +86,16 @@ func RandomBytes(n int64) []byte { } func AddCatBytes(data []byte, conf Config) error { - - sessionGenerator := bitswap.NewSessionGenerator( - tn.VirtualNetwork( - mockrouting.NewServerWithDelay(mockrouting.DelayConfig{ - Query: delay.Fixed(conf.RoutingLatency), - ValueVisibility: delay.Fixed(conf.RoutingLatency), - }), - delay.Fixed(conf.NetworkLatency)), // TODO rename VirtualNetwork - ) + ctx := context.Background() + rs := mockrouting.NewServerWithDelay(mockrouting.DelayConfig{ + Query: delay.Fixed(conf.RoutingLatency), + ValueVisibility: delay.Fixed(conf.RoutingLatency), + }) + net, err := tn.StreamNetWithDelay(ctx, rs, delay.Fixed(conf.NetworkLatency)) + if err != nil { + return errors.Wrap(err) + } + sessionGenerator := bitswap.NewSessionGenerator(net) defer sessionGenerator.Close() adder := sessionGenerator.Next() diff --git a/exchange/bitswap/testnet/peernet.go b/exchange/bitswap/testnet/peernet.go new file mode 100644 index 000000000..af2e57258 --- /dev/null +++ b/exchange/bitswap/testnet/peernet.go @@ -0,0 +1,55 @@ +package bitswap + +import ( + "math" + + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context" + bsnet "github.com/jbenet/go-ipfs/exchange/bitswap/network" + mockpeernet "github.com/jbenet/go-ipfs/net/mock" + peer "github.com/jbenet/go-ipfs/peer" + mockrouting "github.com/jbenet/go-ipfs/routing/mock" + delay "github.com/jbenet/go-ipfs/util/delay" + testutil "github.com/jbenet/go-ipfs/util/testutil" +) + +type peernet struct { + mockpeernet.Mocknet + routingserver mockrouting.Server +} + +func StreamNetWithDelay( + ctx context.Context, + rs mockrouting.Server, + d delay.D) (Network, error) { + + net := mockpeernet.New(ctx) + net.SetLinkDefaults(mockpeernet.LinkOptions{ + Latency: d.Get(), + Bandwidth: math.MaxInt32, // TODO inject + }) + return &peernet{net, rs}, nil +} + +func (pn *peernet) Adapter(p testutil.Peer) bsnet.BitSwapNetwork { + peers := pn.Mocknet.Peers() + client, err := pn.Mocknet.AddPeer(p.PrivateKey(), p.Address()) + if err != nil { + panic(err.Error()) + } + for _, other := range peers { + pn.Mocknet.LinkPeers(p.ID(), other) + } + routing := pn.routingserver.Client(peer.PeerInfo{ID: p.ID()}) + return bsnet.NewFromIpfsNetwork(client, routing) +} + +func (pn *peernet) HasPeer(p peer.ID) bool { + for _, member := range pn.Mocknet.Peers() { + if p == member { + return true + } + } + return false +} + +var _ Network = &peernet{}