package shard 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/writecache" 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 := []writecache.Option{ writecache.WithMaxObjectSize(smallSize * 2), } sh := newCustomShard(t, true, shardOptions{rootPath: dir, wcOpts: wcOpts}) var errG errgroup.Group for i := range objects { obj := objects[i] errG.Go(func() error { var putPrm PutPrm putPrm.SetObject(obj) _, err := sh.Put(context.Background(), putPrm) return err }) } require.NoError(t, errG.Wait()) require.NoError(t, sh.Close(context.Background())) sh = newCustomShard(t, true, shardOptions{rootPath: dir, wcOpts: wcOpts}) defer func() { require.NoError(t, sh.Close(context.Background())) }() var getPrm GetPrm for i := range objects { getPrm.SetAddress(object.AddressOf(objects[i])) _, err := sh.Get(context.Background(), getPrm) require.NoError(t, err, i) } }