From 9808dec591ac80d7dc8898d0cc9080c81b2985d1 Mon Sep 17 00:00:00 2001 From: Ayrat Arifullin Date: Mon, 20 Mar 2023 17:10:26 +0300 Subject: [PATCH] [#86] node: Move testing utils to one package Move testing utils from tests in local_object_storage package to unified testutil package Signed-off-by: Airat Arifullin --- .../blobstor/perf_test.go | 210 ++---------------- .../engine/control_test.go | 3 +- .../engine/delete_test.go | 7 +- .../engine/engine_test.go | 41 +--- pkg/local_object_storage/engine/error_test.go | 7 +- .../engine/evacuate_test.go | 5 +- pkg/local_object_storage/engine/head_test.go | 9 +- .../engine/inhume_test.go | 9 +- pkg/local_object_storage/engine/list_test.go | 3 +- pkg/local_object_storage/engine/lock_test.go | 15 +- pkg/local_object_storage/engine/tree_test.go | 5 +- .../internal/testutil/generators.go | 110 +++++++++ .../internal/testutil/generators_test.go | 70 ++++++ .../internal/testutil/object.go | 68 ++++++ .../metabase/containers_test.go | 13 +- .../metabase/control_test.go | 3 +- .../metabase/counter_test.go | 11 +- pkg/local_object_storage/metabase/db_test.go | 48 +--- .../metabase/delete_test.go | 15 +- .../metabase/exists_test.go | 23 +- pkg/local_object_storage/metabase/get_test.go | 13 +- .../metabase/graveyard_test.go | 33 +-- .../metabase/inhume_test.go | 5 +- .../metabase/iterators_test.go | 5 +- .../metabase/list_test.go | 25 ++- .../metabase/lock_test.go | 5 +- .../metabase/movable_test.go | 5 +- pkg/local_object_storage/metabase/put_test.go | 7 +- .../metabase/select_test.go | 81 +++---- .../metabase/storage_id_test.go | 5 +- pkg/local_object_storage/shard/delete_test.go | 13 +- pkg/local_object_storage/shard/dump_test.go | 7 +- pkg/local_object_storage/shard/get_test.go | 25 ++- pkg/local_object_storage/shard/head_test.go | 11 +- pkg/local_object_storage/shard/inhume_test.go | 7 +- pkg/local_object_storage/shard/list_test.go | 7 +- pkg/local_object_storage/shard/lock_test.go | 11 +- .../shard/metrics_test.go | 5 +- pkg/local_object_storage/shard/range_test.go | 7 +- pkg/local_object_storage/shard/shard_test.go | 60 ----- .../shard/shutdown_test.go | 3 +- 41 files changed, 495 insertions(+), 520 deletions(-) create mode 100644 pkg/local_object_storage/internal/testutil/generators.go create mode 100644 pkg/local_object_storage/internal/testutil/generators_test.go create mode 100644 pkg/local_object_storage/internal/testutil/object.go diff --git a/pkg/local_object_storage/blobstor/perf_test.go b/pkg/local_object_storage/blobstor/perf_test.go index 96d902662..7da4619d5 100644 --- a/pkg/local_object_storage/blobstor/perf_test.go +++ b/pkg/local_object_storage/blobstor/perf_test.go @@ -1,7 +1,6 @@ package blobstor import ( - "encoding/binary" "fmt" "os" "testing" @@ -10,15 +9,8 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/memstore" - cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" - cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" - objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" - oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" - oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "github.com/stretchr/testify/require" - "go.uber.org/atomic" - "golang.org/x/exp/rand" - "golang.org/x/exp/slices" ) // The storages to benchmark. Each storage has a description and a function which returns the actual @@ -83,20 +75,20 @@ func BenchmarkSubstorageReadPerf(b *testing.B) { readTests := []struct { desc string size int - objGen func() objectGenerator - addrGen func() addressGenerator + objGen func() testutil.ObjectGenerator + addrGen func() testutil.AddressGenerator }{ { desc: "seq100", size: 10000, - objGen: func() objectGenerator { return &seqObjGenerator{objSize: 100} }, - addrGen: func() addressGenerator { return &seqAddrGenerator{maxID: 100} }, + objGen: func() testutil.ObjectGenerator { return &testutil.SeqObjGenerator{ObjSize: 100} }, + addrGen: func() testutil.AddressGenerator { return &testutil.SeqAddrGenerator{MaxID: 100} }, }, { desc: "rand100", size: 10000, - objGen: func() objectGenerator { return &seqObjGenerator{objSize: 100} }, - addrGen: func() addressGenerator { return randAddrGenerator(10000) }, + objGen: func() testutil.ObjectGenerator { return &testutil.SeqObjGenerator{ObjSize: 100} }, + addrGen: func() testutil.AddressGenerator { return testutil.RandAddrGenerator(10000) }, }, } for _, tt := range readTests { @@ -111,7 +103,7 @@ func BenchmarkSubstorageReadPerf(b *testing.B) { // Fill database for i := 0; i < tt.size; i++ { obj := objGen.Next() - addr := addressFromObject(obj) + addr := testutil.AddressFromObject(obj) raw, err := obj.Marshal() require.NoError(b, err) if _, err := st.Put(common.PutPrm{ @@ -142,14 +134,16 @@ func BenchmarkSubstorageReadPerf(b *testing.B) { func BenchmarkSubstorageWritePerf(b *testing.B) { generators := []struct { desc string - create func() objectGenerator + create func() testutil.ObjectGenerator }{ - {desc: "rand10", create: func() objectGenerator { return &randObjGenerator{objSize: 10} }}, - {desc: "rand100", create: func() objectGenerator { return &randObjGenerator{objSize: 100} }}, - {desc: "rand1000", create: func() objectGenerator { return &randObjGenerator{objSize: 1000} }}, - {desc: "overwrite10", create: func() objectGenerator { return &overwriteObjGenerator{objSize: 10, maxObjects: 100} }}, - {desc: "overwrite100", create: func() objectGenerator { return &overwriteObjGenerator{objSize: 100, maxObjects: 100} }}, - {desc: "overwrite1000", create: func() objectGenerator { return &overwriteObjGenerator{objSize: 1000, maxObjects: 100} }}, + {desc: "rand10", create: func() testutil.ObjectGenerator { return &testutil.RandObjGenerator{ObjSize: 10} }}, + {desc: "rand100", create: func() testutil.ObjectGenerator { return &testutil.RandObjGenerator{ObjSize: 100} }}, + {desc: "rand1000", create: func() testutil.ObjectGenerator { return &testutil.RandObjGenerator{ObjSize: 1000} }}, + {desc: "overwrite10", create: func() testutil.ObjectGenerator { return &testutil.OverwriteObjGenerator{ObjSize: 10, MaxObjects: 100} }}, + {desc: "overwrite100", create: func() testutil.ObjectGenerator { return &testutil.OverwriteObjGenerator{ObjSize: 100, MaxObjects: 100} }}, + {desc: "overwrite1000", create: func() testutil.ObjectGenerator { + return &testutil.OverwriteObjGenerator{ObjSize: 1000, MaxObjects: 100} + }}, } for _, genEntry := range generators { @@ -165,7 +159,7 @@ func BenchmarkSubstorageWritePerf(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { obj := gen.Next() - addr := addressFromObject(obj) + addr := testutil.AddressFromObject(obj) raw, err := obj.Marshal() require.NoError(b, err) if _, err := st.Put(common.PutPrm{ @@ -188,12 +182,12 @@ func BenchmarkSubstorageIteratePerf(b *testing.B) { iterateTests := []struct { desc string size int - objGen func() objectGenerator + objGen func() testutil.ObjectGenerator }{ { desc: "rand100", size: 10000, - objGen: func() objectGenerator { return &randObjGenerator{objSize: 100} }, + objGen: func() testutil.ObjectGenerator { return &testutil.RandObjGenerator{ObjSize: 100} }, }, } for _, tt := range iterateTests { @@ -208,7 +202,7 @@ func BenchmarkSubstorageIteratePerf(b *testing.B) { // Fill database for i := 0; i < tt.size; i++ { obj := objGen.Next() - addr := addressFromObject(obj) + addr := testutil.AddressFromObject(obj) raw, err := obj.Marshal() require.NoError(b, err) if _, err := st.Put(common.PutPrm{ @@ -238,165 +232,3 @@ func BenchmarkSubstorageIteratePerf(b *testing.B) { } } } - -func addressFromObject(obj *objectSDK.Object) oid.Address { - var addr oid.Address - if id, isSet := obj.ID(); isSet { - addr.SetObject(id) - } else { - panic("object ID is not set") - } - if cid, isSet := obj.ContainerID(); isSet { - addr.SetContainer(cid) - } else { - panic("container ID is not set") - } - return addr -} - -// addressGenerator is the interface of types that generate object addresses. -type addressGenerator interface { - Next() oid.Address -} - -// seqAddrGenerator is an addressGenerator that generates addresses sequentially and wraps around the given max ID. -type seqAddrGenerator struct { - cnt atomic.Uint64 - maxID uint64 -} - -func (g *seqAddrGenerator) Next() oid.Address { - var id oid.ID - binary.LittleEndian.PutUint64(id[:], ((g.cnt.Inc()-1)%g.maxID)+1) - var addr oid.Address - addr.SetContainer(cid.ID{}) - addr.SetObject(id) - return addr -} - -func TestSeqAddrGenerator(t *testing.T) { - gen := &seqAddrGenerator{maxID: 10} - for i := 1; i <= 20; i++ { - addr := gen.Next() - id := addr.Object() - - require.Equal(t, uint64((i-1)%int(gen.maxID)+1), binary.LittleEndian.Uint64(id[:])) - } -} - -// randAddrGenerator is an addressGenerator that generates random addresses in the given range. -type randAddrGenerator uint64 - -func (g randAddrGenerator) Next() oid.Address { - var id oid.ID - binary.LittleEndian.PutUint64(id[:], uint64(1+int(rand.Int63n(int64(g))))) - var addr oid.Address - addr.SetContainer(cid.ID{}) - addr.SetObject(id) - return addr -} - -func TestRandAddrGenerator(t *testing.T) { - gen := randAddrGenerator(5) - for i := 0; i < 50; i++ { - addr := gen.Next() - id := addr.Object() - k := binary.LittleEndian.Uint64(id[:]) - - require.True(t, 1 <= k && k <= uint64(gen)) - } -} - -// objectGenerator is the interface of types that generate object entries. -type objectGenerator interface { - Next() *objectSDK.Object -} - -// seqObjGenerator is an objectGenerator that generates entries with random payloads of size objSize and sequential IDs. -type seqObjGenerator struct { - cnt atomic.Uint64 - objSize uint64 -} - -func (g *seqObjGenerator) Next() *objectSDK.Object { - var id oid.ID - binary.LittleEndian.PutUint64(id[:], g.cnt.Inc()) - return genObject(id, cid.ID{}, g.objSize) -} - -func TestSeqObjGenerator(t *testing.T) { - gen := &seqObjGenerator{objSize: 10} - var addrs []string - for i := 1; i <= 10; i++ { - obj := gen.Next() - id, isSet := obj.ID() - addrs = append(addrs, addressFromObject(obj).EncodeToString()) - - require.True(t, isSet) - require.Equal(t, gen.objSize, uint64(len(obj.Payload()))) - require.Equal(t, uint64(i), binary.LittleEndian.Uint64(id[:])) - } - require.True(t, slices.IsSorted(addrs)) -} - -// randObjGenerator is an objectGenerator that generates entries with random IDs and payloads of size objSize. -type randObjGenerator struct { - objSize uint64 -} - -func (g *randObjGenerator) Next() *objectSDK.Object { - return genObject(oidtest.ID(), cidtest.ID(), g.objSize) -} - -func TestRandObjGenerator(t *testing.T) { - gen := &randObjGenerator{objSize: 10} - for i := 0; i < 10; i++ { - obj := gen.Next() - - require.Equal(t, gen.objSize, uint64(len(obj.Payload()))) - } -} - -// overwriteObjGenerator is an objectGenerator that generates entries with random payloads of size objSize and at most maxObjects distinct IDs. -type overwriteObjGenerator struct { - objSize uint64 - maxObjects uint64 -} - -func (g *overwriteObjGenerator) Next() *objectSDK.Object { - var id oid.ID - binary.LittleEndian.PutUint64(id[:], uint64(1+rand.Int63n(int64(g.maxObjects)))) - return genObject(id, cid.ID{}, g.objSize) -} - -func TestOverwriteObjGenerator(t *testing.T) { - gen := &overwriteObjGenerator{ - objSize: 10, - maxObjects: 4, - } - for i := 0; i < 40; i++ { - obj := gen.Next() - id, isSet := obj.ID() - i := binary.LittleEndian.Uint64(id[:]) - - require.True(t, isSet) - require.Equal(t, gen.objSize, uint64(len(obj.Payload()))) - require.True(t, 1 <= i && i <= gen.maxObjects) - } -} - -// Generates an object with random payload and the given address and size. -// TODO(#86): there's some testing-related dupes in many places. Probably worth -// spending some time cleaning up a bit. -func genObject(id oid.ID, cid cid.ID, sz uint64) *objectSDK.Object { - raw := objectSDK.New() - - raw.SetID(id) - raw.SetContainerID(cid) - - payload := make([]byte, sz) - rand.Read(payload) - raw.SetPayload(payload) - - return raw -} diff --git a/pkg/local_object_storage/engine/control_test.go b/pkg/local_object_storage/engine/control_test.go index 65a8d4348..cf23f821f 100644 --- a/pkg/local_object_storage/engine/control_test.go +++ b/pkg/local_object_storage/engine/control_test.go @@ -11,6 +11,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" @@ -156,7 +157,7 @@ func TestExecBlocks(t *testing.T) { }) // put some object - obj := generateObjectWithCID(t, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) addr := object.AddressOf(obj) diff --git a/pkg/local_object_storage/engine/delete_test.go b/pkg/local_object_storage/engine/delete_test.go index ff604f660..abe3ea930 100644 --- a/pkg/local_object_storage/engine/delete_test.go +++ b/pkg/local_object_storage/engine/delete_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -22,7 +23,7 @@ func TestDeleteBigObject(t *testing.T) { parentID := oidtest.ID() splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) parent.SetID(parentID) parent.SetPayload(nil) @@ -30,7 +31,7 @@ func TestDeleteBigObject(t *testing.T) { children := make([]*objectSDK.Object, childCount) childIDs := make([]oid.ID, childCount) for i := range children { - children[i] = generateObjectWithCID(t, cnr) + children[i] = testutil.GenerateObjectWithCID(cnr) if i != 0 { children[i].SetPreviousID(childIDs[i-1]) } @@ -42,7 +43,7 @@ func TestDeleteBigObject(t *testing.T) { childIDs[i], _ = children[i].ID() } - link := generateObjectWithCID(t, cnr) + link := testutil.GenerateObjectWithCID(cnr) link.SetParent(parent) link.SetParentID(parentID) link.SetSplitID(splitID) diff --git a/pkg/local_object_storage/engine/engine_test.go b/pkg/local_object_storage/engine/engine_test.go index a2dced607..19e98ade4 100644 --- a/pkg/local_object_storage/engine/engine_test.go +++ b/pkg/local_object_storage/engine/engine_test.go @@ -9,20 +9,15 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/blobovniczatree" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum" - checksumtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum/test" - cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" - usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" "git.frostfs.info/TrueCloudLab/hrw" - "git.frostfs.info/TrueCloudLab/tzhash/tz" "github.com/panjf2000/ants/v2" "github.com/stretchr/testify/require" "go.uber.org/atomic" @@ -61,7 +56,7 @@ func benchmarkExists(b *testing.B, shardNum int) { addr := oidtest.Address() for i := 0; i < 100; i++ { - obj := generateObjectWithCID(b, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) err := Put(e, obj) if err != nil { b.Fatal(err) @@ -170,38 +165,6 @@ func testEngineFromShardOpts(t *testing.T, num int, extraOpts []shard.Option) *S return engine } -func generateObjectWithCID(t testing.TB, cnr cid.ID) *object.Object { - var ver version.Version - ver.SetMajor(2) - ver.SetMinor(1) - - csum := checksumtest.Checksum() - - var csumTZ checksum.Checksum - csumTZ.SetTillichZemor(tz.Sum(csum.Value())) - - obj := object.New() - obj.SetID(oidtest.ID()) - obj.SetOwnerID(usertest.ID()) - obj.SetContainerID(cnr) - obj.SetVersion(&ver) - obj.SetPayloadChecksum(csum) - obj.SetPayloadHomomorphicHash(csumTZ) - obj.SetPayload([]byte{1, 2, 3, 4, 5}) - - return obj -} - -func addAttribute(obj *object.Object, key, val string) { - var attr object.Attribute - attr.SetKey(key) - attr.SetValue(val) - - attrs := obj.Attributes() - attrs = append(attrs, attr) - obj.SetAttributes(attrs...) -} - func testNewEngineWithShardNum(t *testing.T, num int) *StorageEngine { shards := make([]*shard.Shard, 0, num) diff --git a/pkg/local_object_storage/engine/error_test.go b/pkg/local_object_storage/engine/error_test.go index bc205d836..f6d46a341 100644 --- a/pkg/local_object_storage/engine/error_test.go +++ b/pkg/local_object_storage/engine/error_test.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" @@ -65,7 +66,7 @@ func TestErrorReporting(t *testing.T) { t.Run("ignore errors by default", func(t *testing.T) { e, dir, id := newEngineWithErrorThreshold(t, "", 0) - obj := generateObjectWithCID(t, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) obj.SetPayload(make([]byte, errSmallSize)) var prm shard.PutPrm @@ -95,7 +96,7 @@ func TestErrorReporting(t *testing.T) { e, dir, id := newEngineWithErrorThreshold(t, "", errThreshold) - obj := generateObjectWithCID(t, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) obj.SetPayload(make([]byte, errSmallSize)) var prm shard.PutPrm @@ -145,7 +146,7 @@ func TestBlobstorFailback(t *testing.T) { objs := make([]*objectSDK.Object, 0, 2) for _, size := range []int{15, errSmallSize + 1} { - obj := generateObjectWithCID(t, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) obj.SetPayload(make([]byte, size)) var prm shard.PutPrm diff --git a/pkg/local_object_storage/engine/evacuate_test.go b/pkg/local_object_storage/engine/evacuate_test.go index a70a70dc4..a89f639ef 100644 --- a/pkg/local_object_storage/engine/evacuate_test.go +++ b/pkg/local_object_storage/engine/evacuate_test.go @@ -11,6 +11,7 @@ import ( objectCore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode" @@ -55,7 +56,7 @@ func newEngineEvacuate(t *testing.T, shardNum int, objPerShard int) (*StorageEng objects := make([]*objectSDK.Object, 0, objPerShard*len(ids)) for _, sh := range ids { - obj := generateObjectWithCID(t, cidtest.ID()) + obj := testutil.GenerateObjectWithCID(cidtest.ID()) objects = append(objects, obj) var putPrm shard.PutPrm @@ -65,7 +66,7 @@ func newEngineEvacuate(t *testing.T, shardNum int, objPerShard int) (*StorageEng } for i := 0; ; i++ { - objects = append(objects, generateObjectWithCID(t, cidtest.ID())) + objects = append(objects, testutil.GenerateObjectWithCID(cidtest.ID())) var putPrm PutPrm putPrm.WithObject(objects[len(objects)-1]) diff --git a/pkg/local_object_storage/engine/head_test.go b/pkg/local_object_storage/engine/head_test.go index 47f09f7a2..82feaf6f9 100644 --- a/pkg/local_object_storage/engine/head_test.go +++ b/pkg/local_object_storage/engine/head_test.go @@ -4,6 +4,7 @@ import ( "os" "testing" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -17,8 +18,8 @@ func TestHeadRaw(t *testing.T) { cnr := cidtest.ID() splitID := object.NewSplitID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "foo", "bar") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "foo", "bar") var parentAddr oid.Address parentAddr.SetContainer(cnr) @@ -26,12 +27,12 @@ func TestHeadRaw(t *testing.T) { idParent, _ := parent.ID() parentAddr.SetObject(idParent) - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) child.SetParentID(idParent) child.SetSplitID(splitID) - link := generateObjectWithCID(t, cnr) + link := testutil.GenerateObjectWithCID(cnr) link.SetParent(parent) link.SetParentID(idParent) diff --git a/pkg/local_object_storage/engine/inhume_test.go b/pkg/local_object_storage/engine/inhume_test.go index 8cf0b1667..8f7f6b07b 100644 --- a/pkg/local_object_storage/engine/inhume_test.go +++ b/pkg/local_object_storage/engine/inhume_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -20,16 +21,16 @@ func TestStorageEngine_Inhume(t *testing.T) { fs := objectSDK.SearchFilters{} fs.AddRootFilter() - tombstoneID := object.AddressOf(generateObjectWithCID(t, cnr)) - parent := generateObjectWithCID(t, cnr) + tombstoneID := object.AddressOf(testutil.GenerateObjectWithCID(cnr)) + parent := testutil.GenerateObjectWithCID(cnr) - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) child.SetSplitID(splitID) - link := generateObjectWithCID(t, cnr) + link := testutil.GenerateObjectWithCID(cnr) link.SetParent(parent) link.SetParentID(idParent) idChild, _ := child.ID() diff --git a/pkg/local_object_storage/engine/list_test.go b/pkg/local_object_storage/engine/list_test.go index 1771cf084..39ae1fba1 100644 --- a/pkg/local_object_storage/engine/list_test.go +++ b/pkg/local_object_storage/engine/list_test.go @@ -7,6 +7,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" "github.com/stretchr/testify/require" @@ -29,7 +30,7 @@ func TestListWithCursor(t *testing.T) { for i := 0; i < total; i++ { containerID := cidtest.ID() - obj := generateObjectWithCID(t, containerID) + obj := testutil.GenerateObjectWithCID(containerID) var prm PutPrm prm.WithObject(obj) diff --git a/pkg/local_object_storage/engine/lock_test.go b/pkg/local_object_storage/engine/lock_test.go index 4d3ade8ee..fbaf76ef7 100644 --- a/pkg/local_object_storage/engine/lock_test.go +++ b/pkg/local_object_storage/engine/lock_test.go @@ -9,6 +9,7 @@ import ( objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" objectcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util" @@ -41,7 +42,7 @@ func TestLockUserScenario(t *testing.T) { const lockerExpiresAfter = 13 cnr := cidtest.ID() - tombObj := generateObjectWithCID(t, cnr) + tombObj := testutil.GenerateObjectWithCID(cnr) tombForLockID := oidtest.ID() tombObj.SetID(tombForLockID) @@ -79,7 +80,7 @@ func TestLockUserScenario(t *testing.T) { a.SetKey(objectV2.SysAttributeExpEpoch) a.SetValue(strconv.Itoa(lockerExpiresAfter)) - lockerObj := generateObjectWithCID(t, cnr) + lockerObj := testutil.GenerateObjectWithCID(cnr) lockerObj.SetID(lockerID) lockerObj.SetAttributes(a) @@ -88,7 +89,7 @@ func TestLockUserScenario(t *testing.T) { tombForLockAddr.SetObject(tombForLockID) // 1. - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) id, _ := obj.ID() objAddr.SetObject(id) @@ -166,7 +167,7 @@ func TestLockExpiration(t *testing.T) { var err error // 1. - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) err = Put(e, obj) require.NoError(t, err) @@ -176,7 +177,7 @@ func TestLockExpiration(t *testing.T) { a.SetKey(objectV2.SysAttributeExpEpoch) a.SetValue(strconv.Itoa(lockerExpiresAfter)) - lock := generateObjectWithCID(t, cnr) + lock := testutil.GenerateObjectWithCID(cnr) lock.SetType(object.TypeLock) lock.SetAttributes(a) @@ -237,13 +238,13 @@ func TestLockForceRemoval(t *testing.T) { var err error // 1. - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) err = Put(e, obj) require.NoError(t, err) // 2. - lock := generateObjectWithCID(t, cnr) + lock := testutil.GenerateObjectWithCID(cnr) lock.SetType(object.TypeLock) err = Put(e, lock) diff --git a/pkg/local_object_storage/engine/tree_test.go b/pkg/local_object_storage/engine/tree_test.go index 0312e0180..ca0c7c746 100644 --- a/pkg/local_object_storage/engine/tree_test.go +++ b/pkg/local_object_storage/engine/tree_test.go @@ -4,6 +4,7 @@ import ( "strconv" "testing" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -28,8 +29,8 @@ func benchmarkTreeVsSearch(b *testing.B, objCount int) { treeID := "someTree" for i := 0; i < objCount; i++ { - obj := generateObjectWithCID(b, cid) - addAttribute(obj, pilorama.AttributeFilename, strconv.Itoa(i)) + obj := testutil.GenerateObjectWithCID(cid) + testutil.AddAttribute(obj, pilorama.AttributeFilename, strconv.Itoa(i)) err := Put(e, obj) if err != nil { b.Fatal(err) diff --git a/pkg/local_object_storage/internal/testutil/generators.go b/pkg/local_object_storage/internal/testutil/generators.go new file mode 100644 index 000000000..65b2d9902 --- /dev/null +++ b/pkg/local_object_storage/internal/testutil/generators.go @@ -0,0 +1,110 @@ +package testutil + +import ( + "encoding/binary" + + cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" + "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" + oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" + "go.uber.org/atomic" + "golang.org/x/exp/rand" +) + +// AddressGenerator is the interface of types that generate object addresses. +type AddressGenerator interface { + Next() oid.Address +} + +// SeqAddrGenerator is an AddressGenerator that generates addresses sequentially and wraps around the given max ID. +type SeqAddrGenerator struct { + cnt atomic.Uint64 + MaxID uint64 +} + +var _ AddressGenerator = &SeqAddrGenerator{} + +func (g *SeqAddrGenerator) Next() oid.Address { + var id oid.ID + binary.LittleEndian.PutUint64(id[:], ((g.cnt.Inc()-1)%g.MaxID)+1) + var addr oid.Address + addr.SetContainer(cid.ID{}) + addr.SetObject(id) + return addr +} + +// RandAddrGenerator is an addressGenerator that generates random addresses in the given range. +type RandAddrGenerator uint64 + +func (g RandAddrGenerator) Next() oid.Address { + var id oid.ID + binary.LittleEndian.PutUint64(id[:], uint64(1+int(rand.Int63n(int64(g))))) + var addr oid.Address + addr.SetContainer(cid.ID{}) + addr.SetObject(id) + return addr +} + +// ObjectGenerator is the interface of types that generate object entries. +type ObjectGenerator interface { + Next() *object.Object +} + +// SeqObjGenerator is an ObjectGenerator that generates entries with random payloads of size objSize and sequential IDs. +type SeqObjGenerator struct { + cnt atomic.Uint64 + ObjSize uint64 +} + +var _ ObjectGenerator = &SeqObjGenerator{} + +func generateObjectWithOIDWithCIDWithSize(oid oid.ID, cid cid.ID, sz uint64) *object.Object { + data := make([]byte, sz) + rand.Read(data) + obj := GenerateObjectWithCIDWithPayload(cid, data) + obj.SetID(oid) + return obj +} + +func (g *SeqObjGenerator) Next() *object.Object { + var id oid.ID + binary.LittleEndian.PutUint64(id[:], g.cnt.Inc()) + return generateObjectWithOIDWithCIDWithSize(id, cid.ID{}, g.ObjSize) +} + +// RandObjGenerator is an ObjectGenerator that generates entries with random IDs and payloads of size objSize. +type RandObjGenerator struct { + ObjSize uint64 +} + +var _ ObjectGenerator = &RandObjGenerator{} + +func (g *RandObjGenerator) Next() *object.Object { + return generateObjectWithOIDWithCIDWithSize(oid.ID{}, cid.ID{}, g.ObjSize) +} + +// OverwriteObjGenerator is an ObjectGenerator that generates entries with random payloads of size objSize and at most maxObjects distinct IDs. +type OverwriteObjGenerator struct { + ObjSize uint64 + MaxObjects uint64 +} + +func (g *OverwriteObjGenerator) Next() *object.Object { + var id oid.ID + binary.LittleEndian.PutUint64(id[:], uint64(1+rand.Int63n(int64(g.MaxObjects)))) + return generateObjectWithOIDWithCIDWithSize(id, cid.ID{}, g.ObjSize) +} + +func AddressFromObject(obj *object.Object) oid.Address { + var addr oid.Address + if id, isSet := obj.ID(); isSet { + addr.SetObject(id) + } else { + panic("object ID is not set") + } + if cid, isSet := obj.ContainerID(); isSet { + addr.SetContainer(cid) + } else { + panic("container ID is not set") + } + return addr +} diff --git a/pkg/local_object_storage/internal/testutil/generators_test.go b/pkg/local_object_storage/internal/testutil/generators_test.go new file mode 100644 index 000000000..996848d32 --- /dev/null +++ b/pkg/local_object_storage/internal/testutil/generators_test.go @@ -0,0 +1,70 @@ +package testutil + +import ( + "encoding/binary" + "testing" + + "github.com/stretchr/testify/require" + "golang.org/x/exp/slices" +) + +func TestOverwriteObjGenerator(t *testing.T) { + gen := &OverwriteObjGenerator{ + ObjSize: 10, + MaxObjects: 4, + } + for i := 0; i < 40; i++ { + obj := gen.Next() + id, isSet := obj.ID() + i := binary.LittleEndian.Uint64(id[:]) + + require.True(t, isSet) + require.Equal(t, gen.ObjSize, uint64(len(obj.Payload()))) + require.True(t, 1 <= i && i <= gen.MaxObjects) + } +} + +func TestRandObjGenerator(t *testing.T) { + gen := &RandObjGenerator{ObjSize: 10} + for i := 0; i < 10; i++ { + obj := gen.Next() + + require.Equal(t, gen.ObjSize, uint64(len(obj.Payload()))) + } +} + +func TestSeqObjGenerator(t *testing.T) { + gen := &SeqObjGenerator{ObjSize: 10} + var addrs []string + for i := 1; i <= 10; i++ { + obj := gen.Next() + id, isSet := obj.ID() + addrs = append(addrs, AddressFromObject(obj).EncodeToString()) + + require.True(t, isSet) + require.Equal(t, gen.ObjSize, uint64(len(obj.Payload()))) + require.Equal(t, uint64(i), binary.LittleEndian.Uint64(id[:])) + } + require.True(t, slices.IsSorted(addrs)) +} + +func TestRandAddrGenerator(t *testing.T) { + gen := RandAddrGenerator(5) + for i := 0; i < 50; i++ { + addr := gen.Next() + id := addr.Object() + k := binary.LittleEndian.Uint64(id[:]) + + require.True(t, 1 <= k && k <= uint64(gen)) + } +} + +func TestSeqAddrGenerator(t *testing.T) { + gen := &SeqAddrGenerator{MaxID: 10} + for i := 1; i <= 20; i++ { + addr := gen.Next() + id := addr.Object() + + require.Equal(t, uint64((i-1)%int(gen.MaxID)+1), binary.LittleEndian.Uint64(id[:])) + } +} diff --git a/pkg/local_object_storage/internal/testutil/object.go b/pkg/local_object_storage/internal/testutil/object.go new file mode 100644 index 000000000..7ef5e0b70 --- /dev/null +++ b/pkg/local_object_storage/internal/testutil/object.go @@ -0,0 +1,68 @@ +package testutil + +import ( + "crypto/sha256" + + "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum" + cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" + cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" + "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" + oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" + usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test" + "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" + "git.frostfs.info/TrueCloudLab/tzhash/tz" + "golang.org/x/exp/rand" +) + +const defaultDataSize = 32 + +func GenerateObject() *object.Object { + return GenerateObjectWithCID(cidtest.ID()) +} + +func GenerateObjectWithCID(cnr cid.ID) *object.Object { + data := make([]byte, defaultDataSize) + rand.Read(data) + return GenerateObjectWithCIDWithPayload(cnr, data) +} + +func GenerateObjectWithCIDWithPayload(cnr cid.ID, data []byte) *object.Object { + var ver version.Version + ver.SetMajor(2) + ver.SetMinor(1) + + var csum checksum.Checksum + csum.SetSHA256(sha256.Sum256(data)) + + var csumTZ checksum.Checksum + csumTZ.SetTillichZemor(tz.Sum(csum.Value())) + + obj := object.New() + obj.SetID(oidtest.ID()) + obj.SetOwnerID(usertest.ID()) + obj.SetContainerID(cnr) + obj.SetVersion(&ver) + obj.SetPayload(data) + obj.SetPayloadChecksum(csum) + obj.SetPayloadHomomorphicHash(csumTZ) + + return obj +} + +func AddAttribute(obj *object.Object, key, val string) { + var attr object.Attribute + attr.SetKey(key) + attr.SetValue(val) + + attrs := obj.Attributes() + attrs = append(attrs, attr) + obj.SetAttributes(attrs...) +} + +func AddPayload(obj *object.Object, size int) { + buf := make([]byte, size) + _, _ = rand.Read(buf) + + obj.SetPayload(buf) + obj.SetPayloadSize(uint64(size)) +} diff --git a/pkg/local_object_storage/metabase/containers_test.go b/pkg/local_object_storage/metabase/containers_test.go index 0e2aacabc..ef2bba638 100644 --- a/pkg/local_object_storage/metabase/containers_test.go +++ b/pkg/local_object_storage/metabase/containers_test.go @@ -6,6 +6,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -21,7 +22,7 @@ func TestDB_Containers(t *testing.T) { cids := make(map[string]int, N) for i := 0; i < N; i++ { - obj := generateObject(t) + obj := testutil.GenerateObject() cnr, _ := obj.ContainerID() @@ -53,7 +54,7 @@ func TestDB_Containers(t *testing.T) { } t.Run("Inhume", func(t *testing.T) { - obj := generateObject(t) + obj := testutil.GenerateObject() require.NoError(t, putBig(db, obj)) @@ -71,7 +72,7 @@ func TestDB_Containers(t *testing.T) { }) t.Run("ToMoveIt", func(t *testing.T) { - obj := generateObject(t) + obj := testutil.GenerateObject() require.NoError(t, putBig(db, obj)) @@ -107,7 +108,7 @@ func TestDB_ContainersCount(t *testing.T) { for _, upload := range uploadObjects { for i := 0; i < upload.amount; i++ { - obj := generateObject(t) + obj := testutil.GenerateObject() obj.SetType(upload.typ) err := putBig(db, obj) @@ -150,10 +151,10 @@ func TestDB_ContainerSize(t *testing.T) { for j := 0; j < N; j++ { size := rand.Intn(1024) - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) parent.SetPayloadSize(uint64(size / 2)) - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) obj.SetPayloadSize(uint64(size)) idParent, _ := parent.ID() obj.SetParentID(idParent) diff --git a/pkg/local_object_storage/metabase/control_test.go b/pkg/local_object_storage/metabase/control_test.go index a98b45103..17f3b3893 100644 --- a/pkg/local_object_storage/metabase/control_test.go +++ b/pkg/local_object_storage/metabase/control_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" @@ -16,7 +17,7 @@ func TestReset(t *testing.T) { err := db.Reset() require.NoError(t, err) - obj := generateObject(t) + obj := testutil.GenerateObject() addr := object.AddressOf(obj) addrToInhume := oidtest.Address() diff --git a/pkg/local_object_storage/metabase/counter_test.go b/pkg/local_object_storage/metabase/counter_test.go index 9729deb29..d93bc436b 100644 --- a/pkg/local_object_storage/metabase/counter_test.go +++ b/pkg/local_object_storage/metabase/counter_test.go @@ -4,6 +4,7 @@ import ( "testing" objectcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -29,7 +30,7 @@ func TestCounters(t *testing.T) { t.Run("put", func(t *testing.T) { oo := make([]*object.Object, 0, objCount) for i := 0; i < objCount; i++ { - oo = append(oo, generateObject(t)) + oo = append(oo, testutil.GenerateObject()) } var prm meta.PutPrm @@ -102,12 +103,12 @@ func TestCounters(t *testing.T) { require.NoError(t, db.Reset()) t.Run("put_split", func(t *testing.T) { - parObj := generateObject(t) + parObj := testutil.GenerateObject() // put objects and check that parent info // does not affect the counter for i := 0; i < objCount; i++ { - o := generateObject(t) + o := testutil.GenerateObject() if i < objCount/2 { // half of the objs will have the parent o.SetParent(parObj) } @@ -271,11 +272,11 @@ func TestCounters_Expired(t *testing.T) { func putObjs(t *testing.T, db *meta.DB, count int, withParent bool) []*object.Object { var prm meta.PutPrm var err error - parent := generateObject(t) + parent := testutil.GenerateObject() oo := make([]*object.Object, 0, count) for i := 0; i < count; i++ { - o := generateObject(t) + o := testutil.GenerateObject() if withParent { o.SetParent(parent) } diff --git a/pkg/local_object_storage/metabase/db_test.go b/pkg/local_object_storage/metabase/db_test.go index 3e70a30ba..cdb90cc16 100644 --- a/pkg/local_object_storage/metabase/db_test.go +++ b/pkg/local_object_storage/metabase/db_test.go @@ -6,18 +6,12 @@ import ( "testing" objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum" - checksumtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum/test" cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" - cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" - oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" - usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" - "git.frostfs.info/TrueCloudLab/tzhash/tz" "github.com/stretchr/testify/require" ) @@ -68,49 +62,13 @@ func newDB(t testing.TB, opts ...meta.Option) *meta.DB { return bdb } -func generateObject(t testing.TB) *object.Object { - return generateObjectWithCID(t, cidtest.ID()) -} - -func generateObjectWithCID(t testing.TB, cnr cid.ID) *object.Object { - var ver version.Version - ver.SetMajor(2) - ver.SetMinor(1) - - csum := checksumtest.Checksum() - - var csumTZ checksum.Checksum - csumTZ.SetTillichZemor(tz.Sum(csum.Value())) - - obj := object.New() - obj.SetID(oidtest.ID()) - obj.SetOwnerID(usertest.ID()) - obj.SetContainerID(cnr) - obj.SetVersion(&ver) - obj.SetPayloadChecksum(csum) - obj.SetPayloadHomomorphicHash(csumTZ) - obj.SetPayload([]byte{1, 2, 3, 4, 5}) - - return obj -} - -func addAttribute(obj *object.Object, key, val string) { - var attr object.Attribute - attr.SetKey(key) - attr.SetValue(val) - - attrs := obj.Attributes() - attrs = append(attrs, attr) - obj.SetAttributes(attrs...) -} - func checkExpiredObjects(t *testing.T, db *meta.DB, f func(exp, nonExp *objectSDK.Object)) { - expObj := generateObject(t) + expObj := testutil.GenerateObject() setExpiration(expObj, currEpoch-1) require.NoError(t, metaPut(db, expObj, nil)) - nonExpObj := generateObject(t) + nonExpObj := testutil.GenerateObject() setExpiration(nonExpObj, currEpoch) require.NoError(t, metaPut(db, nonExpObj, nil)) diff --git a/pkg/local_object_storage/metabase/delete_test.go b/pkg/local_object_storage/metabase/delete_test.go index 3cd314dc2..eae8b1c66 100644 --- a/pkg/local_object_storage/metabase/delete_test.go +++ b/pkg/local_object_storage/metabase/delete_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -18,10 +19,10 @@ func TestDB_Delete(t *testing.T) { db := newDB(t) cnr := cidtest.ID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "foo", "bar") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "foo", "bar") - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) @@ -44,7 +45,7 @@ func TestDB_Delete(t *testing.T) { require.NoError(t, err) // inhume parent and child so they will be on graveyard - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) err = metaInhume(db, object.AddressOf(child), object.AddressOf(ts)) require.NoError(t, err) @@ -75,15 +76,15 @@ func TestDeleteAllChildren(t *testing.T) { cnr := cidtest.ID() // generate parent object - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) // generate 2 children - child1 := generateObjectWithCID(t, cnr) + child1 := testutil.GenerateObjectWithCID(cnr) child1.SetParent(parent) idParent, _ := parent.ID() child1.SetParentID(idParent) - child2 := generateObjectWithCID(t, cnr) + child2 := testutil.GenerateObjectWithCID(cnr) child2.SetParent(parent) child2.SetParentID(idParent) diff --git a/pkg/local_object_storage/metabase/exists_test.go b/pkg/local_object_storage/metabase/exists_test.go index ddc1f47b8..66f8c2bb3 100644 --- a/pkg/local_object_storage/metabase/exists_test.go +++ b/pkg/local_object_storage/metabase/exists_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -19,14 +20,14 @@ func TestDB_Exists(t *testing.T) { db := newDB(t, meta.WithEpochState(epochState{currEpoch})) t.Run("no object", func(t *testing.T) { - nonExist := generateObject(t) + nonExist := testutil.GenerateObject() exists, err := metaExists(db, object.AddressOf(nonExist)) require.NoError(t, err) require.False(t, exists) }) t.Run("regular object", func(t *testing.T) { - regular := generateObject(t) + regular := testutil.GenerateObject() err := putBig(db, regular) require.NoError(t, err) @@ -45,7 +46,7 @@ func TestDB_Exists(t *testing.T) { }) t.Run("tombstone object", func(t *testing.T) { - ts := generateObject(t) + ts := testutil.GenerateObject() ts.SetType(objectSDK.TypeTombstone) err := putBig(db, ts) @@ -57,7 +58,7 @@ func TestDB_Exists(t *testing.T) { }) t.Run("storage group object", func(t *testing.T) { - sg := generateObject(t) + sg := testutil.GenerateObject() sg.SetType(objectSDK.TypeStorageGroup) err := putBig(db, sg) @@ -69,7 +70,7 @@ func TestDB_Exists(t *testing.T) { }) t.Run("lock object", func(t *testing.T) { - lock := generateObject(t) + lock := testutil.GenerateObject() lock.SetType(objectSDK.TypeLock) err := putBig(db, lock) @@ -82,9 +83,9 @@ func TestDB_Exists(t *testing.T) { t.Run("virtual object", func(t *testing.T) { cnr := cidtest.ID() - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) @@ -102,16 +103,16 @@ func TestDB_Exists(t *testing.T) { cnr := cidtest.ID() splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "foo", "bar") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "foo", "bar") - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) child.SetSplitID(splitID) - link := generateObjectWithCID(t, cnr) + link := testutil.GenerateObjectWithCID(cnr) link.SetParent(parent) link.SetParentID(idParent) idChild, _ := child.ID() diff --git a/pkg/local_object_storage/metabase/get_test.go b/pkg/local_object_storage/metabase/get_test.go index 0cfef27fe..d647910d5 100644 --- a/pkg/local_object_storage/metabase/get_test.go +++ b/pkg/local_object_storage/metabase/get_test.go @@ -9,6 +9,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -21,11 +22,11 @@ import ( func TestDB_Get(t *testing.T) { db := newDB(t, meta.WithEpochState(epochState{currEpoch})) - raw := generateObject(t) + raw := testutil.GenerateObject() // equal fails on diff of attributes and <{}> attributes, /* so we make non empty attribute slice in parent*/ - addAttribute(raw, "foo", "bar") + testutil.AddAttribute(raw, "foo", "bar") t.Run("object not found", func(t *testing.T) { _, err := metaGet(db, object.AddressOf(raw), false) @@ -81,10 +82,10 @@ func TestDB_Get(t *testing.T) { cnr := cidtest.ID() splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "foo", "bar") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "foo", "bar") - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) @@ -195,7 +196,7 @@ func benchmarkGet(b *testing.B, numOfObj int) { addrs := make([]oid.Address, 0, numOfObj) for i := 0; i < numOfObj; i++ { - raw := generateObject(b) + raw := testutil.GenerateObject() addrs = append(addrs, object.AddressOf(raw)) err := putBig(db, raw) diff --git a/pkg/local_object_storage/metabase/graveyard_test.go b/pkg/local_object_storage/metabase/graveyard_test.go index e18ef9114..b8b665541 100644 --- a/pkg/local_object_storage/metabase/graveyard_test.go +++ b/pkg/local_object_storage/metabase/graveyard_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" @@ -39,8 +40,8 @@ func TestDB_IterateDeletedObjects_EmptyDB(t *testing.T) { func TestDB_Iterate_OffsetNotFound(t *testing.T) { db := newDB(t) - obj1 := generateObject(t) - obj2 := generateObject(t) + obj1 := testutil.GenerateObject() + obj2 := testutil.GenerateObject() var addr1 oid.Address err := addr1.DecodeString("AUSF6rhReoAdPVKYUZWW9o2LbtTvekn54B3JXi7pdzmn/2daLhLB7yVXbjBaKkckkuvjX22BxRYuSHy9RPxuH9PZS") @@ -110,10 +111,10 @@ func TestDB_IterateDeletedObjects(t *testing.T) { db := newDB(t) // generate and put 4 objects - obj1 := generateObject(t) - obj2 := generateObject(t) - obj3 := generateObject(t) - obj4 := generateObject(t) + obj1 := testutil.GenerateObject() + obj2 := testutil.GenerateObject() + obj3 := testutil.GenerateObject() + obj4 := testutil.GenerateObject() var err error @@ -196,10 +197,10 @@ func TestDB_IterateOverGraveyard_Offset(t *testing.T) { db := newDB(t) // generate and put 4 objects - obj1 := generateObject(t) - obj2 := generateObject(t) - obj3 := generateObject(t) - obj4 := generateObject(t) + obj1 := testutil.GenerateObject() + obj2 := testutil.GenerateObject() + obj3 := testutil.GenerateObject() + obj4 := testutil.GenerateObject() var err error @@ -294,10 +295,10 @@ func TestDB_IterateOverGarbage_Offset(t *testing.T) { db := newDB(t) // generate and put 4 objects - obj1 := generateObject(t) - obj2 := generateObject(t) - obj3 := generateObject(t) - obj4 := generateObject(t) + obj1 := testutil.GenerateObject() + obj2 := testutil.GenerateObject() + obj3 := testutil.GenerateObject() + obj4 := testutil.GenerateObject() var err error @@ -385,8 +386,8 @@ func TestDB_DropGraves(t *testing.T) { db := newDB(t) // generate and put 2 objects - obj1 := generateObject(t) - obj2 := generateObject(t) + obj1 := testutil.GenerateObject() + obj2 := testutil.GenerateObject() var err error diff --git a/pkg/local_object_storage/metabase/inhume_test.go b/pkg/local_object_storage/metabase/inhume_test.go index 09b101ad8..b7ee5ef29 100644 --- a/pkg/local_object_storage/metabase/inhume_test.go +++ b/pkg/local_object_storage/metabase/inhume_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -14,8 +15,8 @@ import ( func TestDB_Inhume(t *testing.T) { db := newDB(t) - raw := generateObject(t) - addAttribute(raw, "foo", "bar") + raw := testutil.GenerateObject() + testutil.AddAttribute(raw, "foo", "bar") tombstoneID := oidtest.Address() diff --git a/pkg/local_object_storage/metabase/iterators_test.go b/pkg/local_object_storage/metabase/iterators_test.go index 3c3d0ea50..6b3a3612d 100644 --- a/pkg/local_object_storage/metabase/iterators_test.go +++ b/pkg/local_object_storage/metabase/iterators_test.go @@ -6,6 +6,7 @@ import ( objectV2 "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" object2 "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" @@ -56,9 +57,9 @@ func TestDB_IterateExpired(t *testing.T) { } func putWithExpiration(t *testing.T, db *meta.DB, typ object.Type, expiresAt uint64) oid.Address { - obj := generateObject(t) + obj := testutil.GenerateObject() obj.SetType(typ) - addAttribute(obj, objectV2.SysAttributeExpEpoch, strconv.FormatUint(expiresAt, 10)) + testutil.AddAttribute(obj, objectV2.SysAttributeExpEpoch, strconv.FormatUint(expiresAt, 10)) require.NoError(t, putBig(db, obj)) diff --git a/pkg/local_object_storage/metabase/list_test.go b/pkg/local_object_storage/metabase/list_test.go index d18f101ad..ab2d9d75d 100644 --- a/pkg/local_object_storage/metabase/list_test.go +++ b/pkg/local_object_storage/metabase/list_test.go @@ -6,6 +6,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -32,7 +33,7 @@ func listWithCursorPrepareDB(b *testing.B) *meta.DB { NoSync: true, })) // faster single-thread generation - obj := generateObject(b) + obj := testutil.GenerateObject() for i := 0; i < 100_000; i++ { // should be a multiple of all batch sizes obj.SetID(oidtest.ID()) if i%9 == 0 { // let's have 9 objects per container @@ -79,47 +80,47 @@ func TestLisObjectsWithCursor(t *testing.T) { containerID := cidtest.ID() // add one regular object - obj := generateObjectWithCID(t, containerID) + obj := testutil.GenerateObjectWithCID(containerID) obj.SetType(objectSDK.TypeRegular) err := putBig(db, obj) require.NoError(t, err) expected = append(expected, object.AddressWithType{Address: object.AddressOf(obj), Type: objectSDK.TypeRegular}) // add one tombstone - obj = generateObjectWithCID(t, containerID) + obj = testutil.GenerateObjectWithCID(containerID) obj.SetType(objectSDK.TypeTombstone) err = putBig(db, obj) require.NoError(t, err) expected = append(expected, object.AddressWithType{Address: object.AddressOf(obj), Type: objectSDK.TypeTombstone}) // add one storage group - obj = generateObjectWithCID(t, containerID) + obj = testutil.GenerateObjectWithCID(containerID) obj.SetType(objectSDK.TypeStorageGroup) err = putBig(db, obj) require.NoError(t, err) expected = append(expected, object.AddressWithType{Address: object.AddressOf(obj), Type: objectSDK.TypeStorageGroup}) // add one lock - obj = generateObjectWithCID(t, containerID) + obj = testutil.GenerateObjectWithCID(containerID) obj.SetType(objectSDK.TypeLock) err = putBig(db, obj) require.NoError(t, err) expected = append(expected, object.AddressWithType{Address: object.AddressOf(obj), Type: objectSDK.TypeLock}) // add one inhumed (do not include into expected) - obj = generateObjectWithCID(t, containerID) + obj = testutil.GenerateObjectWithCID(containerID) obj.SetType(objectSDK.TypeRegular) err = putBig(db, obj) require.NoError(t, err) - ts := generateObjectWithCID(t, containerID) + ts := testutil.GenerateObjectWithCID(containerID) err = metaInhume(db, object.AddressOf(obj), object.AddressOf(ts)) require.NoError(t, err) // add one child object (do not include parent into expected) splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, containerID) - addAttribute(parent, "foo", "bar") - child := generateObjectWithCID(t, containerID) + parent := testutil.GenerateObjectWithCID(containerID) + testutil.AddAttribute(parent, "foo", "bar") + child := testutil.GenerateObjectWithCID(containerID) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) @@ -173,7 +174,7 @@ func TestAddObjectDuringListingWithCursor(t *testing.T) { // fill metabase with objects for i := 0; i < total; i++ { - obj := generateObject(t) + obj := testutil.GenerateObject() err := putBig(db, obj) require.NoError(t, err) expected[object.AddressOf(obj).EncodeToString()] = 0 @@ -190,7 +191,7 @@ func TestAddObjectDuringListingWithCursor(t *testing.T) { // add new objects for i := 0; i < total; i++ { - obj := generateObject(t) + obj := testutil.GenerateObject() err = putBig(db, obj) require.NoError(t, err) } diff --git a/pkg/local_object_storage/metabase/lock_test.go b/pkg/local_object_storage/metabase/lock_test.go index 9cfa9c5bc..d815b7112 100644 --- a/pkg/local_object_storage/metabase/lock_test.go +++ b/pkg/local_object_storage/metabase/lock_test.go @@ -4,6 +4,7 @@ import ( "testing" objectcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -242,7 +243,7 @@ func putAndLockObj(t *testing.T, db *meta.DB, numOfLockedObjs int) ([]*object.Ob lockedObjIDs := make([]oid.ID, 0, numOfLockedObjs) for i := 0; i < numOfLockedObjs; i++ { - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) err := putBig(db, obj) require.NoError(t, err) @@ -252,7 +253,7 @@ func putAndLockObj(t *testing.T, db *meta.DB, numOfLockedObjs int) ([]*object.Ob lockedObjIDs = append(lockedObjIDs, id) } - lockObj := generateObjectWithCID(t, cnr) + lockObj := testutil.GenerateObjectWithCID(cnr) lockID, _ := lockObj.ID() lockObj.SetType(object.TypeLock) diff --git a/pkg/local_object_storage/metabase/movable_test.go b/pkg/local_object_storage/metabase/movable_test.go index 7564f81bd..6918dec29 100644 --- a/pkg/local_object_storage/metabase/movable_test.go +++ b/pkg/local_object_storage/metabase/movable_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/stretchr/testify/require" @@ -12,8 +13,8 @@ import ( func TestDB_Movable(t *testing.T) { db := newDB(t) - raw1 := generateObject(t) - raw2 := generateObject(t) + raw1 := testutil.GenerateObject() + raw2 := testutil.GenerateObject() // put two objects in metabase err := putBig(db, raw1) diff --git a/pkg/local_object_storage/metabase/put_test.go b/pkg/local_object_storage/metabase/put_test.go index 89b0a53b8..837d931ae 100644 --- a/pkg/local_object_storage/metabase/put_test.go +++ b/pkg/local_object_storage/metabase/put_test.go @@ -7,6 +7,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/rand" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -21,7 +22,7 @@ func prepareObjects(t testing.TB, n int) []*objectSDK.Object { parentID := objecttest.ID() objs := make([]*objectSDK.Object, n) for i := range objs { - objs[i] = generateObjectWithCID(t, cnr) + objs[i] = testutil.GenerateObjectWithCID(cnr) // FKBT indices. attrs := make([]objectSDK.Attribute, 20) @@ -78,7 +79,7 @@ func BenchmarkPut(b *testing.B) { func TestDB_PutBlobovnicaUpdate(t *testing.T) { db := newDB(t) - raw1 := generateObject(t) + raw1 := testutil.GenerateObject() storageID := []byte{1, 2, 3, 4} // put one object with storageID @@ -101,7 +102,7 @@ func TestDB_PutBlobovnicaUpdate(t *testing.T) { }) t.Run("update storageID on bad object", func(t *testing.T) { - raw2 := generateObject(t) + raw2 := testutil.GenerateObject() err := putBig(db, raw2) require.NoError(t, err) diff --git a/pkg/local_object_storage/metabase/select_test.go b/pkg/local_object_storage/metabase/select_test.go index 685432bb0..5d4cc75e5 100644 --- a/pkg/local_object_storage/metabase/select_test.go +++ b/pkg/local_object_storage/metabase/select_test.go @@ -7,6 +7,7 @@ import ( v2object "git.frostfs.info/TrueCloudLab/frostfs-api-go/v2/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" cidSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -22,40 +23,40 @@ func TestDB_SelectUserAttributes(t *testing.T) { cnr := cidtest.ID() - raw1 := generateObjectWithCID(t, cnr) - addAttribute(raw1, "foo", "bar") - addAttribute(raw1, "x", "y") + raw1 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw1, "foo", "bar") + testutil.AddAttribute(raw1, "x", "y") err := putBig(db, raw1) require.NoError(t, err) - raw2 := generateObjectWithCID(t, cnr) - addAttribute(raw2, "foo", "bar") - addAttribute(raw2, "x", "z") + raw2 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw2, "foo", "bar") + testutil.AddAttribute(raw2, "x", "z") err = putBig(db, raw2) require.NoError(t, err) - raw3 := generateObjectWithCID(t, cnr) - addAttribute(raw3, "a", "b") + raw3 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw3, "a", "b") err = putBig(db, raw3) require.NoError(t, err) - raw4 := generateObjectWithCID(t, cnr) - addAttribute(raw4, "path", "test/1/2") + raw4 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw4, "path", "test/1/2") err = putBig(db, raw4) require.NoError(t, err) - raw5 := generateObjectWithCID(t, cnr) - addAttribute(raw5, "path", "test/1/3") + raw5 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw5, "path", "test/1/3") err = putBig(db, raw5) require.NoError(t, err) - raw6 := generateObjectWithCID(t, cnr) - addAttribute(raw6, "path", "test/2/3") + raw6 := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(raw6, "path", "test/2/3") err = putBig(db, raw6) require.NoError(t, err) @@ -146,40 +147,40 @@ func TestDB_SelectRootPhyParent(t *testing.T) { // prepare - small := generateObjectWithCID(t, cnr) + small := testutil.GenerateObjectWithCID(cnr) err := putBig(db, small) require.NoError(t, err) - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) ts.SetType(objectSDK.TypeTombstone) err = putBig(db, ts) require.NoError(t, err) - sg := generateObjectWithCID(t, cnr) + sg := testutil.GenerateObjectWithCID(cnr) sg.SetType(objectSDK.TypeStorageGroup) err = putBig(db, sg) require.NoError(t, err) - leftChild := generateObjectWithCID(t, cnr) + leftChild := testutil.GenerateObjectWithCID(cnr) leftChild.InitRelations() err = putBig(db, leftChild) require.NoError(t, err) - lock := generateObjectWithCID(t, cnr) + lock := testutil.GenerateObjectWithCID(cnr) lock.SetType(objectSDK.TypeLock) err = putBig(db, lock) require.NoError(t, err) - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) - rightChild := generateObjectWithCID(t, cnr) + rightChild := testutil.GenerateObjectWithCID(cnr) rightChild.SetParent(parent) idParent, _ := parent.ID() rightChild.SetParentID(idParent) err = putBig(db, rightChild) require.NoError(t, err) - link := generateObjectWithCID(t, cnr) + link := testutil.GenerateObjectWithCID(cnr) link.SetParent(parent) link.SetParentID(idParent) idLeftChild, _ := leftChild.ID() @@ -326,11 +327,11 @@ func TestDB_SelectInhume(t *testing.T) { cnr := cidtest.ID() - raw1 := generateObjectWithCID(t, cnr) + raw1 := testutil.GenerateObjectWithCID(cnr) err := putBig(db, raw1) require.NoError(t, err) - raw2 := generateObjectWithCID(t, cnr) + raw2 := testutil.GenerateObjectWithCID(cnr) err = putBig(db, raw2) require.NoError(t, err) @@ -358,11 +359,11 @@ func TestDB_SelectPayloadHash(t *testing.T) { cnr := cidtest.ID() - raw1 := generateObjectWithCID(t, cnr) + raw1 := testutil.GenerateObjectWithCID(cnr) err := putBig(db, raw1) require.NoError(t, err) - raw2 := generateObjectWithCID(t, cnr) + raw2 := testutil.GenerateObjectWithCID(cnr) err = putBig(db, raw2) require.NoError(t, err) @@ -433,14 +434,14 @@ func TestDB_SelectWithSlowFilters(t *testing.T) { v21.SetMajor(2) v21.SetMinor(1) - raw1 := generateObjectWithCID(t, cnr) + raw1 := testutil.GenerateObjectWithCID(cnr) raw1.SetPayloadSize(10) raw1.SetCreationEpoch(11) raw1.SetVersion(v20) err := putBig(db, raw1) require.NoError(t, err) - raw2 := generateObjectWithCID(t, cnr) + raw2 := testutil.GenerateObjectWithCID(cnr) raw2.SetPayloadSize(20) raw2.SetCreationEpoch(21) raw2.SetVersion(&v21) @@ -533,9 +534,9 @@ func TestDB_SelectObjectID(t *testing.T) { // prepare - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) - regular := generateObjectWithCID(t, cnr) + regular := testutil.GenerateObjectWithCID(cnr) idParent, _ := parent.ID() regular.SetParentID(idParent) regular.SetParent(parent) @@ -543,23 +544,23 @@ func TestDB_SelectObjectID(t *testing.T) { err := putBig(db, regular) require.NoError(t, err) - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) ts.SetType(objectSDK.TypeTombstone) err = putBig(db, ts) require.NoError(t, err) - sg := generateObjectWithCID(t, cnr) + sg := testutil.GenerateObjectWithCID(cnr) sg.SetType(objectSDK.TypeStorageGroup) err = putBig(db, sg) require.NoError(t, err) - lock := generateObjectWithCID(t, cnr) + lock := testutil.GenerateObjectWithCID(cnr) lock.SetType(objectSDK.TypeLock) err = putBig(db, lock) require.NoError(t, err) t.Run("not found objects", func(t *testing.T) { - raw := generateObjectWithCID(t, cnr) + raw := testutil.GenerateObjectWithCID(cnr) id, _ := raw.ID() @@ -671,9 +672,9 @@ func TestDB_SelectSplitID(t *testing.T) { cnr := cidtest.ID() - child1 := generateObjectWithCID(t, cnr) - child2 := generateObjectWithCID(t, cnr) - child3 := generateObjectWithCID(t, cnr) + child1 := testutil.GenerateObjectWithCID(cnr) + child2 := testutil.GenerateObjectWithCID(cnr) + child3 := testutil.GenerateObjectWithCID(cnr) split1 := objectSDK.NewSplitID() split2 := objectSDK.NewSplitID() @@ -725,11 +726,11 @@ func TestDB_SelectContainerID(t *testing.T) { cnr := cidtest.ID() - obj1 := generateObjectWithCID(t, cnr) + obj1 := testutil.GenerateObjectWithCID(cnr) err := putBig(db, obj1) require.NoError(t, err) - obj2 := generateObjectWithCID(t, cnr) + obj2 := testutil.GenerateObjectWithCID(cnr) err = putBig(db, obj2) require.NoError(t, err) @@ -775,7 +776,7 @@ func BenchmarkSelect(b *testing.B) { var attr objectSDK.Attribute attr.SetKey("myHeader") attr.SetValue(strconv.Itoa(i)) - obj := generateObjectWithCID(b, cid) + obj := testutil.GenerateObjectWithCID(cid) obj.SetAttributes(attr) require.NoError(b, metaPut(db, obj, nil)) } diff --git a/pkg/local_object_storage/metabase/storage_id_test.go b/pkg/local_object_storage/metabase/storage_id_test.go index 8ab61a13d..f8185abee 100644 --- a/pkg/local_object_storage/metabase/storage_id_test.go +++ b/pkg/local_object_storage/metabase/storage_id_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id" "github.com/stretchr/testify/require" @@ -12,8 +13,8 @@ import ( func TestDB_StorageID(t *testing.T) { db := newDB(t) - raw1 := generateObject(t) - raw2 := generateObject(t) + raw1 := testutil.GenerateObject() + raw2 := testutil.GenerateObject() storageID := []byte{1, 2, 3, 4} diff --git a/pkg/local_object_storage/shard/delete_test.go b/pkg/local_object_storage/shard/delete_test.go index b1574ab8b..9115f3e0d 100644 --- a/pkg/local_object_storage/shard/delete_test.go +++ b/pkg/local_object_storage/shard/delete_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -26,14 +27,14 @@ func testShardDelete(t *testing.T, hasWriteCache bool) { cnr := cidtest.ID() - obj := generateObjectWithCID(t, cnr) - addAttribute(obj, "foo", "bar") + obj := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(obj, "foo", "bar") var putPrm shard.PutPrm var getPrm shard.GetPrm t.Run("big object", func(t *testing.T) { - addPayload(obj, 1<<20) + testutil.AddPayload(obj, 1<<20) putPrm.SetObject(obj) getPrm.SetAddress(object.AddressOf(obj)) @@ -55,9 +56,9 @@ func testShardDelete(t *testing.T, hasWriteCache bool) { }) t.Run("small object", func(t *testing.T) { - obj := generateObjectWithCID(t, cnr) - addAttribute(obj, "foo", "bar") - addPayload(obj, 1<<5) + obj := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(obj, "foo", "bar") + testutil.AddPayload(obj, 1<<5) putPrm.SetObject(obj) getPrm.SetAddress(object.AddressOf(obj)) diff --git a/pkg/local_object_storage/shard/dump_test.go b/pkg/local_object_storage/shard/dump_test.go index 96802d4ab..9ca82a7a0 100644 --- a/pkg/local_object_storage/shard/dump_test.go +++ b/pkg/local_object_storage/shard/dump_test.go @@ -14,6 +14,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/blobovniczatree" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard/mode" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache" @@ -97,7 +98,7 @@ func testDump(t *testing.T, objCount int, hasWriteCache bool) { } data := make([]byte, size) rand.Read(data) - obj := generateObjectWithPayload(cnr, data) + obj := testutil.GenerateObjectWithCIDWithPayload(cnr, data) objects[i] = obj var prm shard.PutPrm @@ -227,7 +228,7 @@ func TestStream(t *testing.T) { objects := make([]*objectSDK.Object, objCount) for i := 0; i < objCount; i++ { cnr := cidtest.ID() - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) objects[i] = obj var prm shard.PutPrm @@ -326,7 +327,7 @@ func TestDumpIgnoreErrors(t *testing.T) { objects := make([]*objectSDK.Object, objCount) for i := 0; i < objCount; i++ { size := (wcSmallObjectSize << (i % 4)) - headerSize - obj := generateObjectWithPayload(cidtest.ID(), make([]byte, size)) + obj := testutil.GenerateObjectWithPayload(cidtest.ID(), make([]byte, size)) objects[i] = obj var prm shard.PutPrm diff --git a/pkg/local_object_storage/shard/get_test.go b/pkg/local_object_storage/shard/get_test.go index 5e1914a06..9d1975331 100644 --- a/pkg/local_object_storage/shard/get_test.go +++ b/pkg/local_object_storage/shard/get_test.go @@ -7,6 +7,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -32,9 +33,9 @@ func testShardGet(t *testing.T, hasWriteCache bool) { var getPrm shard.GetPrm t.Run("small object", func(t *testing.T) { - obj := generateObject(t) - addAttribute(obj, "foo", "bar") - addPayload(obj, 1<<5) + obj := testutil.GenerateObject() + testutil.AddAttribute(obj, "foo", "bar") + testutil.AddPayload(obj, 1<<5) putPrm.SetObject(obj) @@ -49,10 +50,10 @@ func testShardGet(t *testing.T, hasWriteCache bool) { }) t.Run("big object", func(t *testing.T) { - obj := generateObject(t) - addAttribute(obj, "foo", "bar") + obj := testutil.GenerateObject() + testutil.AddAttribute(obj, "foo", "bar") obj.SetID(oidtest.ID()) - addPayload(obj, 1<<20) // big obj + testutil.AddPayload(obj, 1<<20) // big obj putPrm.SetObject(obj) @@ -67,20 +68,20 @@ func testShardGet(t *testing.T, hasWriteCache bool) { }) t.Run("parent object", func(t *testing.T) { - obj := generateObject(t) - addAttribute(obj, "foo", "bar") + obj := testutil.GenerateObject() + testutil.AddAttribute(obj, "foo", "bar") cnr := cidtest.ID() splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "parent", "attribute") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "parent", "attribute") - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) child.SetSplitID(splitID) - addPayload(child, 1<<5) + testutil.AddPayload(child, 1<<5) putPrm.SetObject(child) diff --git a/pkg/local_object_storage/shard/head_test.go b/pkg/local_object_storage/shard/head_test.go index a0862bd01..36c8915b5 100644 --- a/pkg/local_object_storage/shard/head_test.go +++ b/pkg/local_object_storage/shard/head_test.go @@ -6,6 +6,7 @@ import ( "time" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" @@ -30,8 +31,8 @@ func testShardHead(t *testing.T, hasWriteCache bool) { var headPrm shard.HeadPrm t.Run("regular object", func(t *testing.T) { - obj := generateObject(t) - addAttribute(obj, "foo", "bar") + obj := testutil.GenerateObject() + testutil.AddAttribute(obj, "foo", "bar") putPrm.SetObject(obj) @@ -49,10 +50,10 @@ func testShardHead(t *testing.T, hasWriteCache bool) { cnr := cidtest.ID() splitID := objectSDK.NewSplitID() - parent := generateObjectWithCID(t, cnr) - addAttribute(parent, "foo", "bar") + parent := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(parent, "foo", "bar") - child := generateObjectWithCID(t, cnr) + child := testutil.GenerateObjectWithCID(cnr) child.SetParent(parent) idParent, _ := parent.ID() child.SetParentID(idParent) diff --git a/pkg/local_object_storage/shard/inhume_test.go b/pkg/local_object_storage/shard/inhume_test.go index 8f673c7a8..fca613941 100644 --- a/pkg/local_object_storage/shard/inhume_test.go +++ b/pkg/local_object_storage/shard/inhume_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" apistatus "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/client/status" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -26,10 +27,10 @@ func testShardInhume(t *testing.T, hasWriteCache bool) { cnr := cidtest.ID() - obj := generateObjectWithCID(t, cnr) - addAttribute(obj, "foo", "bar") + obj := testutil.GenerateObjectWithCID(cnr) + testutil.AddAttribute(obj, "foo", "bar") - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) var putPrm shard.PutPrm putPrm.SetObject(obj) diff --git a/pkg/local_object_storage/shard/list_test.go b/pkg/local_object_storage/shard/list_test.go index fd669ee9d..33c9e489a 100644 --- a/pkg/local_object_storage/shard/list_test.go +++ b/pkg/local_object_storage/shard/list_test.go @@ -4,6 +4,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "github.com/stretchr/testify/require" @@ -38,11 +39,11 @@ func testShardList(t *testing.T, sh *shard.Shard) { cnr := cidtest.ID() for j := 0; j < N; j++ { - obj := generateObjectWithCID(t, cnr) - addPayload(obj, 1<<2) + obj := testutil.GenerateObjectWithCID(cnr) + testutil.AddPayload(obj, 1<<2) // add parent as virtual object, it must be ignored in List() - parent := generateObjectWithCID(t, cnr) + parent := testutil.GenerateObjectWithCID(cnr) idParent, _ := parent.ID() obj.SetParentID(idParent) obj.SetParent(parent) diff --git a/pkg/local_object_storage/shard/lock_test.go b/pkg/local_object_storage/shard/lock_test.go index a16b7f547..0bf1c8909 100644 --- a/pkg/local_object_storage/shard/lock_test.go +++ b/pkg/local_object_storage/shard/lock_test.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/blobovniczatree" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" @@ -62,10 +63,10 @@ func TestShard_Lock(t *testing.T) { }) cnr := cidtest.ID() - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) objID, _ := obj.ID() - lock := generateObjectWithCID(t, cnr) + lock := testutil.GenerateObjectWithCID(cnr) lock.SetType(object.TypeLock) lockID, _ := lock.ID() @@ -87,7 +88,7 @@ func TestShard_Lock(t *testing.T) { require.NoError(t, err) t.Run("inhuming locked objects", func(t *testing.T) { - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) var inhumePrm shard.InhumePrm inhumePrm.SetTarget(objectcore.AddressOf(ts), objectcore.AddressOf(obj)) @@ -101,7 +102,7 @@ func TestShard_Lock(t *testing.T) { }) t.Run("inhuming lock objects", func(t *testing.T) { - ts := generateObjectWithCID(t, cnr) + ts := testutil.GenerateObjectWithCID(cnr) var inhumePrm shard.InhumePrm inhumePrm.SetTarget(objectcore.AddressOf(ts), objectcore.AddressOf(lock)) @@ -145,7 +146,7 @@ func TestShard_IsLocked(t *testing.T) { sh := newShard(t, false) cnr := cidtest.ID() - obj := generateObjectWithCID(t, cnr) + obj := testutil.GenerateObjectWithCID(cnr) cnrID, _ := obj.ContainerID() objID, _ := obj.ID() diff --git a/pkg/local_object_storage/shard/metrics_test.go b/pkg/local_object_storage/shard/metrics_test.go index 13d839eee..426259107 100644 --- a/pkg/local_object_storage/shard/metrics_test.go +++ b/pkg/local_object_storage/shard/metrics_test.go @@ -7,6 +7,7 @@ import ( objectcore "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" meta "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/metabase" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/pilorama" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" @@ -82,7 +83,7 @@ func TestCounters(t *testing.T) { const objNumber = 10 oo := make([]*object.Object, objNumber) for i := 0; i < objNumber; i++ { - oo[i] = generateObject(t) + oo[i] = testutil.GenerateObject() } t.Run("defaults", func(t *testing.T) { @@ -139,7 +140,7 @@ func TestCounters(t *testing.T) { t.Run("inhume_TS", func(t *testing.T) { var prm shard.InhumePrm - ts := objectcore.AddressOf(generateObject(t)) + ts := objectcore.AddressOf(testutil.GenerateObject()) phy := mm.objCounters[physical] logic := mm.objCounters[logical] diff --git a/pkg/local_object_storage/shard/range_test.go b/pkg/local_object_storage/shard/range_test.go index 328a217dd..6782dca1e 100644 --- a/pkg/local_object_storage/shard/range_test.go +++ b/pkg/local_object_storage/shard/range_test.go @@ -9,6 +9,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/blobovniczatree" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/fstree" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" @@ -87,9 +88,9 @@ func testShardGetRange(t *testing.T, hasWriteCache bool) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - obj := generateObject(t) - addAttribute(obj, "foo", "bar") - addPayload(obj, tc.payloadSize) + obj := testutil.GenerateObject() + testutil.AddAttribute(obj, "foo", "bar") + testutil.AddPayload(obj, tc.payloadSize) addr := object.AddressOf(obj) payload := slice.Copy(obj.Payload()) diff --git a/pkg/local_object_storage/shard/shard_test.go b/pkg/local_object_storage/shard/shard_test.go index 2a98dabb0..5a04058a6 100644 --- a/pkg/local_object_storage/shard/shard_test.go +++ b/pkg/local_object_storage/shard/shard_test.go @@ -1,8 +1,6 @@ package shard_test import ( - "crypto/sha256" - "math/rand" "path/filepath" "testing" @@ -14,14 +12,7 @@ import ( "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/checksum" - cid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id" - cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" - oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" - usertest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/user/test" - "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/version" - "git.frostfs.info/TrueCloudLab/tzhash/tz" "github.com/stretchr/testify/require" "go.uber.org/zap" "go.uber.org/zap/zaptest" @@ -97,54 +88,3 @@ func newCustomShard(t testing.TB, rootPath string, enableWriteCache bool, wcOpts func releaseShard(s *shard.Shard, t testing.TB) { require.NoError(t, s.Close()) } - -func generateObject(t *testing.T) *object.Object { - return generateObjectWithCID(t, cidtest.ID()) -} - -func generateObjectWithCID(t *testing.T, cnr cid.ID) *object.Object { - data := make([]byte, 32) - rand.Read(data) - return generateObjectWithPayload(cnr, data) -} - -func generateObjectWithPayload(cnr cid.ID, data []byte) *object.Object { - var ver version.Version - ver.SetMajor(2) - ver.SetMinor(1) - - var csum checksum.Checksum - csum.SetSHA256(sha256.Sum256(data)) - - var csumTZ checksum.Checksum - csumTZ.SetTillichZemor(tz.Sum(csum.Value())) - - obj := object.New() - obj.SetID(oidtest.ID()) - obj.SetOwnerID(usertest.ID()) - obj.SetContainerID(cnr) - obj.SetVersion(&ver) - obj.SetPayload(data) - obj.SetPayloadChecksum(csum) - obj.SetPayloadHomomorphicHash(csumTZ) - - return obj -} - -func addAttribute(obj *object.Object, key, val string) { - var attr object.Attribute - attr.SetKey(key) - attr.SetValue(val) - - attrs := obj.Attributes() - attrs = append(attrs, attr) - obj.SetAttributes(attrs...) -} - -func addPayload(obj *object.Object, size int) { - buf := make([]byte, size) - _, _ = rand.Read(buf) - - obj.SetPayload(buf) - obj.SetPayloadSize(uint64(size)) -} diff --git a/pkg/local_object_storage/shard/shutdown_test.go b/pkg/local_object_storage/shard/shutdown_test.go index f7f7b2ca4..57a982684 100644 --- a/pkg/local_object_storage/shard/shutdown_test.go +++ b/pkg/local_object_storage/shard/shutdown_test.go @@ -5,6 +5,7 @@ import ( "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/object" + "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/shard" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache" cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test" @@ -27,7 +28,7 @@ func TestWriteCacheObjectLoss(t *testing.T) { data := make([]byte, size) rand.Read(data) - objects[i] = generateObjectWithPayload(cidtest.ID(), data) + objects[i] = testutil.GenerateObjectWithCIDWithPayload(cidtest.ID(), data) } dir := t.TempDir()