github.com/cosmos/cosmos-sdk@v0.50.10/client/keys/migrate_test.go (about) 1 package keys 2 3 import ( 4 "context" 5 "fmt" 6 "strings" 7 "testing" 8 9 design99keyring "github.com/99designs/keyring" 10 "github.com/stretchr/testify/suite" 11 12 "github.com/cosmos/cosmos-sdk/client" 13 "github.com/cosmos/cosmos-sdk/client/flags" 14 "github.com/cosmos/cosmos-sdk/codec" 15 "github.com/cosmos/cosmos-sdk/crypto/keyring" 16 "github.com/cosmos/cosmos-sdk/crypto/keys/multisig" 17 "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" 18 cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" 19 "github.com/cosmos/cosmos-sdk/testutil" 20 moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" 21 ) 22 23 type setter interface { 24 SetItem(item design99keyring.Item) error 25 } 26 27 type MigrateTestSuite struct { 28 suite.Suite 29 30 dir string 31 appName string 32 cdc codec.Codec 33 priv cryptotypes.PrivKey 34 pub cryptotypes.PubKey 35 } 36 37 func (s *MigrateTestSuite) SetupSuite() { 38 s.dir = s.T().TempDir() 39 s.cdc = moduletestutil.MakeTestEncodingConfig().Codec 40 s.appName = "cosmos" 41 s.priv = cryptotypes.PrivKey(secp256k1.GenPrivKey()) 42 s.pub = s.priv.PubKey() 43 } 44 45 func (s *MigrateTestSuite) Test_runListAndShowCmd() { 46 // adding LegacyInfo item into keyring 47 multi := multisig.NewLegacyAminoPubKey( 48 1, []cryptotypes.PubKey{ 49 s.pub, 50 }, 51 ) 52 legacyMultiInfo, err := keyring.NewLegacyMultiInfo(s.appName, multi) 53 s.Require().NoError(err) 54 serializedLegacyMultiInfo := keyring.MarshalInfo(legacyMultiInfo) 55 56 item := design99keyring.Item{ 57 Key: s.appName + ".info", 58 Data: serializedLegacyMultiInfo, 59 Description: "SDK keyring version", 60 } 61 62 // run test simd keys list - to see that the migrated key is there 63 cmd := ListKeysCmd() 64 cmd.Flags().AddFlagSet(Commands().PersistentFlags()) 65 66 mockIn := testutil.ApplyMockIODiscardOutErr(cmd) 67 kb, err := keyring.New(s.appName, keyring.BackendTest, s.dir, mockIn, s.cdc) 68 s.Require().NoError(err) 69 70 setter, ok := kb.(setter) 71 s.Require().True(ok) 72 s.Require().NoError(setter.SetItem(item)) 73 74 clientCtx := client.Context{}.WithKeyring(kb) 75 ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx) 76 77 cmd.SetArgs([]string{ 78 fmt.Sprintf("--%s=%s", flags.FlagKeyringDir, s.dir), 79 fmt.Sprintf("--%s=false", flagListNames), 80 }) 81 82 s.Require().NoError(cmd.ExecuteContext(ctx)) 83 84 // simd show n1 - to see that the migration worked 85 cmd = ShowKeysCmd() 86 cmd.SetArgs([]string{s.appName}) 87 clientCtx = clientCtx.WithCodec(s.cdc) 88 ctx = context.WithValue(context.Background(), client.ClientContextKey, &clientCtx) 89 s.Require().NoError(cmd.ExecuteContext(ctx)) 90 } 91 92 func (s *MigrateTestSuite) Test_runMigrateCmdRecord() { 93 k, err := keyring.NewLocalRecord("test record", s.priv, s.pub) 94 s.Require().NoError(err) 95 serializedRecord, err := s.cdc.Marshal(k) 96 s.Require().NoError(err) 97 98 item := design99keyring.Item{ 99 Key: s.appName, 100 Data: serializedRecord, 101 Description: "SDK kerying version", 102 } 103 104 cmd := MigrateCommand() 105 mockIn := strings.NewReader("") 106 kb, err := keyring.New(s.appName, keyring.BackendTest, s.dir, mockIn, s.cdc) 107 s.Require().NoError(err) 108 109 setter, ok := kb.(setter) 110 s.Require().True(ok) 111 s.Require().NoError(setter.SetItem(item)) 112 113 clientCtx := client.Context{}.WithKeyring(kb) 114 ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx) 115 s.Require().NoError(cmd.ExecuteContext(ctx)) 116 } 117 118 func (s *MigrateTestSuite) Test_runMigrateCmdLegacyMultiInfo() { 119 // adding LegacyInfo item into keyring 120 multi := multisig.NewLegacyAminoPubKey( 121 1, []cryptotypes.PubKey{ 122 s.pub, 123 }, 124 ) 125 126 legacyMultiInfo, err := keyring.NewLegacyMultiInfo(s.appName, multi) 127 s.Require().NoError(err) 128 serializedLegacyMultiInfo := keyring.MarshalInfo(legacyMultiInfo) 129 130 item := design99keyring.Item{ 131 Key: s.appName, 132 Data: serializedLegacyMultiInfo, 133 Description: "SDK kerying version", 134 } 135 136 cmd := MigrateCommand() 137 mockIn := testutil.ApplyMockIODiscardOutErr(cmd) 138 139 kb, err := keyring.New(s.appName, keyring.BackendTest, s.dir, mockIn, s.cdc) 140 s.Require().NoError(err) 141 142 setter, ok := kb.(setter) 143 s.Require().True(ok) 144 s.Require().NoError(setter.SetItem(item)) 145 146 clientCtx := client.Context{}.WithKeyring(kb) 147 ctx := context.WithValue(context.Background(), client.ClientContextKey, &clientCtx) 148 s.Require().NoError(cmd.ExecuteContext(ctx)) 149 } 150 151 func TestMigrateTestSuite(t *testing.T) { 152 suite.Run(t, new(MigrateTestSuite)) 153 }