forked from TrueCloudLab/neoneo-go
add9368e9d
Using pointers is just plain wrong here, because the batch can be updated with newer values for the same keys. Fixes Seek() to use HasPrefix also because this is the intended behavior.
79 lines
1.7 KiB
Go
79 lines
1.7 KiB
Go
package storage
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestBoltDBBatch_PutBatchAndGet(t *testing.T) {
|
|
key := []byte("foo")
|
|
keycopy := make([]byte, len(key))
|
|
copy(keycopy, key)
|
|
value := []byte("bar")
|
|
valuecopy := make([]byte, len(value))
|
|
copy(valuecopy, value)
|
|
boltDBStore := openStore(t)
|
|
batch := boltDBStore.Batch()
|
|
|
|
batch.Put(keycopy, valuecopy)
|
|
copy(valuecopy, key)
|
|
copy(keycopy, value)
|
|
errPut := boltDBStore.PutBatch(batch)
|
|
assert.Nil(t, errPut, "Error while PutBatch")
|
|
|
|
result, err := boltDBStore.Get(key)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, value, result)
|
|
|
|
require.NoError(t, boltDBStore.Close())
|
|
}
|
|
|
|
func TestBoltDBBatch_PutAndGet(t *testing.T) {
|
|
key := []byte("foo")
|
|
value := []byte("bar")
|
|
|
|
boltDBStore := openStore(t)
|
|
|
|
errPut := boltDBStore.Put(key, value)
|
|
assert.Nil(t, errPut, "Error while Put")
|
|
|
|
result, err := boltDBStore.Get(key)
|
|
assert.Nil(t, err)
|
|
assert.Equal(t, value, result)
|
|
|
|
require.NoError(t, boltDBStore.Close())
|
|
}
|
|
|
|
func TestBoltDBStore_Seek(t *testing.T) {
|
|
key := []byte("foo")
|
|
value := []byte("bar")
|
|
|
|
boltDBStore := openStore(t)
|
|
|
|
errPut := boltDBStore.Put(key, value)
|
|
assert.Nil(t, errPut, "Error while Put")
|
|
|
|
boltDBStore.Seek(key, func(k, v []byte) {
|
|
assert.Equal(t, value, v)
|
|
})
|
|
|
|
require.NoError(t, boltDBStore.Close())
|
|
}
|
|
|
|
func openStore(t *testing.T) *BoltDBStore {
|
|
testFileName := "test_bolt_db"
|
|
file, err := ioutil.TempFile("", testFileName)
|
|
defer func() {
|
|
err := os.RemoveAll(testFileName)
|
|
require.NoError(t, err)
|
|
}()
|
|
require.NoError(t, err)
|
|
require.NoError(t, file.Close())
|
|
boltDBStore, err := NewBoltDBStore(BoltDBOptions{FilePath: testFileName})
|
|
require.NoError(t, err)
|
|
return boltDBStore
|
|
}
|