cosmos-sdk/x/feegrant/migrations/v046/store_test.go

84 lines
2.3 KiB
Go

package v046_test
import (
"testing"
"time"
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
"github.com/cosmos/cosmos-sdk/simapp"
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
v046 "github.com/cosmos/cosmos-sdk/x/feegrant/migrations/v046"
"github.com/stretchr/testify/require"
)
func TestMigration(t *testing.T) {
encCfg := simapp.MakeTestEncodingConfig()
cdc := encCfg.Codec
feegrantKey := sdk.NewKVStoreKey(v046.ModuleName)
ctx := testutil.DefaultContext(feegrantKey, sdk.NewTransientStoreKey("transient_test"))
granter1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
grantee1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
granter2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
grantee2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
spendLimit := sdk.NewCoins(sdk.NewCoin("stake", sdk.NewInt(1000)))
now := ctx.BlockTime()
oneDay := now.AddDate(0, 0, 1)
twoDays := now.AddDate(0, 0, 2)
grants := []struct {
granter sdk.AccAddress
grantee sdk.AccAddress
spendLimit sdk.Coins
expiration *time.Time
}{
{
granter: granter1,
grantee: grantee1,
spendLimit: spendLimit,
expiration: &twoDays,
},
{
granter: granter2,
grantee: grantee2,
spendLimit: spendLimit,
expiration: &oneDay,
},
{
granter: granter1,
grantee: grantee2,
spendLimit: spendLimit,
},
{
granter: granter2,
grantee: grantee1,
expiration: &oneDay,
},
}
store := ctx.KVStore(feegrantKey)
for _, grant := range grants {
newGrant, err := feegrant.NewGrant(grant.granter, grant.grantee, &feegrant.BasicAllowance{
SpendLimit: grant.spendLimit,
Expiration: grant.expiration,
})
require.NoError(t, err)
bz, err := cdc.Marshal(&newGrant)
require.NoError(t, err)
store.Set(v046.FeeAllowanceKey(grant.granter, grant.grantee), bz)
}
ctx = ctx.WithBlockTime(now.Add(30 * time.Hour))
require.NoError(t, v046.MigrateStore(ctx, feegrantKey, cdc))
store = ctx.KVStore(feegrantKey)
require.NotNil(t, store.Get(v046.FeeAllowanceKey(granter1, grantee1)))
require.Nil(t, store.Get(v046.FeeAllowanceKey(granter2, grantee2)))
require.NotNil(t, store.Get(v046.FeeAllowanceKey(granter1, grantee2)))
require.Nil(t, store.Get(v046.FeeAllowanceKey(granter2, grantee1)))
}