a little more test coverage on merkledag
License: MIT Signed-off-by: Jeromy <jeromyj@gmail.com>
Jeromy committed
Jul 28, 2015 at 21:15 UTC
aa7d9467161f6b8144d3c8d7b70f51b99bfe5d69
3 files changed
+123
-11
merkledag/coding.go
+1
-11
@@ -37,16 +37,6 @@ func (n *Node) Unmarshal(encoded []byte) error {
37
return nil
38
}
39
40
-// MarshalTo encodes a *Node instance into a given byte slice.
41
-// The conversion uses an intermediate PBNode.
42
-func (n *Node) MarshalTo(encoded []byte) error {
43
- pbn := n.getPBNode()
44
- if _, err := pbn.MarshalTo(encoded); err != nil {
45
- return fmt.Errorf("Marshal failed. %v", err)
46
- }
47
- return nil
48
-}
49
-
40
// Marshal encodes a *Node instance into a new byte slice.
41
// The conversion uses an intermediate PBNode.
42
func (n *Node) Marshal() ([]byte, error) {
@@ -82,7 +72,7 @@ func (n *Node) Encoded(force bool) ([]byte, error) {
72
var err error
73
n.encoded, err = n.Marshal()
74
if err != nil {
85
- return []byte{}, err
75
+ return nil, err
76
}
77
n.cached = u.Hash(n.encoded)
78
}
merkledag/merkledag_test.go
+68
@@ -5,6 +5,7 @@ import (
5
"fmt"
6
"io"
7
"io/ioutil"
8
+ "strings"
9
"sync"
10
"testing"
11
@@ -221,3 +222,70 @@ func runBatchFetchTest(t *testing.T, read io.Reader) {
222
223
wg.Wait()
224
}
225
+
226
+func TestRecursiveAdd(t *testing.T) {
227
+ a := &Node{Data: []byte("A")}
228
+ b := &Node{Data: []byte("B")}
229
+ c := &Node{Data: []byte("C")}
230
+ d := &Node{Data: []byte("D")}
231
+ e := &Node{Data: []byte("E")}
232
+
233
+ err := a.AddNodeLink("blah", b)
234
+ if err != nil {
235
+ t.Fatal(err)
236
+ }
237
+
238
+ err = b.AddNodeLink("foo", c)
239
+ if err != nil {
240
+ t.Fatal(err)
241
+ }
242
+
243
+ err = b.AddNodeLink("bar", d)
244
+ if err != nil {
245
+ t.Fatal(err)
246
+ }
247
+
248
+ err = d.AddNodeLink("baz", e)
249
+ if err != nil {
250
+ t.Fatal(err)
251
+ }
252
+
253
+ dsp := getDagservAndPinner(t)
254
+ err = dsp.ds.AddRecursive(a)
255
+ if err != nil {
256
+ t.Fatal(err)
257
+ }
258
+
259
+ assertCanGet(t, dsp.ds, a)
260
+ assertCanGet(t, dsp.ds, b)
261
+ assertCanGet(t, dsp.ds, c)
262
+ assertCanGet(t, dsp.ds, d)
263
+ assertCanGet(t, dsp.ds, e)
264
+}
265
+
266
+func assertCanGet(t *testing.T, ds DAGService, n *Node) {
267
+ k, err := n.Key()
268
+ if err != nil {
269
+ t.Fatal(err)
270
+ }
271
+
272
+ _, err = ds.Get(context.TODO(), k)
273
+ if err != nil {
274
+ t.Fatal(err)
275
+ }
276
+}
277
+
278
+func TestCantGet(t *testing.T) {
279
+ dsp := getDagservAndPinner(t)
280
+ a := &Node{Data: []byte("A")}
281
+
282
+ k, err := a.Key()
283
+ if err != nil {
284
+ t.Fatal(err)
285
+ }
286
+
287
+ _, err = dsp.ds.Get(context.TODO(), k)
288
+ if !strings.Contains(err.Error(), "not found") {
289
+ t.Fatal("expected err not found, got: ", err)
290
+ }
291
+}
merkledag/node_test.go
new
+54
@@ -0,0 +1,54 @@
1
+package merkledag
2
+
3
+import (
4
+ "testing"
5
+)
6
+
7
+func TestRemoveLink(t *testing.T) {
8
+ nd := &Node{
9
+ Links: []*Link{
10
+ &Link{Name: "a"},
11
+ &Link{Name: "b"},
12
+ &Link{Name: "a"},
13
+ &Link{Name: "a"},
14
+ &Link{Name: "c"},
15
+ &Link{Name: "a"},
16
+ },
17
+ }
18
+
19
+ err := nd.RemoveNodeLink("a")
20
+ if err != nil {
21
+ t.Fatal(err)
22
+ }
23
+
24
+ if len(nd.Links) != 2 {
25
+ t.Fatal("number of links incorrect")
26
+ }
27
+
28
+ if nd.Links[0].Name != "b" {
29
+ t.Fatal("link order wrong")
30
+ }
31
+
32
+ if nd.Links[1].Name != "c" {
33
+ t.Fatal("link order wrong")
34
+ }
35
+
36
+ // should fail
37
+ err = nd.RemoveNodeLink("a")
38
+ if err != ErrNotFound {
39
+ t.Fatal("should have failed to remove link")
40
+ }
41
+
42
+ // ensure nothing else got touched
43
+ if len(nd.Links) != 2 {
44
+ t.Fatal("number of links incorrect")
45
+ }
46
+
47
+ if nd.Links[0].Name != "b" {
48
+ t.Fatal("link order wrong")
49
+ }
50
+
51
+ if nd.Links[1].Name != "c" {
52
+ t.Fatal("link order wrong")
53
+ }
54
+}