2020-02-18 04:50:13 -08:00
|
|
|
package types_test
|
2019-09-12 12:22:25 -07:00
|
|
|
|
|
|
|
import (
|
2019-09-13 15:26:29 -07:00
|
|
|
"encoding/json"
|
2019-09-12 12:22:25 -07:00
|
|
|
"testing"
|
|
|
|
|
2020-07-29 09:00:15 -07:00
|
|
|
proto "github.com/gogo/protobuf/proto"
|
2019-09-12 12:22:25 -07:00
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
|
2020-07-29 09:00:15 -07:00
|
|
|
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
2020-09-25 01:41:16 -07:00
|
|
|
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
|
2019-09-12 12:22:25 -07:00
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
2020-02-18 04:50:13 -08:00
|
|
|
"github.com/cosmos/cosmos-sdk/x/auth/types"
|
2019-09-12 12:22:25 -07:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestSanitize(t *testing.T) {
|
|
|
|
addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
|
2020-02-18 04:50:13 -08:00
|
|
|
authAcc1 := types.NewBaseAccountWithAddress(addr1)
|
2020-03-20 12:24:18 -07:00
|
|
|
err := authAcc1.SetAccountNumber(1)
|
|
|
|
require.NoError(t, err)
|
2019-09-12 12:22:25 -07:00
|
|
|
|
|
|
|
addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
|
2020-02-18 04:50:13 -08:00
|
|
|
authAcc2 := types.NewBaseAccountWithAddress(addr2)
|
2019-09-12 12:22:25 -07:00
|
|
|
|
2020-05-20 12:21:00 -07:00
|
|
|
genAccs := types.GenesisAccounts{authAcc1, authAcc2}
|
2019-09-12 12:22:25 -07:00
|
|
|
|
|
|
|
require.True(t, genAccs[0].GetAccountNumber() > genAccs[1].GetAccountNumber())
|
|
|
|
require.Equal(t, genAccs[1].GetAddress(), addr2)
|
2020-02-18 04:50:13 -08:00
|
|
|
genAccs = types.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)
|
|
|
|
}
|
|
|
|
|
|
|
|
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) {
|
2020-02-18 04:50:13 -08:00
|
|
|
acc1 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr1))
|
2019-09-12 12:22:25 -07:00
|
|
|
|
2020-05-20 12:21:00 -07:00
|
|
|
genAccs := make(types.GenesisAccounts, 2)
|
2020-02-18 04:50:13 -08:00
|
|
|
genAccs[0] = acc1
|
|
|
|
genAccs[1] = acc1
|
2019-09-12 12:22:25 -07:00
|
|
|
|
2020-02-18 04:50:13 -08:00
|
|
|
require.Error(t, types.ValidateGenAccounts(genAccs))
|
2019-09-12 12:22:25 -07:00
|
|
|
}
|
2019-09-13 15:26:29 -07:00
|
|
|
|
|
|
|
func TestGenesisAccountIterator(t *testing.T) {
|
2020-02-18 04:50:13 -08:00
|
|
|
acc1 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr1))
|
|
|
|
acc2 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr2))
|
2019-09-13 15:26:29 -07:00
|
|
|
|
2020-05-20 12:21:00 -07:00
|
|
|
genAccounts := types.GenesisAccounts{acc1, acc2}
|
2019-09-13 15:26:29 -07:00
|
|
|
|
2020-02-18 04:50:13 -08:00
|
|
|
authGenState := types.DefaultGenesisState()
|
2020-07-29 09:00:15 -07:00
|
|
|
accounts, err := types.PackAccounts(genAccounts)
|
|
|
|
require.NoError(t, err)
|
|
|
|
authGenState.Accounts = accounts
|
2019-09-13 15:26:29 -07:00
|
|
|
|
|
|
|
appGenesis := make(map[string]json.RawMessage)
|
2020-02-18 04:50:13 -08:00
|
|
|
authGenStateBz, err := appCodec.MarshalJSON(authGenState)
|
2019-09-13 15:26:29 -07:00
|
|
|
require.NoError(t, err)
|
|
|
|
|
2020-02-18 04:50:13 -08:00
|
|
|
appGenesis[types.ModuleName] = authGenStateBz
|
2019-09-13 15:26:29 -07:00
|
|
|
|
|
|
|
var addresses []sdk.AccAddress
|
2020-02-18 04:50:13 -08:00
|
|
|
types.GenesisAccountIterator{}.IterateGenesisAccounts(
|
2020-05-20 12:21:00 -07:00
|
|
|
appCodec, appGenesis, func(acc types.AccountI) (stop bool) {
|
2019-09-13 15:26:29 -07:00
|
|
|
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())
|
|
|
|
}
|
2020-07-29 09:00:15 -07:00
|
|
|
|
|
|
|
func TestPackAccountsAny(t *testing.T) {
|
|
|
|
var (
|
|
|
|
accounts []*codectypes.Any
|
|
|
|
)
|
|
|
|
|
|
|
|
testCases := []struct {
|
|
|
|
msg string
|
|
|
|
malleate func()
|
|
|
|
expPass bool
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
"expected genesis account",
|
|
|
|
func() {
|
2020-08-06 01:32:19 -07:00
|
|
|
accounts = []*codectypes.Any{{}}
|
2020-07-29 09:00:15 -07:00
|
|
|
},
|
|
|
|
false,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"success",
|
|
|
|
func() {
|
|
|
|
genAccounts := types.GenesisAccounts{&types.BaseAccount{}}
|
|
|
|
accounts = make([]*codectypes.Any, len(genAccounts))
|
|
|
|
|
|
|
|
for i, a := range genAccounts {
|
|
|
|
msg, ok := a.(proto.Message)
|
|
|
|
require.Equal(t, ok, true)
|
|
|
|
any, err := codectypes.NewAnyWithValue(msg)
|
|
|
|
require.NoError(t, err)
|
|
|
|
accounts[i] = any
|
|
|
|
}
|
|
|
|
},
|
|
|
|
true,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for _, tc := range testCases {
|
|
|
|
t.Run(tc.msg, func(t *testing.T) {
|
|
|
|
tc.malleate()
|
|
|
|
|
|
|
|
res, err := types.UnpackAccounts(accounts)
|
|
|
|
|
|
|
|
if tc.expPass {
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NotNil(t, res)
|
|
|
|
require.Equal(t, len(res), len(accounts))
|
|
|
|
} else {
|
|
|
|
require.Error(t, err)
|
|
|
|
require.Nil(t, res)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|