mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-22 02:47:48 +08:00
70 lines
1.4 KiB
Go
70 lines
1.4 KiB
Go
package path_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
merkledag "github.com/ipfs/go-ipfs/merkledag"
|
|
dagmock "github.com/ipfs/go-ipfs/merkledag/test"
|
|
path "github.com/ipfs/go-ipfs/path"
|
|
|
|
node "gx/ipfs/QmNwUEK7QbwSqyKBu3mMtToo8SUc6wQJ7gdZq4gGGJqfnf/go-ipld-format"
|
|
util "gx/ipfs/QmPsAfmDBnZN3kZGSuNwvCNDZiHneERSKmRcFyG3UkvcT3/go-ipfs-util"
|
|
)
|
|
|
|
func randNode() *merkledag.ProtoNode {
|
|
node := new(merkledag.ProtoNode)
|
|
node.SetData(make([]byte, 32))
|
|
util.NewTimeSeededRand().Read(node.Data())
|
|
return node
|
|
}
|
|
|
|
func TestRecurivePathResolution(t *testing.T) {
|
|
ctx := context.Background()
|
|
dagService := dagmock.Mock()
|
|
|
|
a := randNode()
|
|
b := randNode()
|
|
c := randNode()
|
|
|
|
err := b.AddNodeLink("grandchild", c)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
err = a.AddNodeLink("child", b)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
for _, n := range []node.Node{a, b, c} {
|
|
_, err = dagService.Add(n)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
aKey := a.Cid()
|
|
|
|
segments := []string{aKey.String(), "child", "grandchild"}
|
|
p, err := path.FromSegments("/ipfs/", segments...)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
resolver := path.NewBasicResolver(dagService)
|
|
node, err := resolver.ResolvePath(ctx, p)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
cKey := c.Cid()
|
|
key := node.Cid()
|
|
if key.String() != cKey.String() {
|
|
t.Fatal(fmt.Errorf(
|
|
"recursive path resolution failed for %s: %s != %s",
|
|
p.String(), key.String(), cKey.String()))
|
|
}
|
|
}
|