@cryptotaxi247 / kubo / commits / aa7d94671

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