package fstree import ( "context" "errors" "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/util/logicerr" objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object" oidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id/test" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" ) func TestAddressToString(t *testing.T) { addr := oidtest.Address() s := stringifyAddress(addr) actual, err := addressFromString(s) require.NoError(t, err) require.Equal(t, addr, actual) } func Benchmark_addressFromString(b *testing.B) { addr := oidtest.Address() s := stringifyAddress(addr) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { _, err := addressFromString(s) if err != nil { b.Fatalf("benchmark error: %v", err) } } } func TestObjectCounter(t *testing.T) { t.Parallel() counter := NewSimpleCounter() fst := New( WithPath(t.TempDir()), WithDepth(2), WithDirNameLen(2), WithFileCounter(counter)) require.NoError(t, fst.Open(false)) require.NoError(t, fst.Init()) counterValue := counter.Value() require.Equal(t, uint64(0), counterValue) defer func() { require.NoError(t, fst.Close()) }() addr := oidtest.Address() obj := objectSDK.New() obj.SetID(addr.Object()) obj.SetContainerID(addr.Container()) obj.SetPayload([]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}) var putPrm common.PutPrm putPrm.Address = addr putPrm.RawData, _ = obj.Marshal() var getPrm common.GetPrm getPrm.Address = putPrm.Address var delPrm common.DeletePrm delPrm.Address = addr eg, egCtx := errgroup.WithContext(context.Background()) eg.Go(func() error { for j := 0; j < 1_000; j++ { _, err := fst.Put(egCtx, putPrm) if err != nil { return err } } return nil }) eg.Go(func() error { var le logicerr.Logical for j := 0; j < 1_000; j++ { _, err := fst.Delete(egCtx, delPrm) if err != nil && !errors.As(err, &le) { return err } } return nil }) require.NoError(t, eg.Wait()) counterValue = counter.Value() realCount, err := fst.countFiles() require.NoError(t, err) require.Equal(t, realCount, counterValue) }