engine: Speedup tests #827

Merged
fyrchik merged 3 commits from achuprov/frostfs-node:speed_up_tests into master 2023-11-30 13:19:45 +00:00
2 changed files with 40 additions and 61 deletions

View file

@ -36,6 +36,7 @@ func TestStorageEngine_Inhume(t *testing.T) {
link.SetSplitID(splitID)
t.Run("delete small object", func(t *testing.T) {
t.Parallel()
e := testNewEngine(t).setShardsNum(t, 1).engine
defer e.Close(context.Background())
@ -54,6 +55,7 @@ func TestStorageEngine_Inhume(t *testing.T) {
})
t.Run("delete big object", func(t *testing.T) {
t.Parallel()
s1 := testNewShard(t, 1)
s2 := testNewShard(t, 2)

View file

@ -12,35 +12,43 @@ import (
"github.com/stretchr/testify/require"
)
func TestShard_Delete(t *testing.T) {
func TestShard_Delete_SmallObject(t *testing.T) {
t.Run("small object without write cache", func(t *testing.T) {
t.Parallel()

What is the point of this (TestShard_Delete()) refactoring?
It seems, same tests are executed in the same order.

What is the point of this (`TestShard_Delete()`) refactoring? It seems, same tests are executed in the same order.

fixed

fixed

The diff still seems too big if no changes besides Flush were done.

The diff still seems too big if no changes besides `Flush` were done.

The small object and big object tests had the same code, so they were combined and put into a auxiliary function.

The `small object` and `big object` tests had the same code, so they were combined and put into a auxiliary function.

It seems like an unrelated change, can we do this refactoring in a separate commit?

It seems like an unrelated change, can we do this refactoring in a separate commit?

fixed

fixed
t.Run("without write cache", func(t *testing.T) {
t.Parallel()
testShardDelete(t, false)
testShard(t, false, 1<<5)
})
t.Run("with write cache", func(t *testing.T) {
t.Run("small object with write cache", func(t *testing.T) {
t.Parallel()
testShardDelete(t, true)
testShard(t, true, 1<<5)
})
}
func testShardDelete(t *testing.T, hasWriteCache bool) {
func TestShard_Delete_BigObject(t *testing.T) {
t.Run("big object without write cache", func(t *testing.T) {
t.Parallel()
testShard(t, false, 1<<20)
})
t.Run("big object with write cache", func(t *testing.T) {
t.Parallel()
testShard(t, true, 1<<20)
})
}
func testShard(t *testing.T, hasWriteCache bool, payloadSize int) {
sh := newShard(t, hasWriteCache)
cnr := cidtest.ID()
obj := testutil.GenerateObjectWithCID(cnr)
testutil.AddAttribute(obj, "foo", "bar")
testutil.AddPayload(obj, payloadSize)
var putPrm PutPrm
var getPrm GetPrm
t.Run("big object", func(t *testing.T) {
testutil.AddPayload(obj, 1<<20)
putPrm.SetObject(obj)
var getPrm GetPrm
getPrm.SetAddress(object.AddressOf(obj))
var delPrm DeletePrm
@ -53,10 +61,11 @@ func testShardDelete(t *testing.T, hasWriteCache bool) {
require.NoError(t, err)
if hasWriteCache {
sh.FlushWriteCache(context.Background(), FlushWriteCachePrm{ignoreErrors: false})
require.Eventually(t, func() bool {
_, err = sh.Delete(context.Background(), delPrm)
return err == nil
}, 30*time.Second, 100*time.Millisecond)
}, 30*time.Second, 10*time.Millisecond)
} else {
_, err = sh.Delete(context.Background(), delPrm)
require.NoError(t, err)
@ -64,36 +73,4 @@ func testShardDelete(t *testing.T, hasWriteCache bool) {
_, err = sh.Get(context.Background(), getPrm)
require.True(t, client.IsErrObjectNotFound(err))
})
t.Run("small object", func(t *testing.T) {
obj := testutil.GenerateObjectWithCID(cnr)
testutil.AddAttribute(obj, "foo", "bar")
testutil.AddPayload(obj, 1<<5)
putPrm.SetObject(obj)
getPrm.SetAddress(object.AddressOf(obj))
var delPrm DeletePrm
delPrm.SetAddresses(object.AddressOf(obj))
_, err := sh.Put(context.Background(), putPrm)
require.NoError(t, err)
_, err = sh.Get(context.Background(), getPrm)
require.NoError(t, err)
if hasWriteCache {
require.Eventually(t, func() bool {
_, err = sh.Delete(context.Background(), delPrm)
return err == nil
}, 10*time.Second, 100*time.Millisecond)
} else {
_, err = sh.Delete(context.Background(), delPrm)
require.NoError(t, err)
}
_, err = sh.Get(context.Background(), getPrm)
require.True(t, client.IsErrObjectNotFound(err))
})
}