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  }