add a test in merkledag to exercise GetBlocks
Jeromy committed
Nov 25, 2014 at 18:45 UTC
d06343083e0466878c339c64699e1235a51071dd
1 file changed
+93
-1
merkledag/merkledag_test.go
+93
-1
@@ -1,9 +1,20 @@
1
-package merkledag
1
+package merkledag_test
2
3
import (
4
+ "bytes"
5
"fmt"
6
+ "io"
7
+ "io/ioutil"
8
"testing"
9
10
+ bserv "github.com/jbenet/go-ipfs/blockservice"
11
+ bs "github.com/jbenet/go-ipfs/exchange/bitswap"
12
+ tn "github.com/jbenet/go-ipfs/exchange/bitswap/testnet"
13
+ imp "github.com/jbenet/go-ipfs/importer"
14
+ chunk "github.com/jbenet/go-ipfs/importer/chunk"
15
+ . "github.com/jbenet/go-ipfs/merkledag"
16
+ "github.com/jbenet/go-ipfs/routing/mock"
17
+ uio "github.com/jbenet/go-ipfs/unixfs/io"
18
u "github.com/jbenet/go-ipfs/util"
19
)
20
@@ -56,3 +67,84 @@ func TestNode(t *testing.T) {
67
printn("boop", n2)
68
printn("beep boop", n3)
69
}
70
+
71
+func makeTestDag(t *testing.T) *Node {
72
+ read := io.LimitReader(u.NewTimeSeededRand(), 1024*32)
73
+ spl := &chunk.SizeSplitter{512}
74
+ root, err := imp.NewDagFromReaderWithSplitter(read, spl)
75
+ if err != nil {
76
+ t.Fatal(err)
77
+ }
78
+ return root
79
+}
80
+
81
+func TestBatchFetch(t *testing.T) {
82
+ net := tn.VirtualNetwork()
83
+ rs := mock.VirtualRoutingServer()
84
+ sg := bs.NewSessionGenerator(net, rs)
85
+
86
+ instances := sg.Instances(5)
87
+
88
+ var servs []*bserv.BlockService
89
+ var dagservs []DAGService
90
+ for _, i := range instances {
91
+ bsi, err := bserv.New(i.Blockstore, i.Exchange)
92
+ if err != nil {
93
+ t.Fatal(err)
94
+ }
95
+ servs = append(servs, bsi)
96
+ dagservs = append(dagservs, NewDAGService(bsi))
97
+ }
98
+ t.Log("finished setup.")
99
+
100
+ root := makeTestDag(t)
101
+ read, err := uio.NewDagReader(root, nil)
102
+ if err != nil {
103
+ t.Fatal(err)
104
+ }
105
+ expected, err := ioutil.ReadAll(read)
106
+ if err != nil {
107
+ t.Fatal(err)
108
+ }
109
+
110
+ err = dagservs[0].AddRecursive(root)
111
+ if err != nil {
112
+ t.Fatal(err)
113
+ }
114
+
115
+ t.Log("Added file to first node.")
116
+
117
+ k, err := root.Key()
118
+ if err != nil {
119
+ t.Fatal(err)
120
+ }
121
+
122
+ done := make(chan struct{})
123
+ for i := 1; i < len(dagservs); i++ {
124
+ go func(i int) {
125
+ first, err := dagservs[i].Get(k)
126
+ if err != nil {
127
+ t.Fatal(err)
128
+ }
129
+ fmt.Println("Got first node back.")
130
+
131
+ read, err := uio.NewDagReader(first, dagservs[i])
132
+ if err != nil {
133
+ t.Fatal(err)
134
+ }
135
+ datagot, err := ioutil.ReadAll(read)
136
+ if err != nil {
137
+ t.Fatal(err)
138
+ }
139
+
140
+ if !bytes.Equal(datagot, expected) {
141
+ t.Fatal("Got bad data back!")
142
+ }
143
+ done <- struct{}{}
144
+ }(i)
145
+ }
146
+
147
+ for i := 1; i < len(dagservs); i++ {
148
+ <-done
149
+ }
150
+}