mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
Fixes https://github.com/tendermint/tmlibs/issues/55 MemDB previously mistakenly set the actual DB pointer to nil although that side effect is not visible to the outside world since p is an identifier within the scope of just that function call. However, @melekes and I had a discussion in which we came to the conclusion that Close for an in-memory DB should instead be a noop and not cause any data loss. See the discussion on https://github.com/tendermint/tmlibs/pull/56.
49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package db
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestMemDbIterator(t *testing.T) {
|
|
db := NewMemDB()
|
|
keys := make([][]byte, 100)
|
|
for i := 0; i < 100; i++ {
|
|
keys[i] = []byte{byte(i)}
|
|
}
|
|
|
|
value := []byte{5}
|
|
for _, k := range keys {
|
|
db.Set(k, value)
|
|
}
|
|
|
|
iter := db.Iterator()
|
|
i := 0
|
|
for iter.Next() {
|
|
assert.Equal(t, db.Get(iter.Key()), iter.Value(), "values dont match for key")
|
|
i += 1
|
|
}
|
|
assert.Equal(t, i, len(db.db), "iterator didnt cover whole db")
|
|
}
|
|
|
|
func TestMemDBClose(t *testing.T) {
|
|
db := NewMemDB()
|
|
copyDB := func(orig map[string][]byte) map[string][]byte {
|
|
copy := make(map[string][]byte)
|
|
for k, v := range orig {
|
|
copy[k] = v
|
|
}
|
|
return copy
|
|
}
|
|
k, v := []byte("foo"), []byte("bar")
|
|
db.Set(k, v)
|
|
require.Equal(t, db.Get(k), v, "expecting a successful get")
|
|
copyBefore := copyDB(db.db)
|
|
db.Close()
|
|
require.Equal(t, db.Get(k), v, "Close is a noop, expecting a successful get")
|
|
copyAfter := copyDB(db.db)
|
|
require.Equal(t, copyBefore, copyAfter, "Close is a noop and shouldn't modify any internal data")
|
|
}
|