package blobovniczatree import ( "context" "sync" "sync/atomic" "testing" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil" "git.frostfs.info/TrueCloudLab/frostfs-node/pkg/util/logger/test" "github.com/stretchr/testify/require" ) func TestBlobovniczaTree_Concurrency(t *testing.T) { t.Parallel() const n = 1000 st := NewBlobovniczaTree( WithLogger(test.NewLogger(t)), WithObjectSizeLimit(1024), WithBlobovniczaShallowWidth(10), WithBlobovniczaShallowDepth(1), WithRootPath(t.TempDir())) require.NoError(t, st.Open(false)) require.NoError(t, st.Init()) defer func() { require.NoError(t, st.Close()) }() objGen := &testutil.SeqObjGenerator{ObjSize: 1} var cnt atomic.Int64 var wg sync.WaitGroup for i := 0; i < 1000; i++ { wg.Add(1) go func() { defer wg.Done() for cnt.Add(1) <= n { obj := objGen.Next() addr := testutil.AddressFromObject(t, obj) raw, err := obj.Marshal() require.NoError(t, err) _, err = st.Put(context.Background(), common.PutPrm{ Address: addr, RawData: raw, }) require.NoError(t, err) _, err = st.Get(context.Background(), common.GetPrm{Address: addr}) require.NoError(t, err) } }() } wg.Wait() }