gecko/vms/platformvm/user_test.go

109 lines
2.8 KiB
Go

// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.
package platformvm
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/ava-labs/gecko/database/memdb"
"github.com/ava-labs/gecko/ids"
"github.com/ava-labs/gecko/utils/crypto"
)
func TestUserNilDB(t *testing.T) {
u := user{}
_, err := u.getAccountIDs()
assert.Error(t, err, "nil db should have caused an error")
_, err = u.controlsAccount(ids.ShortEmpty)
assert.Error(t, err, "nil db should have caused an error")
_, err = u.getKey(ids.ShortEmpty)
assert.Error(t, err, "nil db should have caused an error")
factory := crypto.FactorySECP256K1R{}
sk, err := factory.NewPrivateKey()
assert.NoError(t, err)
err = u.putAccount(sk.(*crypto.PrivateKeySECP256K1R))
assert.Error(t, err, "nil db should have caused an error")
}
func TestUserClosedDB(t *testing.T) {
db := memdb.New()
err := db.Close()
assert.NoError(t, err)
u := user{db: db}
_, err = u.getAccountIDs()
assert.Error(t, err, "closed db should have caused an error")
_, err = u.controlsAccount(ids.ShortEmpty)
assert.Error(t, err, "closed db should have caused an error")
_, err = u.getKey(ids.ShortEmpty)
assert.Error(t, err, "closed db should have caused an error")
factory := crypto.FactorySECP256K1R{}
sk, err := factory.NewPrivateKey()
assert.NoError(t, err)
err = u.putAccount(sk.(*crypto.PrivateKeySECP256K1R))
assert.Error(t, err, "closed db should have caused an error")
}
func TestUserNilSK(t *testing.T) {
u := user{db: memdb.New()}
err := u.putAccount(nil)
assert.Error(t, err, "nil key should have caused an error")
}
func TestUserNilAccount(t *testing.T) {
u := user{db: memdb.New()}
_, err := u.controlsAccount(ids.ShortID{})
assert.Error(t, err, "nil accountID should have caused an error")
_, err = u.getKey(ids.ShortID{})
assert.Error(t, err, "nil accountID should have caused an error")
}
func TestUser(t *testing.T) {
u := user{db: memdb.New()}
accountIDs, err := u.getAccountIDs()
assert.NoError(t, err)
assert.Empty(t, accountIDs, "new user shouldn't have accounts")
factory := crypto.FactorySECP256K1R{}
sk, err := factory.NewPrivateKey()
assert.NoError(t, err)
err = u.putAccount(sk.(*crypto.PrivateKeySECP256K1R))
assert.NoError(t, err)
addr := sk.PublicKey().Address()
ok, err := u.controlsAccount(addr)
assert.NoError(t, err)
assert.True(t, ok, "added account should have been marked as controlled")
savedSk, err := u.getKey(addr)
assert.NoError(t, err)
assert.Equal(t, sk.Bytes(), savedSk.Bytes(), "wrong key returned")
accountIDs, err = u.getAccountIDs()
assert.NoError(t, err)
assert.Len(t, accountIDs, 1, "account should have been added")
savedAddr := accountIDs[0]
equals := addr.Equals(savedAddr)
assert.True(t, equals, "saved address should match provided address")
}