kubo/core/coreiface/tests/object.go
rifeplight 3f2cc50eb8
Some checks failed
CodeQL / codeql (push) Waiting to run
Docker Check / lint (push) Waiting to run
Docker Check / build (push) Waiting to run
Gateway Conformance / gateway-conformance (push) Waiting to run
Gateway Conformance / gateway-conformance-libp2p-experiment (push) Waiting to run
Go Build / go-build (push) Waiting to run
Go Check / go-check (push) Waiting to run
Go Lint / go-lint (push) Waiting to run
Go Test / go-test (push) Waiting to run
Interop / interop-prep (push) Waiting to run
Interop / helia-interop (push) Blocked by required conditions
Interop / ipfs-webui (push) Blocked by required conditions
Sharness / sharness-test (push) Waiting to run
Spell Check / spellcheck (push) Waiting to run
Migrations / test (macos-latest) (push) Has been cancelled
Migrations / test (ubuntu-latest) (push) Has been cancelled
Migrations / test (windows-latest) (push) Has been cancelled
refactor: replace context.WithCancel with t.Context (#11083)
Signed-off-by: rifeplight <rifeplight@outlook.com>
2025-11-28 16:39:55 +01:00

141 lines
3.3 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 := t.Context()
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 := t.Context()
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 := t.Context()
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 := t.Context()
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())
}