2019-09-12 12:22:25 -07:00
|
|
|
package types
|
|
|
|
|
|
|
|
import (
|
2019-09-13 15:26:29 -07:00
|
|
|
"encoding/json"
|
2019-09-12 12:22:25 -07:00
|
|
|
"testing"
|
|
|
|
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/tendermint/tendermint/crypto/ed25519"
|
|
|
|
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/auth/exported"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestSanitize(t *testing.T) {
|
|
|
|
addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
|
|
|
|
authAcc1 := NewBaseAccountWithAddress(addr1)
|
|
|
|
authAcc1.SetCoins(sdk.Coins{
|
|
|
|
sdk.NewInt64Coin("bcoin", 150),
|
|
|
|
sdk.NewInt64Coin("acoin", 150),
|
|
|
|
})
|
|
|
|
authAcc1.SetAccountNumber(1)
|
|
|
|
|
|
|
|
addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
|
|
|
|
authAcc2 := NewBaseAccountWithAddress(addr2)
|
|
|
|
authAcc2.SetCoins(sdk.Coins{
|
|
|
|
sdk.NewInt64Coin("acoin", 150),
|
|
|
|
sdk.NewInt64Coin("bcoin", 150),
|
|
|
|
})
|
|
|
|
|
2019-09-13 15:26:29 -07:00
|
|
|
genAccs := exported.GenesisAccounts{&authAcc1, &authAcc2}
|
2019-09-12 12:22:25 -07:00
|
|
|
|
|
|
|
require.True(t, genAccs[0].GetAccountNumber() > genAccs[1].GetAccountNumber())
|
|
|
|
require.Equal(t, genAccs[0].GetCoins()[0].Denom, "bcoin")
|
|
|
|
require.Equal(t, genAccs[0].GetCoins()[1].Denom, "acoin")
|
|
|
|
require.Equal(t, genAccs[1].GetAddress(), addr2)
|
2019-09-13 15:26:29 -07:00
|
|
|
genAccs = SanitizeGenesisAccounts(genAccs)
|
2019-09-12 12:22:25 -07:00
|
|
|
|
|
|
|
require.False(t, genAccs[0].GetAccountNumber() > genAccs[1].GetAccountNumber())
|
|
|
|
require.Equal(t, genAccs[1].GetAddress(), addr1)
|
|
|
|
require.Equal(t, genAccs[1].GetCoins()[0].Denom, "acoin")
|
|
|
|
require.Equal(t, genAccs[1].GetCoins()[1].Denom, "bcoin")
|
|
|
|
}
|
|
|
|
|
|
|
|
var (
|
|
|
|
pk1 = ed25519.GenPrivKey().PubKey()
|
|
|
|
pk2 = ed25519.GenPrivKey().PubKey()
|
|
|
|
addr1 = sdk.ValAddress(pk1.Address())
|
|
|
|
addr2 = sdk.ValAddress(pk2.Address())
|
|
|
|
)
|
|
|
|
|
|
|
|
// require duplicate accounts fails validation
|
|
|
|
func TestValidateGenesisDuplicateAccounts(t *testing.T) {
|
|
|
|
acc1 := NewBaseAccountWithAddress(sdk.AccAddress(addr1))
|
|
|
|
acc1.Coins = sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150))
|
|
|
|
|
2019-09-13 15:26:29 -07:00
|
|
|
genAccs := make(exported.GenesisAccounts, 2)
|
2019-09-12 12:22:25 -07:00
|
|
|
genAccs[0] = &acc1
|
|
|
|
genAccs[1] = &acc1
|
|
|
|
|
2019-10-10 08:53:30 -07:00
|
|
|
require.Error(t, ValidateGenAccounts(genAccs))
|
2019-09-12 12:22:25 -07:00
|
|
|
}
|
2019-09-13 15:26:29 -07:00
|
|
|
|
|
|
|
func TestGenesisAccountIterator(t *testing.T) {
|
|
|
|
acc1 := NewBaseAccountWithAddress(sdk.AccAddress(addr1))
|
|
|
|
acc1.Coins = sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150))
|
|
|
|
|
|
|
|
acc2 := NewBaseAccountWithAddress(sdk.AccAddress(addr2))
|
|
|
|
acc2.Coins = sdk.NewCoins(sdk.NewInt64Coin(sdk.DefaultBondDenom, 150))
|
|
|
|
|
|
|
|
genAccounts := exported.GenesisAccounts{&acc1, &acc2}
|
|
|
|
|
|
|
|
authGenState := DefaultGenesisState()
|
|
|
|
authGenState.Accounts = genAccounts
|
|
|
|
|
|
|
|
appGenesis := make(map[string]json.RawMessage)
|
|
|
|
authGenStateBz, err := ModuleCdc.MarshalJSON(authGenState)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
appGenesis[ModuleName] = authGenStateBz
|
|
|
|
|
|
|
|
var addresses []sdk.AccAddress
|
|
|
|
GenesisAccountIterator{}.IterateGenesisAccounts(
|
|
|
|
ModuleCdc, appGenesis, func(acc exported.Account) (stop bool) {
|
|
|
|
addresses = append(addresses, acc.GetAddress())
|
|
|
|
return false
|
|
|
|
},
|
|
|
|
)
|
|
|
|
|
|
|
|
require.Len(t, addresses, 2)
|
|
|
|
require.Equal(t, addresses[0], acc1.GetAddress())
|
|
|
|
require.Equal(t, addresses[1], acc2.GetAddress())
|
|
|
|
}
|