cosmos-sdk/x/auth/legacy/v0_38/migrate_test.go

184 lines
5.8 KiB
Go

package v038
import (
"testing"
"time"
sdk "github.com/cosmos/cosmos-sdk/types"
v034auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_34"
v036auth "github.com/cosmos/cosmos-sdk/x/auth/legacy/v0_36"
v036genaccounts "github.com/cosmos/cosmos-sdk/x/genaccounts/legacy/v0_36"
"github.com/stretchr/testify/require"
)
func accAddressFromBech32(t *testing.T, addrStr string) sdk.AccAddress {
addr, err := sdk.AccAddressFromBech32(addrStr)
require.NoError(t, err)
return addr
}
func TestMigrate(t *testing.T) {
var genesisState GenesisState
params := v034auth.Params{
MaxMemoCharacters: 10,
TxSigLimit: 10,
TxSizeCostPerByte: 10,
SigVerifyCostED25519: 10,
SigVerifyCostSecp256k1: 10,
}
acc1 := v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos1f9xjhxm0plzrh9cskf4qee4pc2xwp0n0556gh0"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 400000)),
Sequence: 1,
AccountNumber: 1,
}
acc2 := v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 400000000)),
Sequence: 4,
AccountNumber: 2,
ModuleName: "bonded_tokens_pool",
ModulePermissions: []string{"burner", "staking"},
}
acc3 := v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos17n9sztlhx32tfy0tg0zc2ttmkeeth50yyuv9he"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
OriginalVesting: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
StartTime: time.Now().Unix(),
EndTime: time.Now().Add(48 * time.Hour).Unix(),
Sequence: 5,
AccountNumber: 3,
}
acc4 := v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos1fmk5elg4r62mlexd36tqjcwyafs7mek0js5m4d"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
OriginalVesting: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
EndTime: time.Now().Add(48 * time.Hour).Unix(),
Sequence: 15,
AccountNumber: 4,
}
require.NotPanics(t, func() {
genesisState = Migrate(
v036auth.GenesisState{
Params: params,
},
v036genaccounts.GenesisState{acc1, acc2, acc3, acc4},
)
})
expectedAcc1 := NewBaseAccount(acc1.Address, acc1.Coins, nil, acc1.AccountNumber, acc1.Sequence)
expectedAcc2 := NewModuleAccount(
NewBaseAccount(acc2.Address, acc2.Coins, nil, acc2.AccountNumber, acc2.Sequence),
acc2.ModuleName, acc2.ModulePermissions...,
)
expectedAcc3 := NewContinuousVestingAccountRaw(
NewBaseVestingAccount(
NewBaseAccount(acc3.Address, acc3.Coins, nil, acc3.AccountNumber, acc3.Sequence),
acc3.OriginalVesting, acc3.DelegatedFree, acc3.DelegatedVesting, acc3.EndTime,
),
acc3.StartTime,
)
expectedAcc4 := NewDelayedVestingAccountRaw(
NewBaseVestingAccount(
NewBaseAccount(acc4.Address, acc4.Coins, nil, acc4.AccountNumber, acc4.Sequence),
acc4.OriginalVesting, acc4.DelegatedFree, acc4.DelegatedVesting, acc4.EndTime,
),
)
require.Equal(
t, genesisState, GenesisState{
Params: params,
Accounts: GenesisAccounts{expectedAcc1, expectedAcc2, expectedAcc3, expectedAcc4},
},
)
}
func TestMigrateInvalid(t *testing.T) {
testCases := []struct {
name string
acc v036genaccounts.GenesisAccount
}{
{
"vesting account with no base coins",
v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos17n9sztlhx32tfy0tg0zc2ttmkeeth50yyuv9he"),
Coins: sdk.Coins{},
OriginalVesting: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
StartTime: time.Now().Unix(),
EndTime: time.Now().Add(48 * time.Hour).Unix(),
Sequence: 5,
AccountNumber: 3,
},
},
{
"vesting account with base coins <= original vesting",
v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos17n9sztlhx32tfy0tg0zc2ttmkeeth50yyuv9he"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 10000205)),
OriginalVesting: sdk.NewCoins(sdk.NewInt64Coin("stake", 50000205)),
StartTime: time.Now().Unix(),
EndTime: time.Now().Add(48 * time.Hour).Unix(),
Sequence: 5,
AccountNumber: 3,
},
},
{
"module account with invalid name",
v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 400000000)),
Sequence: 4,
AccountNumber: 2,
ModuleName: " ",
ModulePermissions: []string{"burner", "staking"},
},
},
{
"module account with invalid permissions",
v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos1fl48vsnmsdzcv85q5d2q4z5ajdha8yu34mf0eh"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 400000000)),
Sequence: 4,
AccountNumber: 2,
ModuleName: "bonded_tokens_pool",
ModulePermissions: []string{""},
},
},
{
"module account with invalid address",
v036genaccounts.GenesisAccount{
Address: accAddressFromBech32(t, "cosmos17n9sztlhx32tfy0tg0zc2ttmkeeth50yyuv9he"),
Coins: sdk.NewCoins(sdk.NewInt64Coin("stake", 400000000)),
Sequence: 4,
AccountNumber: 2,
ModuleName: "bonded_tokens_pool",
ModulePermissions: []string{"burner", "staking"},
},
},
}
for _, tc := range testCases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
require.Panics(t, func() {
Migrate(
v036auth.GenesisState{
Params: v034auth.Params{
MaxMemoCharacters: 10,
TxSigLimit: 10,
TxSizeCostPerByte: 10,
SigVerifyCostED25519: 10,
SigVerifyCostSecp256k1: 10,
},
},
v036genaccounts.GenesisState{tc.acc},
)
})
})
}
}