package auth import ( "testing" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto" sdk "github.com/cosmos/cosmos-sdk/types" wire "github.com/cosmos/cosmos-sdk/wire" ) func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { key := crypto.GenPrivKeyEd25519() pub := key.PubKey() addr := sdk.AccAddress(pub.Address()) return key, pub, addr } func TestBaseAddressPubKey(t *testing.T) { _, pub1, addr1 := keyPubAddr() _, pub2, addr2 := keyPubAddr() acc := NewBaseAccountWithAddress(addr1) // check the address (set) and pubkey (not set) require.EqualValues(t, addr1, acc.GetAddress()) require.EqualValues(t, nil, acc.GetPubKey()) // can't override address err := acc.SetAddress(addr2) require.NotNil(t, err) require.EqualValues(t, addr1, acc.GetAddress()) // set the pubkey err = acc.SetPubKey(pub1) require.Nil(t, err) require.Equal(t, pub1, acc.GetPubKey()) // can override pubkey err = acc.SetPubKey(pub2) require.Nil(t, err) require.Equal(t, pub2, acc.GetPubKey()) //------------------------------------ // can set address on empty account acc2 := BaseAccount{} err = acc2.SetAddress(addr2) require.Nil(t, err) require.EqualValues(t, addr2, acc2.GetAddress()) } func TestBaseAccountCoins(t *testing.T) { _, _, addr := keyPubAddr() acc := NewBaseAccountWithAddress(addr) someCoins := sdk.Coins{sdk.NewCoin("atom", 123), sdk.NewCoin("eth", 246)} err := acc.SetCoins(someCoins) require.Nil(t, err) require.Equal(t, someCoins, acc.GetCoins()) } func TestBaseAccountSequence(t *testing.T) { _, _, addr := keyPubAddr() acc := NewBaseAccountWithAddress(addr) seq := int64(7) err := acc.SetSequence(seq) require.Nil(t, err) require.Equal(t, seq, acc.GetSequence()) } func TestBaseAccountMarshal(t *testing.T) { _, pub, addr := keyPubAddr() acc := NewBaseAccountWithAddress(addr) someCoins := sdk.Coins{sdk.NewCoin("atom", 123), sdk.NewCoin("eth", 246)} seq := int64(7) // set everything on the account err := acc.SetPubKey(pub) require.Nil(t, err) err = acc.SetSequence(seq) require.Nil(t, err) err = acc.SetCoins(someCoins) require.Nil(t, err) // need a codec for marshaling codec := wire.NewCodec() wire.RegisterCrypto(codec) b, err := codec.MarshalBinary(acc) require.Nil(t, err) acc2 := BaseAccount{} err = codec.UnmarshalBinary(b, &acc2) require.Nil(t, err) require.Equal(t, acc, acc2) // error on bad bytes acc2 = BaseAccount{} err = codec.UnmarshalBinary(b[:len(b)/2], &acc2) require.NotNil(t, err) }