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