Skip to content

Commit

Permalink
feat(core/coretesting): make memDB satisfy db.Db interface (#22570)
Browse files Browse the repository at this point in the history
  • Loading branch information
julienrbrt authored Nov 20, 2024
1 parent c6522a7 commit d810b77
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
29 changes: 29 additions & 0 deletions core/testing/memdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,12 +291,20 @@ func (bt *MemDB) Set(key, value []byte) error {
return bt.kv.Set(key, value)
}

func (bt *MemDB) SetSync(key, value []byte) error {
return bt.Set(key, value)
}

func (bt *MemDB) Delete(key []byte) error {
bt.mtx.Lock()
defer bt.mtx.Unlock()
return bt.kv.Delete(key)
}

func (bt *MemDB) DeleteSync(key []byte) error {
return bt.Delete(key)
}

func (bt *MemDB) Iterator(start, end []byte) (store.Iterator, error) {
return bt.kv.Iterator(start, end)
}
Expand All @@ -305,6 +313,27 @@ func (bt *MemDB) ReverseIterator(start, end []byte) (store.Iterator, error) {
return bt.kv.ReverseIterator(start, end)
}

func (db *MemDB) Print() error {
db.mtx.RLock()
defer db.mtx.RUnlock()

db.kv.tree.Ascend(item{}, func(i item) bool {
fmt.Printf("[%X]:\t[%X]\n", i.key, i.value)
return true
})
return nil
}

func (db *MemDB) Stats() map[string]string {
db.mtx.RLock()
defer db.mtx.RUnlock()

stats := make(map[string]string)
stats["database.type"] = "memDB"
stats["database.size"] = fmt.Sprintf("%d", db.kv.tree.Len())
return stats
}

// Close closes the MemDB, releasing any resources held.
func (db *MemDB) Close() error {
return nil
Expand Down
2 changes: 1 addition & 1 deletion tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ require (
cosmossdk.io/x/slashing v0.0.0-00010101000000-000000000000
cosmossdk.io/x/staking v0.0.0-20240226161501-23359a0b6d91
github.com/cometbft/cometbft/api v1.0.0-rc.1
github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22
github.com/google/go-cmp v0.6.0
github.com/google/gofuzz v1.2.0
github.com/jhump/protoreflect v1.17.0
Expand Down Expand Up @@ -103,7 +104,6 @@ require (
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/cometbft/cometbft-db v0.15.0 // indirect
github.com/cosmos/btcutil v1.0.5 // indirect
github.com/cosmos/cosmos-db v1.0.3-0.20240911104526-ddc3f09bfc22 // indirect
github.com/cosmos/crypto v0.1.2 // indirect
github.com/cosmos/go-bip39 v1.0.0 // indirect
github.com/cosmos/gogogateway v1.2.0 // indirect
Expand Down
14 changes: 14 additions & 0 deletions tests/integration/type_check.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package integration

import (
coretesting "cosmossdk.io/core/testing"

db "github.com/cosmos/cosmos-db"
)

// This file contains a list of type checks that are used to ensure that implementations
// matches the interface. We do not do those type checks directly in the components to
// avoid to bring in more dependencies than needed.
var (
_ db.DB = (*coretesting.MemDB)(nil)
)

0 comments on commit d810b77

Please sign in to comment.