package memstorage
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
crypto "github.com/tendermint/go-crypto"
|
|
keys "github.com/tendermint/go-crypto/keys"
|
|
)
|
|
|
|
func TestBasicCRUD(t *testing.T) {
|
|
assert := assert.New(t)
|
|
store := New()
|
|
|
|
name := "foo"
|
|
key := []byte("secret-key-here")
|
|
salt := []byte("salt-here")
|
|
pubkey := crypto.GenPrivKeyEd25519().PubKey()
|
|
info := keys.Info{
|
|
Name: name,
|
|
PubKey: pubkey,
|
|
}
|
|
|
|
// No data: Get and Delete return nothing
|
|
_, _, _, err := store.Get(name)
|
|
assert.NotNil(err)
|
|
err = store.Delete(name)
|
|
assert.NotNil(err)
|
|
// List returns empty list
|
|
l, err := store.List()
|
|
assert.Nil(err)
|
|
assert.Empty(l)
|
|
|
|
// Putting the key in the store must work
|
|
err = store.Put(name, salt, key, info)
|
|
assert.Nil(err)
|
|
// But a second time is a failure
|
|
err = store.Put(name, salt, key, info)
|
|
assert.NotNil(err)
|
|
|
|
// Now, we can get and list properly
|
|
_, k, i, err := store.Get(name)
|
|
assert.Nil(err)
|
|
assert.Equal(key, k)
|
|
assert.Equal(info.Name, i.Name)
|
|
assert.Equal(info.PubKey, i.PubKey)
|
|
assert.NotEmpty(i.Address)
|
|
l, err = store.List()
|
|
assert.Nil(err)
|
|
assert.Equal(1, len(l))
|
|
assert.Equal(i, l[0])
|
|
|
|
// querying a non-existent key fails
|
|
_, _, _, err = store.Get("badname")
|
|
assert.NotNil(err)
|
|
|
|
// We can only delete once
|
|
err = store.Delete(name)
|
|
assert.Nil(err)
|
|
err = store.Delete(name)
|
|
assert.NotNil(err)
|
|
|
|
// and then Get and List don't work
|
|
_, _, _, err = store.Get(name)
|
|
assert.NotNil(err)
|
|
// List returns empty list
|
|
l, err = store.List()
|
|
assert.Nil(err)
|
|
assert.Empty(l)
|
|
}
|