mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-26 19:21:44 +00:00
Nil bytes are OK for Get/Set etc
And s/Release/Close/g
This commit is contained in:
@ -21,27 +21,27 @@ func testBackendGetSetDelete(t *testing.T, backend string) {
|
|||||||
defer dir.Close()
|
defer dir.Close()
|
||||||
db := NewDB("testdb", backend, dirname)
|
db := NewDB("testdb", backend, dirname)
|
||||||
|
|
||||||
// A nonexistent key should return nil, even if the key is empty.
|
// A nonexistent key should return nil, even if the key is empty
|
||||||
require.Nil(t, db.Get([]byte("")))
|
require.Nil(t, db.Get([]byte("")))
|
||||||
|
|
||||||
// A nonexistent key should return nil, even if the key is nil.
|
// A nonexistent key should return nil, even if the key is nil
|
||||||
require.Nil(t, db.Get(nil))
|
require.Nil(t, db.Get(nil))
|
||||||
|
|
||||||
// A nonexistent key should return nil.
|
// A nonexistent key should return nil.
|
||||||
key := []byte("abc")
|
key := []byte("abc")
|
||||||
require.Nil(t, db.Get(key))
|
require.Nil(t, db.Get(key))
|
||||||
|
|
||||||
// Set empty ("")
|
// Set empty value.
|
||||||
db.Set(key, []byte(""))
|
db.Set(key, []byte(""))
|
||||||
require.NotNil(t, db.Get(key))
|
require.NotNil(t, db.Get(key))
|
||||||
require.Empty(t, db.Get(key))
|
require.Empty(t, db.Get(key))
|
||||||
|
|
||||||
// Set empty (nil)
|
// Set nil value.
|
||||||
db.Set(key, nil)
|
db.Set(key, nil)
|
||||||
require.NotNil(t, db.Get(key))
|
require.NotNil(t, db.Get(key))
|
||||||
require.Empty(t, db.Get(key))
|
require.Empty(t, db.Get(key))
|
||||||
|
|
||||||
// Delete
|
// Delete.
|
||||||
db.Delete(key)
|
db.Delete(key)
|
||||||
require.Nil(t, db.Get(key))
|
require.Nil(t, db.Get(key))
|
||||||
}
|
}
|
||||||
@ -62,12 +62,13 @@ func withDB(t *testing.T, creator dbCreator, fn func(DB)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestBackendsNilKeys(t *testing.T) {
|
func TestBackendsNilKeys(t *testing.T) {
|
||||||
// test all backends.
|
|
||||||
// nil keys are treated as the empty key for most operations.
|
// Test all backends.
|
||||||
for dbType, creator := range backends {
|
for dbType, creator := range backends {
|
||||||
withDB(t, creator, func(db DB) {
|
withDB(t, creator, func(db DB) {
|
||||||
t.Run(fmt.Sprintf("Testing %s", dbType), func(t *testing.T) {
|
t.Run(fmt.Sprintf("Testing %s", dbType), func(t *testing.T) {
|
||||||
|
|
||||||
|
// Nil keys are treated as the empty key for most operations.
|
||||||
expect := func(key, value []byte) {
|
expect := func(key, value []byte) {
|
||||||
if len(key) == 0 { // nil or empty
|
if len(key) == 0 { // nil or empty
|
||||||
assert.Equal(t, db.Get(nil), db.Get([]byte("")))
|
assert.Equal(t, db.Get(nil), db.Get([]byte("")))
|
||||||
|
@ -199,11 +199,11 @@ func newCLevelDBIterator(source *levigo.Iterator, start, end []byte, isReverse b
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Domain() ([]byte, []byte) {
|
func (itr cLevelDBIterator) Domain() ([]byte, []byte) {
|
||||||
return itr.start, itr.end
|
return itr.start, itr.end
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Valid() bool {
|
func (itr cLevelDBIterator) Valid() bool {
|
||||||
|
|
||||||
// Once invalid, forever invalid.
|
// Once invalid, forever invalid.
|
||||||
if itr.isInvalid {
|
if itr.isInvalid {
|
||||||
@ -227,33 +227,33 @@ func (itr *cLevelDBIterator) Valid() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Valid
|
// It's valid.
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Key() []byte {
|
func (itr cLevelDBIterator) Key() []byte {
|
||||||
itr.assertNoError()
|
itr.assertNoError()
|
||||||
itr.assertIsValid()
|
itr.assertIsValid()
|
||||||
return itr.source.Key()
|
return itr.source.Key()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Value() []byte {
|
func (itr cLevelDBIterator) Value() []byte {
|
||||||
itr.assertNoError()
|
itr.assertNoError()
|
||||||
itr.assertIsValid()
|
itr.assertIsValid()
|
||||||
return itr.source.Value()
|
return itr.source.Value()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Next() {
|
func (itr cLevelDBIterator) Next() {
|
||||||
itr.assertNoError()
|
itr.assertNoError()
|
||||||
itr.assertIsValid()
|
itr.assertIsValid()
|
||||||
itr.source.Next()
|
itr.source.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) Close() {
|
func (itr cLevelDBIterator) Close() {
|
||||||
itr.source.Close()
|
itr.source.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (itr *cLevelDBIterator) assertNoError() {
|
func (itr cLevelDBIterator) assertNoError() {
|
||||||
if err := itr.source.GetError(); err != nil {
|
if err := itr.source.GetError(); err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user