mirror of https://github.com/poanetwork/gecko.git
182 lines
4.0 KiB
Go
182 lines
4.0 KiB
Go
// (c) 2019-2020, Ava Labs, Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
|
|
package platformvm
|
|
|
|
import (
|
|
"math"
|
|
"testing"
|
|
|
|
"github.com/ava-labs/gecko/ids"
|
|
)
|
|
|
|
func TestAccountVerifyNoID(t *testing.T) {
|
|
account := Account{
|
|
Address: ids.ShortID{},
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
if err := account.Verify(); err == nil {
|
|
t.Fatal("should've failed because ID is empty")
|
|
}
|
|
}
|
|
|
|
func TestAccountRemoveMaxNonce(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: math.MaxUint64,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
_, err := account.Remove(defaultBalance-txFee, account.Nonce)
|
|
if err == nil {
|
|
t.Fatal("should have failed because account is out of nonces")
|
|
}
|
|
}
|
|
|
|
func TestAccountRemoveWrongNonce(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
_, err := account.Remove(defaultBalance-txFee, account.Nonce)
|
|
if err == nil {
|
|
t.Fatal("should have failed because nonce in argument is wrong")
|
|
}
|
|
}
|
|
|
|
func TestAccountRemoveLockFunds(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: math.MaxUint64 - 1,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
_, err := account.Remove(defaultBalance-txFee-1, account.Nonce+1)
|
|
if err == nil {
|
|
t.Fatal("should have failed because funds would be locked")
|
|
}
|
|
}
|
|
|
|
func TestAccountRemoveInvalid(t *testing.T) {
|
|
account := Account{
|
|
Address: ids.ShortID{},
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
_, err := account.Remove(defaultBalance-txFee, account.Nonce+1)
|
|
if err == nil {
|
|
t.Fatal("should have failed because account is invalid (ID is empty)")
|
|
}
|
|
}
|
|
|
|
func TestRemoveOverflow(t *testing.T) {
|
|
// this test is only meaningful if txFee is non-zero
|
|
if txFee == 0 {
|
|
return
|
|
}
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: defaultNonce,
|
|
Balance: math.MaxUint64,
|
|
}
|
|
|
|
_, err := account.Remove(account.Balance, account.Nonce+1)
|
|
if err == nil {
|
|
t.Fatal("should have failed because amount to remove plus tx fee overflows")
|
|
}
|
|
}
|
|
|
|
// Remove all funds
|
|
func TestRemoveAllFunds(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
account, err := account.Remove(defaultBalance-txFee, account.Nonce+1)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if account.Balance != 0 {
|
|
t.Fatal("account balance should be 0")
|
|
}
|
|
if account.Nonce != defaultNonce+1 {
|
|
t.Fatal("nonce should've been inccremented")
|
|
}
|
|
if !account.Address.Equals(defaultKey.PublicKey().Address()) {
|
|
t.Fatal("Address shouldn't have changed")
|
|
}
|
|
}
|
|
|
|
func TestAccountAddInvalid(t *testing.T) {
|
|
account := Account{
|
|
Address: ids.ShortID{},
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
if _, err := account.Add(1); err == nil {
|
|
t.Fatal("should have error because account is invalid (has empty ID)")
|
|
}
|
|
}
|
|
|
|
func TestAccountAddMaxNonce(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: math.MaxUint64,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
if _, err := account.Add(1); err == nil {
|
|
t.Fatal("should have errored because account is out of nonces")
|
|
}
|
|
}
|
|
|
|
func TestAccountAddValid(t *testing.T) {
|
|
account := Account{
|
|
Address: defaultKey.PublicKey().Address(),
|
|
Nonce: defaultNonce,
|
|
Balance: defaultBalance,
|
|
}
|
|
|
|
if _, err := account.Add(1); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func TestMarshalAccount(t *testing.T) {
|
|
account := newAccount(
|
|
defaultKey.PublicKey().Address(),
|
|
defaultNonce,
|
|
defaultBalance,
|
|
)
|
|
|
|
bytes, err := Codec.Marshal(account)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
accountUnmarshaled := &Account{}
|
|
err = Codec.Unmarshal(bytes, accountUnmarshaled)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if !account.Address.Equals(accountUnmarshaled.Address) {
|
|
t.Fatal("IDs should match")
|
|
}
|
|
if account.Balance != accountUnmarshaled.Balance {
|
|
t.Fatal("Balances should match")
|
|
}
|
|
if account.Nonce != accountUnmarshaled.Nonce {
|
|
t.Fatal("Nonces don't match")
|
|
}
|
|
}
|