kubo/merkledag/node_test.go
Jeromy 6b7c2fe2a9 improve test coverage on merkledag package
License: MIT
Signed-off-by: Jeromy <why@ipfs.io>
2016-08-23 15:17:01 -07:00

132 lines
2.2 KiB
Go

package merkledag_test
import (
"testing"
. "github.com/ipfs/go-ipfs/merkledag"
mdtest "github.com/ipfs/go-ipfs/merkledag/test"
"gx/ipfs/QmZy2y8t9zQH2a1b8q2ZSLKp17ATuJoCNxxyMFG5qFExpt/go-net/context"
)
func TestRemoveLink(t *testing.T) {
nd := &Node{
Links: []*Link{
&Link{Name: "a"},
&Link{Name: "b"},
&Link{Name: "a"},
&Link{Name: "a"},
&Link{Name: "c"},
&Link{Name: "a"},
},
}
err := nd.RemoveNodeLink("a")
if err != nil {
t.Fatal(err)
}
if len(nd.Links) != 2 {
t.Fatal("number of links incorrect")
}
if nd.Links[0].Name != "b" {
t.Fatal("link order wrong")
}
if nd.Links[1].Name != "c" {
t.Fatal("link order wrong")
}
// should fail
err = nd.RemoveNodeLink("a")
if err != ErrNotFound {
t.Fatal("should have failed to remove link")
}
// ensure nothing else got touched
if len(nd.Links) != 2 {
t.Fatal("number of links incorrect")
}
if nd.Links[0].Name != "b" {
t.Fatal("link order wrong")
}
if nd.Links[1].Name != "c" {
t.Fatal("link order wrong")
}
}
func TestFindLink(t *testing.T) {
ds := mdtest.Mock()
k, err := ds.Add(new(Node))
if err != nil {
t.Fatal(err)
}
nd := &Node{
Links: []*Link{
&Link{Name: "a", Hash: k.ToMultihash()},
&Link{Name: "c", Hash: k.ToMultihash()},
&Link{Name: "b", Hash: k.ToMultihash()},
},
}
_, err = ds.Add(nd)
if err != nil {
t.Fatal(err)
}
lnk, err := nd.GetNodeLink("b")
if err != nil {
t.Fatal(err)
}
if lnk.Name != "b" {
t.Fatal("got wrong link back")
}
_, err = nd.GetNodeLink("f")
if err != ErrLinkNotFound {
t.Fatal("shouldnt have found link")
}
_, err = nd.GetLinkedNode(context.Background(), ds, "b")
if err != nil {
t.Fatal(err)
}
outnd, err := nd.UpdateNodeLink("b", nd)
if err != nil {
t.Fatal(err)
}
olnk, err := outnd.GetNodeLink("b")
if err != nil {
t.Fatal(err)
}
if olnk.Hash.B58String() == k.B58String() {
t.Fatal("new link should have different hash")
}
}
func TestNodeCopy(t *testing.T) {
nd := &Node{
Links: []*Link{
&Link{Name: "a"},
&Link{Name: "c"},
&Link{Name: "b"},
},
}
nd.SetData([]byte("testing"))
ond := nd.Copy()
ond.SetData(nil)
if nd.Data() == nil {
t.Fatal("should be different objects")
}
}