package shard_test import ( "context" "crypto/rand" "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" writecacheconfig "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache/config" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/writecache/writecachebbolt" 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" "golang.org/x/sync/errgroup" ) func TestWriteCacheObjectLoss(t *testing.T) { t.Parallel() const ( smallSize = 1024 objCount = 100 ) objects := make([]*objectSDK.Object, objCount) for i := range objects { size := smallSize // if i%2 == 0 { size = smallSize / 2 // } data := make([]byte, size) rand.Read(data) objects[i] = testutil.GenerateObjectWithCIDWithPayload(cidtest.ID(), data) } dir := t.TempDir() wcOpts := writecacheconfig.Options{ Type: writecacheconfig.TypeBBolt, BBoltOptions: []writecachebbolt.Option{ writecachebbolt.WithMaxObjectSize(smallSize * 2), }, } sh := newCustomShard(t, dir, true, wcOpts, nil, nil) var errG errgroup.Group for i := range objects { obj := objects[i] errG.Go(func() error { var putPrm shard.PutPrm putPrm.SetObject(obj) _, err := sh.Put(context.Background(), putPrm) return err }) } require.NoError(t, errG.Wait()) require.NoError(t, sh.Close()) sh = newCustomShard(t, dir, true, wcOpts, nil, nil) defer releaseShard(sh, t) var getPrm shard.GetPrm for i := range objects { getPrm.SetAddress(object.AddressOf(objects[i])) _, err := sh.Get(context.Background(), getPrm) require.NoError(t, err, i) } }