improve test coverage on merkledag package
License: MIT Signed-off-by: Jeromy <why@ipfs.io>
Jeromy committed
Aug 23, 2016 at 12:30 UTC
6b7c2fe2a987ef834dcea441504512fe2f16d577
2 files changed
+103
-1
merkledag/merkledag_test.go
+25
@@ -17,6 +17,7 @@ import (
17
imp "github.com/ipfs/go-ipfs/importer"
18
chunk "github.com/ipfs/go-ipfs/importer/chunk"
19
. "github.com/ipfs/go-ipfs/merkledag"
20
+ mdpb "github.com/ipfs/go-ipfs/merkledag/pb"
21
dstest "github.com/ipfs/go-ipfs/merkledag/test"
22
uio "github.com/ipfs/go-ipfs/unixfs/io"
23
u "gx/ipfs/QmZNVWh8LLjAavuQ2JXuFmuYH3C11xo988vSgp7UQrTRj1/go-ipfs-util"
@@ -354,3 +355,27 @@ func TestFetchFailure(t *testing.T) {
355
}
356
}
357
}
358
+
359
+func TestUnmarshalFailure(t *testing.T) {
360
+ badData := []byte("hello world")
361
+
362
+ _, err := DecodeProtobuf(badData)
363
+ if err == nil {
364
+ t.Fatal("shouldnt succeed to parse this")
365
+ }
366
+
367
+ // now with a bad link
368
+ pbn := &mdpb.PBNode{Links: []*mdpb.PBLink{{Hash: []byte("not a multihash")}}}
369
+ badlink, err := pbn.Marshal()
370
+ if err != nil {
371
+ t.Fatal(err)
372
+ }
373
+
374
+ _, err = DecodeProtobuf(badlink)
375
+ if err == nil {
376
+ t.Fatal("should have failed to parse node with bad link")
377
+ }
378
+
379
+ n := &Node{}
380
+ n.Marshal()
381
+}
merkledag/node_test.go
+78
-1
@@ -1,7 +1,12 @@
1
-package merkledag
1
+package merkledag_test
2
3
import (
4
"testing"
5
+
6
+ . "github.com/ipfs/go-ipfs/merkledag"
7
+ mdtest "github.com/ipfs/go-ipfs/merkledag/test"
8
+
9
+ "gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context"
10
)
11
12
func TestRemoveLink(t *testing.T) {
@@ -52,3 +57,75 @@ func TestRemoveLink(t *testing.T) {
57
t.Fatal("link order wrong")
58
}
59
}
60
+
61
+func TestFindLink(t *testing.T) {
62
+ ds := mdtest.Mock()
63
+ k, err := ds.Add(new(Node))
64
+ if err != nil {
65
+ t.Fatal(err)
66
+ }
67
+
68
+ nd := &Node{
69
+ Links: []*Link{
70
+ &Link{Name: "a", Hash: k.ToMultihash()},
71
+ &Link{Name: "c", Hash: k.ToMultihash()},
72
+ &Link{Name: "b", Hash: k.ToMultihash()},
73
+ },
74
+ }
75
+
76
+ _, err = ds.Add(nd)
77
+ if err != nil {
78
+ t.Fatal(err)
79
+ }
80
+
81
+ lnk, err := nd.GetNodeLink("b")
82
+ if err != nil {
83
+ t.Fatal(err)
84
+ }
85
+
86
+ if lnk.Name != "b" {
87
+ t.Fatal("got wrong link back")
88
+ }
89
+
90
+ _, err = nd.GetNodeLink("f")
91
+ if err != ErrLinkNotFound {
92
+ t.Fatal("shouldnt have found link")
93
+ }
94
+
95
+ _, err = nd.GetLinkedNode(context.Background(), ds, "b")
96
+ if err != nil {
97
+ t.Fatal(err)
98
+ }
99
+
100
+ outnd, err := nd.UpdateNodeLink("b", nd)
101
+ if err != nil {
102
+ t.Fatal(err)
103
+ }
104
+
105
+ olnk, err := outnd.GetNodeLink("b")
106
+ if err != nil {
107
+ t.Fatal(err)
108
+ }
109
+
110
+ if olnk.Hash.B58String() == k.B58String() {
111
+ t.Fatal("new link should have different hash")
112
+ }
113
+}
114
+
115
+func TestNodeCopy(t *testing.T) {
116
+ nd := &Node{
117
+ Links: []*Link{
118
+ &Link{Name: "a"},
119
+ &Link{Name: "c"},
120
+ &Link{Name: "b"},
121
+ },
122
+ }
123
+ nd.SetData([]byte("testing"))
124
+
125
+ ond := nd.Copy()
126
+ ond.SetData(nil)
127
+
128
+ if nd.Data() == nil {
129
+ t.Fatal("should be different objects")
130
+ }
131
+}