Skip to content

Commit

Permalink
Merge pull request #329 from scylladb/dk/add_bench_tests
Browse files Browse the repository at this point in the history
feat(generators): implement benchmarks for stmt generators
  • Loading branch information
dkropachev authored May 30, 2023
2 parents 67ababe + 5acf826 commit 0cdbba3
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import (
"testing"
)

func TestGenInsertStmt(t *testing.T) {
cases := []string{
var (
genInsertStmtCases = []string{
"pk1_ck0_col0",
"pk1_ck1_col1",
"pk3_ck3_col5",
Expand All @@ -31,15 +31,35 @@ func TestGenInsertStmt(t *testing.T) {
"pk1_ck1_col1cr_lwt",
"pkAll_ckAll_colAll_lwt",
}
expected := initExpected(t, "insert.json", cases, *updateExpected)
genUpdateStmtCases = []string{
"pk1_ck0_col0",
"pk1_ck1_col1",
"pk3_ck3_col5",
"pkAll_ckAll_colAll",
"pk1_ck1_col1cr",
"pk3_ck3_col3cr",
}

genDeleteStmtCases = []string{
"pk1_ck0_col1",
"pk1_ck1_col1",
"pk3_ck3_col5",
"pkAll_ckAll_colAll",
"pk1_ck1_col1cr",
"pk3_ck3_col3cr",
}
)

func TestGenInsertStmt(t *testing.T) {
expected := initExpected(t, "insert.json", genInsertStmtCases, *updateExpected)
if *updateExpected {
defer expected.updateExpected(t)
}
for idx := range cases {
caseName := cases[idx]
for idx := range genInsertStmtCases {
caseName := genInsertStmtCases[idx]
t.Run(caseName,
func(subT *testing.T) {
schema, prc, gen, rnd, useLWT, _ := getAllForTestStmt(subT, cases[idx])
schema, prc, gen, rnd, useLWT, _ := getAllForTestStmt(subT, genInsertStmtCases[idx])
stmt, err := genInsertStmt(schema, schema.Tables[0], gen.Get(), rnd, prc, useLWT)
validateStmt(subT, stmt, err)
expected.CompareOrStore(subT, caseName, stmt)
Expand All @@ -48,23 +68,15 @@ func TestGenInsertStmt(t *testing.T) {
}

func TestGenUpdateStmt(t *testing.T) {
cases := []string{
"pk1_ck0_col0",
"pk1_ck1_col1",
"pk3_ck3_col5",
"pkAll_ckAll_colAll",
"pk1_ck1_col1cr",
"pk3_ck3_col3cr",
}
expected := initExpected(t, "update.json", cases, *updateExpected)
expected := initExpected(t, "update.json", genUpdateStmtCases, *updateExpected)
if *updateExpected {
defer expected.updateExpected(t)
}
for idx := range cases {
caseName := cases[idx]
for idx := range genUpdateStmtCases {
caseName := genUpdateStmtCases[idx]
t.Run(caseName,
func(subT *testing.T) {
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, cases[idx])
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, genUpdateStmtCases[idx])
stmt, err := genUpdateStmt(schema, schema.Tables[0], gen.Get(), rnd, prc)
validateStmt(subT, stmt, err)
expected.CompareOrStore(subT, caseName, stmt)
Expand All @@ -73,26 +85,51 @@ func TestGenUpdateStmt(t *testing.T) {
}

func TestGenDeleteRows(t *testing.T) {
cases := []string{
"pk1_ck0_col1",
"pk1_ck1_col1",
"pk3_ck3_col5",
"pkAll_ckAll_colAll",
"pk1_ck1_col1cr",
"pk3_ck3_col3cr",
}
expected := initExpected(t, "delete.json", cases, *updateExpected)
expected := initExpected(t, "delete.json", genDeleteStmtCases, *updateExpected)
if *updateExpected {
defer expected.updateExpected(t)
}
for idx := range cases {
caseName := cases[idx]
for idx := range genDeleteStmtCases {
caseName := genDeleteStmtCases[idx]
t.Run(caseName,
func(subT *testing.T) {
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, cases[idx])
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, genDeleteStmtCases[idx])
stmt, err := genDeleteRows(schema, schema.Tables[0], gen.Get(), rnd, prc)
validateStmt(subT, stmt, err)
expected.CompareOrStore(subT, caseName, stmt)
})
}
}

func BenchmarkGenInsertStmt(t *testing.B) {
for idx := range genInsertStmtCases {
caseName := genInsertStmtCases[idx]
t.Run(caseName,
func(subT *testing.B) {
schema, prc, gen, rnd, useLWT, _ := getAllForTestStmt(subT, caseName)
_, _ = genInsertStmt(schema, schema.Tables[0], gen.Get(), rnd, prc, useLWT)
})
}
}

func BenchmarkGenUpdateStmt(t *testing.B) {
for idx := range genUpdateStmtCases {
caseName := genUpdateStmtCases[idx]
t.Run(caseName,
func(subT *testing.B) {
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, caseName)
_, _ = genUpdateStmt(schema, schema.Tables[0], gen.Get(), rnd, prc)
})
}
}

func BenchmarkGenDeleteRows(t *testing.B) {
for idx := range genDeleteStmtCases {
caseName := genDeleteStmtCases[idx]
t.Run(caseName,
func(subT *testing.B) {
schema, prc, gen, rnd, _, _ := getAllForTestStmt(subT, caseName)
_, _ = genDeleteRows(schema, schema.Tables[0], gen.Get(), rnd, prc)
})
}
}
11 changes: 8 additions & 3 deletions pkg/generators/suite_utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,12 @@ func (s nonRandSource) Uint64() uint64 {
func (s nonRandSource) Seed(uint64) {
}

func getAllForTestStmt(t *testing.T, caseName string) (*testschema.Schema, *typedef.PartitionRangeConfig, *MockGenerator, *rand.Rand, bool, bool) {
type testInterface interface {
Errorf(format string, args ...any)
Fatalf(format string, args ...any)
}

func getAllForTestStmt(t testInterface, caseName string) (*testschema.Schema, *typedef.PartitionRangeConfig, *MockGenerator, *rand.Rand, bool, bool) {
utils.SetTestUUIDFromTime()
rnd := rand.New(nonRandSource(1))
table, useLWT, useMV := getTableAndOptionsFromName(t, caseName)
Expand Down Expand Up @@ -329,7 +334,7 @@ func genTestSchema(sc typedef.SchemaConfig, table *testschema.Table) *testschema
return builder.Build()
}

func getTableAndOptionsFromName(t *testing.T, tableName string) (*testschema.Table, bool, bool) {
func getTableAndOptionsFromName(t testInterface, tableName string) (*testschema.Table, bool, bool) {
nameParts := strings.Split(tableName, "_")
var table testschema.Table
var useLWT, useMV bool
Expand Down Expand Up @@ -361,7 +366,7 @@ func getTableAndOptionsFromName(t *testing.T, tableName string) (*testschema.Tab
return &table, useLWT, useMV
}

func genColumnsFromCase(t *testing.T, typeCases map[string][]typedef.Type, caseName, prefix string) testschema.Columns {
func genColumnsFromCase(t testInterface, typeCases map[string][]typedef.Type, caseName, prefix string) testschema.Columns {
typeCase, ok := typeCases[caseName]
if !ok {
t.Fatalf("Error caseName:%s, not found", caseName)
Expand Down

0 comments on commit 0cdbba3

Please sign in to comment.