2019-09-14 07:29:08 +00:00
|
|
|
package storage
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"os"
|
|
|
|
"reflect"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestBoltDBBatch(t *testing.T) {
|
|
|
|
boltDB := BoltDBStore{}
|
2019-09-26 15:39:53 +00:00
|
|
|
want := &MemoryBatch{m: map[*[]byte][]byte{}}
|
2019-09-14 07:29:08 +00:00
|
|
|
if got := boltDB.Batch(); !reflect.DeepEqual(got, want) {
|
|
|
|
t.Errorf("BoltDB Batch() = %v, want %v", got, want)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBoltDBBatch_Len(t *testing.T) {
|
2019-09-26 15:39:53 +00:00
|
|
|
batch := &MemoryBatch{m: map[*[]byte][]byte{}}
|
2019-09-14 07:29:08 +00:00
|
|
|
want := len(map[*[]byte][]byte{})
|
|
|
|
assert.Equal(t, want, batch.Len())
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBoltDBBatch_PutBatchAndGet(t *testing.T) {
|
|
|
|
key := []byte("foo")
|
2019-09-22 17:11:34 +00:00
|
|
|
keycopy := make([]byte, len(key))
|
|
|
|
copy(keycopy, key)
|
2019-09-14 07:29:08 +00:00
|
|
|
value := []byte("bar")
|
2019-09-22 17:11:34 +00:00
|
|
|
valuecopy := make([]byte, len(value))
|
|
|
|
copy(valuecopy, value)
|
2019-09-14 07:29:08 +00:00
|
|
|
boltDBStore := openStore(t)
|
2019-09-22 17:11:34 +00:00
|
|
|
batch := boltDBStore.Batch()
|
2019-09-14 07:29:08 +00:00
|
|
|
|
2019-09-22 17:11:34 +00:00
|
|
|
batch.Put(keycopy, valuecopy)
|
|
|
|
copy(valuecopy, key)
|
|
|
|
copy(keycopy, value)
|
2019-09-14 07:29:08 +00:00
|
|
|
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())
|
2019-09-16 15:52:47 +00:00
|
|
|
boltDBStore, err := NewBoltDBStore(BoltDBOptions{FilePath: testFileName})
|
2019-09-14 07:29:08 +00:00
|
|
|
require.NoError(t, err)
|
|
|
|
return boltDBStore
|
|
|
|
}
|