diff --git a/pkg/local_object_storage/engine/inhume_test.go b/pkg/local_object_storage/engine/inhume_test.go new file mode 100644 index 00000000..2c3a46e8 --- /dev/null +++ b/pkg/local_object_storage/engine/inhume_test.go @@ -0,0 +1,74 @@ +package engine + +import ( + "os" + "testing" + + objectSDK "github.com/nspcc-dev/neofs-api-go/pkg/object" + "github.com/nspcc-dev/neofs-node/pkg/local_object_storage/shard" + "github.com/stretchr/testify/require" +) + +func TestStorageEngine_Inhume(t *testing.T) { + defer os.RemoveAll(t.Name()) + + cid := testCID() + splitID := objectSDK.NewSplitID() + + fs := objectSDK.SearchFilters{} + fs.AddRootFilter() + + tombstoneID := generateRawObjectWithCID(t, cid).Object().Address() + parent := generateRawObjectWithCID(t, cid) + + child := generateRawObjectWithCID(t, cid) + child.SetParent(parent.Object().SDK()) + child.SetParentID(parent.ID()) + child.SetSplitID(splitID) + + link := generateRawObjectWithCID(t, cid) + link.SetParent(parent.Object().SDK()) + link.SetParentID(parent.ID()) + link.SetChildren(child.ID()) + link.SetSplitID(splitID) + + t.Run("delete small object", func(t *testing.T) { + e := testNewEngineWithShards(testNewShard(t, 1)) + defer e.Close() + + err := Put(e, parent.Object()) + require.NoError(t, err) + + inhumePrm := new(InhumePrm).WithTarget(tombstoneID, parent.Object().Address()) + _, err = e.Inhume(inhumePrm) + require.NoError(t, err) + + addrs, err := Select(e, cid, fs) + require.NoError(t, err) + require.Empty(t, addrs) + }) + + t.Run("delete big object", func(t *testing.T) { + s1 := testNewShard(t, 1) + s2 := testNewShard(t, 2) + + e := testNewEngineWithShards(s1, s2) + defer e.Close() + + putChild := new(shard.PutPrm).WithObject(child.Object()) + _, err := s1.Put(putChild) + require.NoError(t, err) + + putLink := new(shard.PutPrm).WithObject(link.Object()) + _, err = s2.Put(putLink) + require.NoError(t, err) + + inhumePrm := new(InhumePrm).WithTarget(tombstoneID, parent.Object().Address()) + _, err = e.Inhume(inhumePrm) + require.NoError(t, err) + + addrs, err := Select(e, cid, fs) + require.NoError(t, err) + require.Empty(t, addrs) + }) +}