Skip to content

Improve database/ tests with require #1506

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 134 commits into from
Jun 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
a2771ba
ban `require.Equal` when testing for `0`
dhrubabasu May 12, 2023
88f6841
Merge branch 'dev' into ban-require-equal-zero
dhrubabasu May 12, 2023
b065a98
ban usage of `require.Zero` when testing for length `0`
dhrubabasu May 12, 2023
0ccf063
Merge branch 'ban-require-equal-zero' into ban-require-zero-len
dhrubabasu May 12, 2023
fd714b1
add failing test
dhrubabasu May 12, 2023
d4d925b
fix
dhrubabasu May 12, 2023
e961d37
nit
dhrubabasu May 12, 2023
7aab521
Merge branch 'ban-require-zero-len' into ban-require-equal-len
dhrubabasu May 12, 2023
cfd7ca0
push
dhrubabasu May 12, 2023
946588a
ban usage of `nil` in require functions
dhrubabasu May 12, 2023
5fcf0f0
nit
dhrubabasu May 12, 2023
10dff95
fix regex
dhrubabasu May 12, 2023
9fdc7c5
nit
dhrubabasu May 12, 2023
c343bc9
Merge branch 'dev' into ban-require-equal-zero
StephenButtolph May 12, 2023
3dbdab1
merged
dhrubabasu May 12, 2023
5530818
Merge branch 'ban-require-zero-len' into ban-require-equal-len
dhrubabasu May 12, 2023
6b2a170
Merge branch 'ban-require-equal-len' into ban-require-nil
dhrubabasu May 12, 2023
421b72d
add comment
dhrubabasu May 12, 2023
0c919fd
match uint(0)
dhrubabasu May 12, 2023
f8c4359
Update scripts/lint.sh
dhrubabasu May 12, 2023
df6b971
Merge branch 'ban-require-equal-zero' into ban-require-zero-len
dhrubabasu May 12, 2023
4a37e01
merged
dhrubabasu May 12, 2023
7e40d38
nit
dhrubabasu May 12, 2023
fb10a1a
pr review
dhrubabasu May 12, 2023
7aadaf4
revert
dhrubabasu May 12, 2023
af4382d
nit
dhrubabasu May 12, 2023
5301a7d
nits
dhrubabasu May 12, 2023
e249d2b
reduce diff
dhrubabasu May 12, 2023
be82305
reduce diff
dhrubabasu May 12, 2023
8aa012d
reduce diff
dhrubabasu May 12, 2023
24fb051
nit
dhrubabasu May 12, 2023
7de1858
Merge branch 'ban-require-equal-len' into ban-require-nil
dhrubabasu May 12, 2023
dfeb84b
more nil checks
dhrubabasu May 12, 2023
7901762
wording
dhrubabasu May 12, 2023
2f1ba2d
regex nit
dhrubabasu May 12, 2023
90b376e
Merge branch 'ban-require-equal-len' into ban-require-nil
dhrubabasu May 12, 2023
4680df5
add linter
dhrubabasu May 13, 2023
e967771
fix
dhrubabasu May 13, 2023
ff94591
fix regex
dhrubabasu May 13, 2023
0aa2d36
moar
dhrubabasu May 13, 2023
720bfb0
nit
dhrubabasu May 13, 2023
b71ff1c
include multi-line functions
dhrubabasu May 13, 2023
31e4a37
should be good now
dhrubabasu May 13, 2023
c7226cf
moar
dhrubabasu May 13, 2023
e48fbb5
nit
dhrubabasu May 13, 2023
9de4464
add linter
dhrubabasu May 13, 2023
a81f769
fix
dhrubabasu May 13, 2023
488d1a8
nit
dhrubabasu May 13, 2023
f17e674
fix
dhrubabasu May 13, 2023
c375007
Merge branch 'enforce-require-no-error-inline' into ban-require-equal…
dhrubabasu May 13, 2023
52f623e
Update scripts/lint.sh
dhrubabasu May 13, 2023
b30352c
nit
dhrubabasu May 13, 2023
a96a2d1
fix regex
dhrubabasu May 13, 2023
f07c5aa
Merge branch 'enforce-require-no-error-inline' into ban-require-equal…
dhrubabasu May 13, 2023
c7d6c75
Improve `snow/` tests with `require`
dhrubabasu May 13, 2023
411d3fb
Merge branch 'ban-require-equal-error' into testing-snow
dhrubabasu May 14, 2023
1331037
push
dhrubabasu May 14, 2023
1924de4
Merge branch 'testing-snow' into t-fatal-ban-x-package
dhrubabasu May 14, 2023
1308279
Improve `vm/` tests with `require`
dhrubabasu May 14, 2023
e436605
nits
dhrubabasu May 14, 2023
b8bd341
Merge branch 'ban-require-equal-error' into testing-snow
dhrubabasu May 14, 2023
b4aa566
nit
dhrubabasu May 14, 2023
f792b36
Merge branch 'ban-require-equal-error' into testing-snow
dhrubabasu May 14, 2023
1013be5
export errors
dhrubabasu May 14, 2023
67a7194
Merge branch 'testing-snow' into t-fatal-ban-x-package
dhrubabasu May 14, 2023
77d537c
Merge branch 't-fatal-ban-x-package' into testing-vms
dhrubabasu May 14, 2023
689082f
nit
dhrubabasu May 14, 2023
0f6a4ad
Merge branch 'ban-require-equal-error' into testing-snow
dhrubabasu May 14, 2023
2d6083e
Merge branch 'testing-snow' into t-fatal-ban-x-package
dhrubabasu May 14, 2023
d8654b1
Merge branch 't-fatal-ban-x-package' into testing-vms
dhrubabasu May 14, 2023
f80bede
Improve `database/` tests with `require`
dhrubabasu May 14, 2023
be063bb
nit
dhrubabasu May 15, 2023
463b2da
nit
dhrubabasu May 15, 2023
31fa556
merged
dhrubabasu May 15, 2023
5e3745a
Merge branch 'ban-require-zero-len' into ban-require-equal-len
StephenButtolph May 15, 2023
6709b1c
Update scripts/lint.sh
dhrubabasu May 16, 2023
5d2f1e2
Update scripts/lint.sh
dhrubabasu May 16, 2023
0457148
Merge branch 'dev' into ban-require-zero-len
dhrubabasu May 16, 2023
f4f0c15
nit
dhrubabasu May 16, 2023
8fb3d2a
increase negative diff woooooo
dhrubabasu May 16, 2023
62d168e
nit
dhrubabasu May 16, 2023
e7cf371
regex is easy they said
dhrubabasu May 16, 2023
b9d80b3
revert regex changes
dhrubabasu May 16, 2023
d1d0fdc
revert window change
dhrubabasu May 16, 2023
38e5742
nit
dhrubabasu May 16, 2023
a4bca48
Merge branch 'dev' into ban-require-zero-len
dhrubabasu May 16, 2023
f824d68
Merge branch 'ban-require-zero-len' into ban-require-equal-len
dhrubabasu May 16, 2023
adf3e39
Merge branch 'ban-require-equal-len' into ban-require-nil
dhrubabasu May 16, 2023
b58df9d
merged
dhrubabasu May 16, 2023
b93c523
reduce diff
dhrubabasu May 16, 2023
3402670
merged
dhrubabasu May 17, 2023
674f4d4
Merge branch 'enforce-require-no-error-inline' into ban-require-equal…
dhrubabasu May 17, 2023
6e6dbc2
Merge branch 'ban-require-equal-error' into testing-snow
dhrubabasu May 17, 2023
e34c59e
Merge branch 'testing-snow' into t-fatal-ban-x-package
dhrubabasu May 17, 2023
1bfa6a0
merged
dhrubabasu May 17, 2023
477fa7f
Merge branch 'testing-vms' into testing-database
dhrubabasu May 17, 2023
1c8d49c
cleanup
dhrubabasu May 17, 2023
7309ed9
Merge branch 't-fatal-ban-x-package' into testing-vms
dhrubabasu May 17, 2023
272ecf9
Merge branch 'testing-vms' into testing-database
dhrubabasu May 17, 2023
5a8b271
nits
dhrubabasu May 17, 2023
51b303b
Merge branch 'dev' into enforce-require-no-error-inline
dhrubabasu May 18, 2023
00c95dd
Merge branch 'enforce-require-no-error-inline' into ban-require-equal…
dhrubabasu May 18, 2023
2a0294b
merged
dhrubabasu May 18, 2023
806eddf
Merge branch 'testing-snow' into t-fatal-ban-x-package
dhrubabasu May 18, 2023
3630c07
merged
dhrubabasu May 18, 2023
c8c7eba
Merge branch 'testing-vms' into testing-database
dhrubabasu May 18, 2023
3d0b39f
merged
dhrubabasu Jun 12, 2023
41e92b7
revert non-snow changes
dhrubabasu Jun 12, 2023
6c8381e
nit
dhrubabasu Jun 12, 2023
5b8f55d
nit
dhrubabasu Jun 12, 2023
399dcdf
nit
dhrubabasu Jun 12, 2023
a825a8b
nit
dhrubabasu Jun 12, 2023
11497ad
nits
dhrubabasu Jun 12, 2023
50c3320
Merge branch 'dev' into testing-snow
Jun 13, 2023
e120b39
moar Empty
dhrubabasu Jun 13, 2023
e286b32
Merge branch 'dev' into testing-snow
dhrubabasu Jun 14, 2023
516e29b
merged
dhrubabasu Jun 14, 2023
909d2a4
nits
dhrubabasu Jun 14, 2023
b406c84
fix merge errors
dhrubabasu Jun 14, 2023
dd09ecb
merged
dhrubabasu Jun 14, 2023
51a6001
nit
dhrubabasu Jun 14, 2023
13d31cf
nit
dhrubabasu Jun 14, 2023
0470bce
nit
dhrubabasu Jun 14, 2023
b951e0c
nit
dhrubabasu Jun 14, 2023
68b6c41
nits
dhrubabasu Jun 15, 2023
550440e
merged
dhrubabasu Jun 15, 2023
e91659a
pr review
dhrubabasu Jun 15, 2023
7319b4a
fix merge error
dhrubabasu Jun 15, 2023
471c366
🎀
dhrubabasu Jun 15, 2023
e2af698
merged
dhrubabasu Jun 15, 2023
71eb16c
nit
dhrubabasu Jun 15, 2023
7cca88e
Merge branch 'dev' into testing-database
StephenButtolph Jun 15, 2023
42c5fd6
pr review
dhrubabasu Jun 15, 2023
3cd6c2b
cleanup
dhrubabasu Jun 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 40 additions & 76 deletions database/benchmark_database.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"math/rand"
"testing"

"github.com/stretchr/testify/require"

"github.com/ava-labs/avalanchego/utils/units"
)

Expand Down Expand Up @@ -35,6 +37,8 @@ var (

// Writes size data into the db in order to setup reads in subsequent tests.
func SetupBenchmark(b *testing.B, count int, keySize, valueSize int) ([][]byte, [][]byte) {
require := require.New(b)

b.Helper()

keys := make([][]byte, count)
Expand All @@ -43,217 +47,177 @@ func SetupBenchmark(b *testing.B, count int, keySize, valueSize int) ([][]byte,
keyBytes := make([]byte, keySize)
valueBytes := make([]byte, valueSize)
_, err := rand.Read(keyBytes) // #nosec G404
if err != nil {
b.Fatal(err)
}
require.NoError(err)
_, err = rand.Read(valueBytes) // #nosec G404
if err != nil {
b.Fatal(err)
}
require.NoError(err)
keys[i], values[i] = keyBytes, valueBytes
}
return keys, values
}

// BenchmarkGet measures the time it takes to get an operation from a database.
func BenchmarkGet(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.get", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
require := require.New(b)

for i, key := range keys {
value := values[i]
if err := db.Put(key, value); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(db.Put(key, value))
}

b.ResetTimer()

// Reads b.N values from the db
for i := 0; i < b.N; i++ {
if _, err := db.Get(keys[i%count]); err != nil {
b.Fatalf("Unexpected error in Get %s", err)
}
_, err := db.Get(keys[i%count])
require.NoError(err)
}
})
}

// BenchmarkPut measures the time it takes to write an operation to a database.
func BenchmarkPut(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.put", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
// Writes b.N values to the db
for i := 0; i < b.N; i++ {
if err := db.Put(keys[i%count], values[i%count]); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(b, db.Put(keys[i%count], values[i%count]))
}
})
}

// BenchmarkDelete measures the time it takes to delete a (k, v) from a database.
func BenchmarkDelete(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.delete", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
require := require.New(b)

// Writes random values of size _size_ to the database
for i, key := range keys {
value := values[i]
if err := db.Put(key, value); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(db.Put(key, value))
}

b.ResetTimer()

// Deletes b.N values from the db
for i := 0; i < b.N; i++ {
if err := db.Delete(keys[i%count]); err != nil {
b.Fatalf("Unexpected error in Delete %s", err)
}
require.NoError(db.Delete(keys[i%count]))
}
})
}

// BenchmarkBatchPut measures the time it takes to batch put.
func BenchmarkBatchPut(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_batch.put", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
batch := db.NewBatch()
for i := 0; i < b.N; i++ {
if err := batch.Put(keys[i%count], values[i%count]); err != nil {
b.Fatalf("Unexpected error in batch.Put: %s", err)
}
require.NoError(b, batch.Put(keys[i%count], values[i%count]))
}
})
}

// BenchmarkBatchDelete measures the time it takes to batch delete.
func BenchmarkBatchDelete(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_batch.delete", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
batch := db.NewBatch()
for i := 0; i < b.N; i++ {
if err := batch.Delete(keys[i%count]); err != nil {
b.Fatalf("Unexpected error in batch.Delete: %s", err)
}
require.NoError(b, batch.Delete(keys[i%count]))
}
})
}

// BenchmarkBatchWrite measures the time it takes to batch write.
func BenchmarkBatchWrite(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_batch.write", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
require := require.New(b)

batch := db.NewBatch()
for i, key := range keys {
value := values[i]

if err := batch.Put(key, value); err != nil {
b.Fatalf("Unexpected error in batch.Put: %s", err)
}
require.NoError(batch.Put(key, value))
}

b.ResetTimer()

for i := 0; i < b.N; i++ {
if err := batch.Write(); err != nil {
b.Fatalf("Unexpected error in batch.Write: %s", err)
}
require.NoError(batch.Write())
}
})
}

// BenchmarkParallelGet measures the time it takes to read in parallel.
func BenchmarkParallelGet(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.get_parallel", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
require := require.New(b)

for i, key := range keys {
value := values[i]
if err := db.Put(key, value); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(db.Put(key, value))
}

b.ResetTimer()

b.RunParallel(func(pb *testing.PB) {
for i := 0; pb.Next(); i++ {
if _, err := db.Get(keys[i%count]); err != nil {
b.Fatalf("Unexpected error in Get %s", err)
}
_, err := db.Get(keys[i%count])
require.NoError(err)
}
})
})
}

// BenchmarkParallelPut measures the time it takes to write to the db in parallel.
func BenchmarkParallelPut(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.put_parallel", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
b.RunParallel(func(pb *testing.PB) {
// Write N values to the db
for i := 0; pb.Next(); i++ {
if err := db.Put(keys[i%count], values[i%count]); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(b, db.Put(keys[i%count], values[i%count]))
}
})
})
}

// BenchmarkParallelDelete measures the time it takes to delete a (k, v) from the db.
func BenchmarkParallelDelete(b *testing.B, db Database, name string, keys, values [][]byte) {
require.NotEmpty(b, keys)
count := len(keys)
if count == 0 {
b.Fatal("no keys")
}

b.Run(fmt.Sprintf("%s_%d_pairs_%d_keys_%d_values_db.delete_parallel", name, count, len(keys[0]), len(values[0])), func(b *testing.B) {
require := require.New(b)
for i, key := range keys {
value := values[i]
if err := db.Put(key, value); err != nil {
b.Fatalf("Unexpected error in Put %s", err)
}
require.NoError(db.Put(key, value))
}
b.ResetTimer()

b.RunParallel(func(pb *testing.PB) {
// Deletes b.N values from the db
for i := 0; pb.Next(); i++ {
if err := db.Delete(keys[i%count]); err != nil {
b.Fatalf("Unexpected error in Delete %s", err)
}
require.NoError(db.Delete(keys[i%count]))
}
})
})
Expand Down
2 changes: 1 addition & 1 deletion database/corruptabledb/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func TestCorruption(t *testing.T) {
for name, testFn := range tests {
t.Run(name, func(tt *testing.T) {
err := testFn(corruptableDB)
require.ErrorIsf(tt, err, errTest, "not received the corruption error")
require.ErrorIs(tt, err, errTest)
})
}
}
8 changes: 2 additions & 6 deletions database/encdb/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@ func TestInterface(t *testing.T) {
for _, test := range database.Tests {
unencryptedDB := memdb.New()
db, err := New([]byte(testPassword), unencryptedDB)
if err != nil {
t.Fatal(err)
}
require.NoError(t, err)

test(t, db)
}
Expand All @@ -43,9 +41,7 @@ func BenchmarkInterface(b *testing.B) {
for _, bench := range database.Benchmarks {
unencryptedDB := memdb.New()
db, err := New([]byte(testPassword), unencryptedDB)
if err != nil {
b.Fatal(err)
}
require.NoError(b, err)
bench(b, db, "encdb", keys, values)
}
}
Expand Down
8 changes: 2 additions & 6 deletions database/leveldb/db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@ func TestInterface(t *testing.T) {
for _, test := range database.Tests {
folder := t.TempDir()
db, err := New(folder, nil, logging.NoLog{}, "", prometheus.NewRegistry())
if err != nil {
t.Fatalf("leveldb.New(%q, logging.NoLog{}) errored with %s", folder, err)
}
require.NoError(t, err)

defer db.Close()

Expand Down Expand Up @@ -57,9 +55,7 @@ func BenchmarkInterface(b *testing.B) {
folder := b.TempDir()

db, err := New(folder, nil, logging.NoLog{}, "", prometheus.NewRegistry())
if err != nil {
b.Fatal(err)
}
require.NoError(b, err)

bench(b, db, "leveldb", keys, values)

Expand Down
16 changes: 7 additions & 9 deletions database/linkeddb/linkeddb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,18 @@ func TestLinkedDB(t *testing.T) {

has, err := ldb.Has(key)
require.NoError(err)
require.False(has, "db unexpectedly had key %s", key)
require.False(has)

_, err = ldb.Get(key)
require.Equal(database.ErrNotFound, err, "Expected db.Get to return a Not Found error.")
require.Equal(database.ErrNotFound, err)

require.NoError(ldb.Delete(key))

require.NoError(ldb.Put(key, value))

has, err = ldb.Has(key)
require.NoError(err)
require.True(has, "db should have had key %s", key)
require.True(has)

v, err := ldb.Get(key)
require.NoError(err)
Expand All @@ -44,14 +44,13 @@ func TestLinkedDB(t *testing.T) {

has, err = ldb.Has(key)
require.NoError(err)
require.False(has, "db unexpectedly had key %s", key)
require.False(has)

_, err = ldb.Get(key)
require.Equal(database.ErrNotFound, err, "Expected db.Get to return a Not Found error.")
require.Equal(database.ErrNotFound, err)

iterator := db.NewIterator()
next := iterator.Next()
require.False(next, "database should be empty")
require.False(iterator.Next())
iterator.Release()
}

Expand All @@ -76,8 +75,7 @@ func TestLinkedDBDuplicatedPut(t *testing.T) {
require.NoError(ldb.Delete(key))

iterator := db.NewIterator()
next := iterator.Next()
require.False(next, "database should be empty")
require.False(iterator.Next())
iterator.Release()
}

Expand Down
Loading