9fd091831d
We are not using the benchmark results for anything, they are mostly there to ensure that we don't break the benchmarks. So we can disable CockroachDB for them. Similarly add short versions of other tests. Also try to precompile test/benchmark code. Change-Id: I60b501789f70c289af68c37a052778dc75ae2b69
95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
// Copyright (C) 2019 Storj Labs, Inc.
|
||
// See LICENSE for copying information.
|
||
|
||
package testsuite
|
||
|
||
import (
|
||
"path"
|
||
"strconv"
|
||
"testing"
|
||
|
||
"golang.org/x/sync/errgroup"
|
||
|
||
"storj.io/common/testcontext"
|
||
"storj.io/storj/storage"
|
||
)
|
||
|
||
// RunBenchmarks runs common storage.KeyValueStore benchmarks.
|
||
func RunBenchmarks(b *testing.B, store storage.KeyValueStore) {
|
||
var words = []string{
|
||
"alpha", "beta", "gamma", "delta", "iota", "kappa", "lambda", "mu",
|
||
"άλφα", "βήτα", "γάμμα", "δέλτα", "έψιλον", "ζήτα", "ήτα", "θήτα", "ιώτα", "κάππα", "λάμδα", "μυ",
|
||
"nu", "xi", "omicron", "pi", "rho", "sigma", "tau", "upsilon", "phi", "chi", "psi", "omega",
|
||
"νυ", "ξι", "όμικρον", "πι", "ρώ", "σίγμα", "ταυ", "ύψιλον", "φι", "χι", "ψι", "ωμέγα",
|
||
}
|
||
|
||
words = words[:20] // branching factor
|
||
if testing.Short() {
|
||
words = words[:2]
|
||
}
|
||
|
||
var items storage.Items
|
||
|
||
k := 0
|
||
for _, a := range words {
|
||
for _, b := range words {
|
||
for _, c := range words {
|
||
items = append(items, storage.ListItem{
|
||
Key: storage.Key(path.Join(a, b, c)),
|
||
Value: storage.Value(strconv.Itoa(k)),
|
||
})
|
||
k++
|
||
}
|
||
}
|
||
}
|
||
|
||
ctx := testcontext.New(b)
|
||
defer ctx.Cleanup()
|
||
|
||
defer cleanupItems(b, ctx, store, items)
|
||
|
||
b.Run("Put", func(b *testing.B) {
|
||
b.SetBytes(int64(len(items)))
|
||
for k := 0; k < b.N; k++ {
|
||
var group errgroup.Group
|
||
for _, item := range items {
|
||
key := item.Key
|
||
value := item.Value
|
||
|
||
group.Go(func() error {
|
||
return store.Put(ctx, key, value)
|
||
})
|
||
}
|
||
|
||
if err := group.Wait(); err != nil {
|
||
b.Fatalf("Put: %v", err)
|
||
}
|
||
}
|
||
})
|
||
|
||
b.Run("Get", func(b *testing.B) {
|
||
b.SetBytes(int64(len(items)))
|
||
for k := 0; k < b.N; k++ {
|
||
for _, item := range items {
|
||
_, err := store.Get(ctx, item.Key)
|
||
if err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
}
|
||
})
|
||
|
||
b.Run("ListV2 5", func(b *testing.B) {
|
||
b.SetBytes(int64(len(items)))
|
||
for k := 0; k < b.N; k++ {
|
||
_, _, err := storage.ListV2(ctx, store, storage.ListOptions{
|
||
StartAfter: storage.Key("gamma"),
|
||
Limit: 5,
|
||
})
|
||
if err != nil {
|
||
b.Fatal(err)
|
||
}
|
||
}
|
||
})
|
||
}
|