mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-21 10:27:46 +08:00
145 lines
3.5 KiB
Go
145 lines
3.5 KiB
Go
package tests
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
dag "github.com/ipfs/boxo/ipld/merkledag"
|
|
"github.com/ipfs/boxo/path"
|
|
ipld "github.com/ipfs/go-ipld-format"
|
|
iface "github.com/ipfs/kubo/core/coreiface"
|
|
opt "github.com/ipfs/kubo/core/coreiface/options"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func (tp *TestSuite) TestObject(t *testing.T) {
|
|
tp.hasApi(t, func(api iface.CoreAPI) error {
|
|
if api.Object() == nil {
|
|
return errAPINotImplemented
|
|
}
|
|
return nil
|
|
})
|
|
|
|
t.Run("TestObjectAddLink", tp.TestObjectAddLink)
|
|
t.Run("TestObjectAddLinkCreate", tp.TestObjectAddLinkCreate)
|
|
t.Run("TestObjectRmLink", tp.TestObjectRmLink)
|
|
t.Run("TestDiffTest", tp.TestDiffTest)
|
|
}
|
|
|
|
func putDagPbNode(t *testing.T, ctx context.Context, api iface.CoreAPI, data string, links []*ipld.Link) path.ImmutablePath {
|
|
dagnode := new(dag.ProtoNode)
|
|
|
|
if data != "" {
|
|
dagnode.SetData([]byte(data))
|
|
}
|
|
|
|
if links != nil {
|
|
err := dagnode.SetLinks(links)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
err := api.Dag().Add(ctx, dagnode)
|
|
require.NoError(t, err)
|
|
|
|
return path.FromCid(dagnode.Cid())
|
|
}
|
|
|
|
func (tp *TestSuite) TestObjectAddLink(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
api, err := tp.makeAPI(t, ctx)
|
|
require.NoError(t, err)
|
|
|
|
p1 := putDagPbNode(t, ctx, api, "foo", nil)
|
|
p2 := putDagPbNode(t, ctx, api, "bazz", []*ipld.Link{
|
|
{
|
|
Name: "bar",
|
|
Cid: p1.RootCid(),
|
|
Size: 3,
|
|
},
|
|
})
|
|
|
|
p3, err := api.Object().AddLink(ctx, p2, "abc", p2)
|
|
require.NoError(t, err)
|
|
|
|
nd, err := api.Dag().Get(ctx, p3.RootCid())
|
|
require.NoError(t, err)
|
|
|
|
links := nd.Links()
|
|
require.Len(t, links, 2)
|
|
require.Equal(t, "abc", links[0].Name)
|
|
require.Equal(t, "bar", links[1].Name)
|
|
}
|
|
|
|
func (tp *TestSuite) TestObjectAddLinkCreate(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
api, err := tp.makeAPI(t, ctx)
|
|
require.NoError(t, err)
|
|
|
|
p1 := putDagPbNode(t, ctx, api, "foo", nil)
|
|
p2 := putDagPbNode(t, ctx, api, "bazz", []*ipld.Link{
|
|
{
|
|
Name: "bar",
|
|
Cid: p1.RootCid(),
|
|
Size: 3,
|
|
},
|
|
})
|
|
|
|
_, err = api.Object().AddLink(ctx, p2, "abc/d", p2)
|
|
require.ErrorContains(t, err, "no link by that name")
|
|
|
|
p3, err := api.Object().AddLink(ctx, p2, "abc/d", p2, opt.Object.Create(true))
|
|
require.NoError(t, err)
|
|
|
|
nd, err := api.Dag().Get(ctx, p3.RootCid())
|
|
require.NoError(t, err)
|
|
|
|
links := nd.Links()
|
|
require.Len(t, links, 2)
|
|
require.Equal(t, "abc", links[0].Name)
|
|
require.Equal(t, "bar", links[1].Name)
|
|
}
|
|
|
|
func (tp *TestSuite) TestObjectRmLink(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
api, err := tp.makeAPI(t, ctx)
|
|
require.NoError(t, err)
|
|
|
|
p1 := putDagPbNode(t, ctx, api, "foo", nil)
|
|
p2 := putDagPbNode(t, ctx, api, "bazz", []*ipld.Link{
|
|
{
|
|
Name: "bar",
|
|
Cid: p1.RootCid(),
|
|
Size: 3,
|
|
},
|
|
})
|
|
|
|
p3, err := api.Object().RmLink(ctx, p2, "bar")
|
|
require.NoError(t, err)
|
|
|
|
nd, err := api.Dag().Get(ctx, p3.RootCid())
|
|
require.NoError(t, err)
|
|
|
|
links := nd.Links()
|
|
require.Len(t, links, 0)
|
|
}
|
|
|
|
func (tp *TestSuite) TestDiffTest(t *testing.T) {
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
defer cancel()
|
|
api, err := tp.makeAPI(t, ctx)
|
|
require.NoError(t, err)
|
|
|
|
p1 := putDagPbNode(t, ctx, api, "foo", nil)
|
|
p2 := putDagPbNode(t, ctx, api, "bar", nil)
|
|
|
|
changes, err := api.Object().Diff(ctx, p1, p2)
|
|
require.NoError(t, err)
|
|
require.Len(t, changes, 1)
|
|
require.Equal(t, iface.DiffMod, changes[0].Type)
|
|
require.Equal(t, p1.String(), changes[0].Before.String())
|
|
require.Equal(t, p2.String(), changes[0].After.String())
|
|
}
|