@cryptotaxi247 / kubo / commits / d06343083

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