github.com/cosmos/cosmos-sdk@v0.50.10/x/auth/types/genesis_test.go (about) 1 package types_test 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 proto "github.com/cosmos/gogoproto/proto" 8 "github.com/stretchr/testify/require" 9 10 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 11 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" 12 sdk "github.com/cosmos/cosmos-sdk/types" 13 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 14 "github.com/cosmos/cosmos-sdk/x/auth" 15 "github.com/cosmos/cosmos-sdk/x/auth/types" 16 ) 17 18 func TestSanitize(t *testing.T) { 19 addr1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 20 authAcc1 := types.NewBaseAccountWithAddress(addr1) 21 err := authAcc1.SetAccountNumber(1) 22 require.NoError(t, err) 23 24 addr2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 25 authAcc2 := types.NewBaseAccountWithAddress(addr2) 26 27 genAccs := types.GenesisAccounts{authAcc1, authAcc2} 28 29 require.True(t, genAccs[0].GetAccountNumber() > genAccs[1].GetAccountNumber()) 30 require.Equal(t, genAccs[1].GetAddress(), addr2) 31 genAccs = types.SanitizeGenesisAccounts(genAccs) 32 33 require.False(t, genAccs[0].GetAccountNumber() > genAccs[1].GetAccountNumber()) 34 require.Equal(t, genAccs[1].GetAddress(), addr1) 35 } 36 37 var ( 38 pk1 = ed25519.GenPrivKey().PubKey() 39 pk2 = ed25519.GenPrivKey().PubKey() 40 addr1 = sdk.ValAddress(pk1.Address()) 41 addr2 = sdk.ValAddress(pk2.Address()) 42 ) 43 44 // require duplicate accounts fails validation 45 func TestValidateGenesisDuplicateAccounts(t *testing.T) { 46 acc1 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr1)) 47 48 genAccs := make(types.GenesisAccounts, 2) 49 genAccs[0] = acc1 50 genAccs[1] = acc1 51 52 require.Error(t, types.ValidateGenAccounts(genAccs)) 53 } 54 55 func TestGenesisAccountIterator(t *testing.T) { 56 encodingConfig := moduletestutil.MakeTestEncodingConfig(auth.AppModuleBasic{}) 57 cdc := encodingConfig.Codec 58 59 acc1 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr1)) 60 acc2 := types.NewBaseAccountWithAddress(sdk.AccAddress(addr2)) 61 62 genAccounts := types.GenesisAccounts{acc1, acc2} 63 64 authGenState := types.DefaultGenesisState() 65 accounts, err := types.PackAccounts(genAccounts) 66 require.NoError(t, err) 67 authGenState.Accounts = accounts 68 69 appGenesis := make(map[string]json.RawMessage) 70 authGenStateBz, err := cdc.MarshalJSON(authGenState) 71 require.NoError(t, err) 72 73 appGenesis[types.ModuleName] = authGenStateBz 74 75 var addresses []sdk.AccAddress 76 types.GenesisAccountIterator{}.IterateGenesisAccounts( 77 cdc, appGenesis, func(acc sdk.AccountI) (stop bool) { 78 addresses = append(addresses, acc.GetAddress()) 79 return false 80 }, 81 ) 82 83 require.Len(t, addresses, 2) 84 require.Equal(t, addresses[0], acc1.GetAddress()) 85 require.Equal(t, addresses[1], acc2.GetAddress()) 86 } 87 88 func TestPackAccountsAny(t *testing.T) { 89 var accounts []*codectypes.Any 90 91 testCases := []struct { 92 msg string 93 malleate func() 94 expPass bool 95 }{ 96 { 97 "expected genesis account", 98 func() { 99 accounts = []*codectypes.Any{{}} 100 }, 101 false, 102 }, 103 { 104 "success", 105 func() { 106 genAccounts := types.GenesisAccounts{&types.BaseAccount{}} 107 accounts = make([]*codectypes.Any, len(genAccounts)) 108 109 for i, a := range genAccounts { 110 msg, ok := a.(proto.Message) 111 require.Equal(t, ok, true) 112 any, err := codectypes.NewAnyWithValue(msg) 113 require.NoError(t, err) 114 accounts[i] = any 115 } 116 }, 117 true, 118 }, 119 } 120 121 for _, tc := range testCases { 122 t.Run(tc.msg, func(t *testing.T) { 123 tc.malleate() 124 125 res, err := types.UnpackAccounts(accounts) 126 127 if tc.expPass { 128 require.NoError(t, err) 129 require.NotNil(t, res) 130 require.Equal(t, len(res), len(accounts)) 131 } else { 132 require.Error(t, err) 133 require.Nil(t, res) 134 } 135 }) 136 } 137 }