2017-10-06 15:29:20 +00:00
|
|
|
package storm
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/mail"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/asdine/storm/codec/gob"
|
|
|
|
"github.com/asdine/storm/codec/json"
|
2018-01-03 19:29:07 +00:00
|
|
|
"github.com/coreos/bbolt"
|
2017-10-06 15:29:20 +00:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestGet(t *testing.T) {
|
|
|
|
db, cleanup := createDB(t)
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
err := db.Set("trash", 10, 100)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
var nb int
|
|
|
|
err = db.Get("trash", 10, &nb)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 100, nb)
|
|
|
|
|
|
|
|
tm := time.Now()
|
|
|
|
err = db.Set("logs", tm, "I'm hungry")
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
var message string
|
|
|
|
err = db.Get("logs", tm, &message)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, "I'm hungry", message)
|
|
|
|
|
|
|
|
var hand int
|
|
|
|
err = db.Get("wallet", "100 bucks", &hand)
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
|
|
|
|
err = db.Set("wallet", "10 bucks", 10)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
err = db.Get("wallet", "100 bucks", &hand)
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
|
|
|
|
err = db.Get("logs", tm, nil)
|
|
|
|
require.Equal(t, ErrPtrNeeded, err)
|
|
|
|
|
|
|
|
err = db.Get("", nil, nil)
|
|
|
|
require.Equal(t, ErrPtrNeeded, err)
|
|
|
|
|
|
|
|
err = db.Get("", "100 bucks", &hand)
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestGetBytes(t *testing.T) {
|
|
|
|
db, cleanup := createDB(t)
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
err := db.SetBytes("trash", "a", []byte("hi"))
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
val, err := db.GetBytes("trash", "a")
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, []byte("hi"), val)
|
|
|
|
|
|
|
|
_, err = db.GetBytes("trash", "b")
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSet(t *testing.T) {
|
|
|
|
db, cleanup := createDB(t)
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
err := db.Set("b1", 10, 10)
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Set("b1", "best friend's mail", &mail.Address{Name: "Gandalf", Address: "gandalf@lorien.ma"})
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Set("b2", []byte("i'm already a slice of bytes"), "a value")
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Set("b2", []byte("i'm already a slice of bytes"), nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Set("b1", 0, 100)
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Set("b1", nil, 100)
|
|
|
|
require.Error(t, err)
|
|
|
|
|
|
|
|
db.Bolt.View(func(tx *bolt.Tx) error {
|
|
|
|
b1 := tx.Bucket([]byte("b1"))
|
|
|
|
require.NotNil(t, b1)
|
|
|
|
b2 := tx.Bucket([]byte("b2"))
|
|
|
|
require.NotNil(t, b2)
|
|
|
|
|
|
|
|
k1, err := toBytes(10, json.Codec)
|
|
|
|
require.NoError(t, err)
|
|
|
|
val := b1.Get(k1)
|
|
|
|
require.NotNil(t, val)
|
|
|
|
|
|
|
|
k2 := []byte("best friend's mail")
|
|
|
|
val = b1.Get(k2)
|
|
|
|
require.NotNil(t, val)
|
|
|
|
|
|
|
|
k3, err := toBytes(0, json.Codec)
|
|
|
|
require.NoError(t, err)
|
|
|
|
val = b1.Get(k3)
|
|
|
|
require.NotNil(t, val)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
err = db.Set("", 0, 100)
|
|
|
|
require.Error(t, err)
|
|
|
|
|
|
|
|
err = db.Set("b", nil, 100)
|
|
|
|
require.Error(t, err)
|
|
|
|
|
|
|
|
err = db.Set("b", 10, nil)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
err = db.Set("b", nil, nil)
|
|
|
|
require.Error(t, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSetMetadata(t *testing.T) {
|
|
|
|
db, cleanup := createDB(t, Batch())
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
w := User{ID: 10, Name: "John"}
|
|
|
|
err := db.Set("User", 10, &w)
|
|
|
|
require.NoError(t, err)
|
|
|
|
n := db.WithCodec(gob.Codec)
|
|
|
|
err = n.Set("User", 10, &w)
|
|
|
|
require.Equal(t, ErrDifferentCodec, err)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestDelete(t *testing.T) {
|
|
|
|
db, cleanup := createDB(t)
|
|
|
|
defer cleanup()
|
|
|
|
|
|
|
|
err := db.Set("files", "myfile.csv", "a,b,c,d")
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Delete("files", "myfile.csv")
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Delete("files", "myfile.csv")
|
|
|
|
require.NoError(t, err)
|
|
|
|
err = db.Delete("i don't exist", "myfile.csv")
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
err = db.Delete("", nil)
|
|
|
|
require.Equal(t, ErrNotFound, err)
|
|
|
|
}
|