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) link.SetSplitID(splitID)
t.Run("delete small object", func(t *testing.T) { t.Run("delete small object", func(t *testing.T) {
t.Parallel()
e := testNewEngine(t).setShardsNum(t, 1).engine e := testNewEngine(t).setShardsNum(t, 1).engine
defer e.Close(context.Background()) 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.Run("delete big object", func(t *testing.T) {
t.Parallel()
s1 := testNewShard(t, 1) s1 := testNewShard(t, 1)
s2 := testNewShard(t, 2) s2 := testNewShard(t, 2)

View file

@ -12,88 +12,65 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func TestShard_Delete(t *testing.T) { func TestShard_Delete_SmallObject(t *testing.T) {
t.Parallel() t.Run("small object without write cache", func(t *testing.T) {
t.Run("without write cache", func(t *testing.T) {
t.Parallel() 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
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() 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) sh := newShard(t, hasWriteCache)
cnr := cidtest.ID() cnr := cidtest.ID()
obj := testutil.GenerateObjectWithCID(cnr) obj := testutil.GenerateObjectWithCID(cnr)
testutil.AddAttribute(obj, "foo", "bar") testutil.AddAttribute(obj, "foo", "bar")
testutil.AddPayload(obj, payloadSize)
var putPrm PutPrm var putPrm PutPrm
putPrm.SetObject(obj)
var getPrm GetPrm var getPrm GetPrm
getPrm.SetAddress(object.AddressOf(obj))
t.Run("big object", func(t *testing.T) { var delPrm DeletePrm
testutil.AddPayload(obj, 1<<20) delPrm.SetAddresses(object.AddressOf(obj))
putPrm.SetObject(obj) _, err := sh.Put(context.Background(), putPrm)
getPrm.SetAddress(object.AddressOf(obj)) require.NoError(t, err)
var delPrm DeletePrm _, err = testGet(t, sh, getPrm, hasWriteCache)
delPrm.SetAddresses(object.AddressOf(obj)) require.NoError(t, err)
_, err := sh.Put(context.Background(), putPrm) if hasWriteCache {
require.NoError(t, err) sh.FlushWriteCache(context.Background(), FlushWriteCachePrm{ignoreErrors: false})
require.Eventually(t, func() bool {
_, err = testGet(t, sh, getPrm, hasWriteCache)
require.NoError(t, err)
if hasWriteCache {
require.Eventually(t, func() bool {
_, err = sh.Delete(context.Background(), delPrm)
return err == nil
}, 30*time.Second, 100*time.Millisecond)
} else {
_, err = sh.Delete(context.Background(), delPrm) _, err = sh.Delete(context.Background(), delPrm)
require.NoError(t, err) return err == nil
} }, 30*time.Second, 10*time.Millisecond)
} else {
_, err = sh.Get(context.Background(), getPrm) _, err = sh.Delete(context.Background(), delPrm)
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) require.NoError(t, err)
}
_, err = sh.Get(context.Background(), getPrm) _, err = sh.Get(context.Background(), getPrm)
require.NoError(t, err) require.True(t, client.IsErrObjectNotFound(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))
})
} }