@cryptotaxi247 / kubo / commits / 958cc6164

epictest: added test for bitswap wo routing

Juan Batiz-Benet committed Jan 28, 2015 at 23:55 UTC 958cc61647fecbc4dcbdc61954e8992123e703fb
2 files changed +105
exchange/bitswap/bitswap_test.go
+1
@@ -244,6 +244,7 @@ func TestSendToWantingPeer(t *testing.T) {
244 func TestBasicBitswap(t *testing.T) {
245 net := tn.VirtualNetwork(mockrouting.NewServer(), delay.Fixed(kNetworkDelay))
246 sg := NewTestSessionGenerator(net)
247 + defer sg.Close()
248 bg := blocksutil.NewBlockGenerator()
249
250 t.Log("Test a few nodes trying to get one file with a lot of blocks")
test/epictest/bitswap_wo_routing_test.go new
+104
@@ -0,0 +1,104 @@
1 +package epictest
2 +
3 +import (
4 + "bytes"
5 + "testing"
6 + "time"
7 +
8 + context "github.com/jbenet/go-ipfs/Godeps/_workspace/src/code.google.com/p/go.net/context"
9 + "github.com/jbenet/go-ipfs/blocks"
10 + "github.com/jbenet/go-ipfs/core"
11 + mocknet "github.com/jbenet/go-ipfs/p2p/net/mock"
12 + errors "github.com/jbenet/go-ipfs/util/debugerror"
13 + testutil "github.com/jbenet/go-ipfs/util/testutil"
14 +)
15 +
16 +func TestBitswapWithoutRouting(t *testing.T) {
17 + ctx, cancel := context.WithCancel(context.Background())
18 + defer cancel()
19 + const numPeers = 4
20 +
21 + // create network
22 + mn, err := mocknet.FullMeshLinked(ctx, numPeers)
23 + if err != nil {
24 + t.Fatal(errors.Wrap(err))
25 + }
26 +
27 + peers := mn.Peers()
28 + if len(peers) < numPeers {
29 + t.Fatal(errors.New("test initialization error"))
30 + }
31 +
32 + // set the routing latency to infinity.
33 + conf := testutil.LatencyConfig{RoutingLatency: (525600 * time.Minute)}
34 +
35 + var nodes []*core.IpfsNode
36 + for _, p := range peers {
37 + n, err := core.NewIPFSNode(ctx, core.ConfigOption(MocknetTestRepo(p, mn.Host(p), conf)))
38 + if err != nil {
39 + t.Fatal(err)
40 + }
41 + defer n.Close()
42 + nodes = append(nodes, n)
43 + }
44 +
45 + // connect them
46 + for _, n1 := range nodes {
47 + for _, n2 := range nodes {
48 + if n1 == n2 {
49 + continue
50 + }
51 +
52 + log.Debug("connecting to other hosts")
53 + p2 := n2.PeerHost.Peerstore().PeerInfo(n2.PeerHost.ID())
54 + if err := n1.PeerHost.Connect(ctx, p2); err != nil {
55 + t.Fatal(err)
56 + }
57 + }
58 + }
59 +
60 + // add blocks to each before
61 + log.Debug("adding block.")
62 + block0 := blocks.NewBlock([]byte("block0"))
63 + block1 := blocks.NewBlock([]byte("block1"))
64 +
65 + // put 1 before
66 + if err := nodes[0].Blockstore.Put(block0); err != nil {
67 + t.Fatal(err)
68 + }
69 +
70 + // get it out.
71 + for i, n := range nodes {
72 + // skip first because block not in its exchange. will hang.
73 + if i == 0 {
74 + continue
75 + }
76 +
77 + log.Debugf("%d %s get block.", i, n.Identity)
78 + b, err := n.Exchange.GetBlock(ctx, block0.Key())
79 + if err != nil {
80 + t.Error(err)
81 + } else if !bytes.Equal(b.Data, block0.Data) {
82 + t.Error("byte comparison fail")
83 + } else {
84 + log.Debug("got block: %s", b.Key())
85 + }
86 + }
87 +
88 + // put 1 after
89 + if err := nodes[1].Blockstore.Put(block1); err != nil {
90 + t.Fatal(err)
91 + }
92 +
93 + // get it out.
94 + for _, n := range nodes {
95 + b, err := n.Exchange.GetBlock(ctx, block1.Key())
96 + if err != nil {
97 + t.Error(err)
98 + } else if !bytes.Equal(b.Data, block1.Data) {
99 + t.Error("byte comparison fail")
100 + } else {
101 + log.Debug("got block: %s", b.Key())
102 + }
103 + }
104 +}