github.com/cosmos/cosmos-sdk@v0.50.10/x/authz/migrations/v2/store_test.go (about) 1 package v2_test 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/require" 8 9 storetypes "cosmossdk.io/store/types" 10 11 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 12 "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" 13 "github.com/cosmos/cosmos-sdk/runtime" 14 "github.com/cosmos/cosmos-sdk/testutil" 15 sdk "github.com/cosmos/cosmos-sdk/types" 16 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 17 "github.com/cosmos/cosmos-sdk/x/authz" 18 v2 "github.com/cosmos/cosmos-sdk/x/authz/migrations/v2" 19 authzmodule "github.com/cosmos/cosmos-sdk/x/authz/module" 20 "github.com/cosmos/cosmos-sdk/x/bank" 21 banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" 22 govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" 23 ) 24 25 func TestMigration(t *testing.T) { 26 encodingConfig := moduletestutil.MakeTestEncodingConfig(authzmodule.AppModuleBasic{}, bank.AppModuleBasic{}) 27 cdc := encodingConfig.Codec 28 29 authzKey := storetypes.NewKVStoreKey("authz") 30 ctx := testutil.DefaultContext(authzKey, storetypes.NewTransientStoreKey("transient_test")) 31 granter1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 32 grantee1 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 33 granter2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 34 grantee2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) 35 36 sendMsgType := banktypes.SendAuthorization{}.MsgTypeURL() 37 genericMsgType := sdk.MsgTypeURL(&govtypes.MsgVote{}) 38 coins100 := sdk.NewCoins(sdk.NewInt64Coin("atom", 100)) 39 blockTime := ctx.BlockTime() 40 oneDay := blockTime.AddDate(0, 0, 1) 41 oneYear := blockTime.AddDate(1, 0, 0) 42 sendAuthz := banktypes.NewSendAuthorization(coins100, nil) 43 44 grants := []struct { 45 granter sdk.AccAddress 46 grantee sdk.AccAddress 47 msgType string 48 authorization func() authz.Grant 49 }{ 50 { 51 granter1, 52 grantee1, 53 sendMsgType, 54 func() authz.Grant { 55 any, err := codectypes.NewAnyWithValue(sendAuthz) 56 require.NoError(t, err) 57 return authz.Grant{ 58 Authorization: any, 59 Expiration: &oneDay, 60 } 61 }, 62 }, 63 { 64 granter1, 65 grantee2, 66 sendMsgType, 67 func() authz.Grant { 68 any, err := codectypes.NewAnyWithValue(sendAuthz) 69 require.NoError(t, err) 70 return authz.Grant{ 71 Authorization: any, 72 Expiration: &oneDay, 73 } 74 }, 75 }, 76 { 77 granter2, 78 grantee1, 79 genericMsgType, 80 func() authz.Grant { 81 any, err := codectypes.NewAnyWithValue(authz.NewGenericAuthorization(genericMsgType)) 82 require.NoError(t, err) 83 return authz.Grant{ 84 Authorization: any, 85 Expiration: &oneYear, 86 } 87 }, 88 }, 89 { 90 granter2, 91 grantee2, 92 genericMsgType, 93 func() authz.Grant { 94 any, err := codectypes.NewAnyWithValue(authz.NewGenericAuthorization(genericMsgType)) 95 require.NoError(t, err) 96 return authz.Grant{ 97 Authorization: any, 98 Expiration: &blockTime, 99 } 100 }, 101 }, 102 } 103 104 storeService := runtime.NewKVStoreService(authzKey) 105 store := storeService.OpenKVStore(ctx) 106 107 for _, g := range grants { 108 grant := g.authorization() 109 store.Set(v2.GrantStoreKey(g.grantee, g.granter, g.msgType), cdc.MustMarshal(&grant)) 110 } 111 112 ctx = ctx.WithBlockTime(ctx.BlockTime().Add(1 * time.Hour)) 113 require.NoError(t, v2.MigrateStore(ctx, storeService, cdc)) 114 115 bz, err := store.Get(v2.GrantStoreKey(grantee1, granter2, genericMsgType)) 116 require.NoError(t, err) 117 require.NotNil(t, bz) 118 119 bz, err = store.Get(v2.GrantStoreKey(grantee1, granter1, sendMsgType)) 120 require.NoError(t, err) 121 require.NotNil(t, bz) 122 123 bz, err = store.Get(v2.GrantStoreKey(grantee2, granter2, genericMsgType)) 124 require.NoError(t, err) 125 require.Nil(t, bz) 126 }