forked from TrueCloudLab/frostfs-node
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
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, true)),
|
|
WithObjectSizeLimit(1024),
|
|
WithBlobovniczaShallowWidth(10),
|
|
WithBlobovniczaShallowDepth(1),
|
|
WithRootPath(t.TempDir()))
|
|
require.NoError(t, st.Open(false))
|
|
require.NoError(t, st.Init())
|
|
t.Cleanup(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()
|
|
}
|