Merge PR #5164: Handle New{,Test}Keyring errors
This commit is contained in:
parent
160033414c
commit
ee404e96ab
|
@ -2,12 +2,14 @@ package keys
|
|||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/client/input"
|
||||
"github.com/cosmos/cosmos-sdk/crypto/keys"
|
||||
"github.com/cosmos/cosmos-sdk/types"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
@ -48,10 +50,16 @@ func runMigrateCmd(cmd *cobra.Command, args []string) error {
|
|||
// instantiate keyring
|
||||
var keyring keys.Keybase
|
||||
buf := bufio.NewReader(cmd.InOrStdin())
|
||||
keyringServiceName := types.GetConfig().GetKeyringServiceName()
|
||||
if viper.GetBool(flags.FlagDryRun) {
|
||||
keyring = keys.NewTestKeyring(types.GetConfig().GetKeyringServiceName(), rootDir)
|
||||
keyring, err = keys.NewTestKeyring(keyringServiceName, rootDir)
|
||||
} else {
|
||||
keyring = keys.NewKeyring(types.GetConfig().GetKeyringServiceName(), rootDir, buf)
|
||||
keyring, err = keys.NewKeyring(keyringServiceName, rootDir, buf)
|
||||
}
|
||||
if err != nil {
|
||||
return errors.Wrap(err, fmt.Sprintf(
|
||||
"failed to initialize keyring for service %s at directory %s",
|
||||
keyringServiceName, rootDir))
|
||||
}
|
||||
|
||||
for _, key := range oldKeys {
|
||||
|
|
|
@ -38,24 +38,24 @@ type keyringKeybase struct {
|
|||
var maxPassphraseEntryAttempts = 3
|
||||
|
||||
// NewKeyring creates a new instance of a keyring.
|
||||
func NewKeyring(name string, dir string, userInput io.Reader) Keybase {
|
||||
func NewKeyring(name string, dir string, userInput io.Reader) (Keybase, error) {
|
||||
db, err := keyring.Open(lkbToKeyringConfig(name, dir, userInput, false))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return newKeyringKeybase(db)
|
||||
return newKeyringKeybase(db), nil
|
||||
}
|
||||
|
||||
// NewTestKeyring creates a new instance of a keyring for
|
||||
// testing purposes that does not prompt users for password.
|
||||
func NewTestKeyring(name string, dir string) Keybase {
|
||||
func NewTestKeyring(name string, dir string) (Keybase, error) {
|
||||
db, err := keyring.Open(lkbToKeyringConfig(name, dir, nil, true))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return newKeyringKeybase(db)
|
||||
return newKeyringKeybase(db), nil
|
||||
}
|
||||
|
||||
// CreateMnemonic generates a new key and persists it to storage, encrypted
|
||||
|
|
|
@ -17,7 +17,8 @@ import (
|
|||
func TestLazyKeyManagementKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2, n3 := "personal", "business", "other"
|
||||
|
@ -100,7 +101,8 @@ func TestLazyKeyManagementKeyRing(t *testing.T) {
|
|||
func TestLazySignVerifyKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
algo := Secp256k1
|
||||
|
||||
n1, n2, n3 := "some dude", "a dudette", "dude-ish"
|
||||
|
@ -175,7 +177,8 @@ func TestLazySignVerifyKeyRing(t *testing.T) {
|
|||
func TestLazyExportImportKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
info, _, err := kb.CreateMnemonic("john", English, "secretcpw", Secp256k1)
|
||||
require.NoError(t, err)
|
||||
|
@ -203,7 +206,8 @@ func TestLazyExportImportKeyRing(t *testing.T) {
|
|||
func TestLazyExportImportPubKeyKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
// CreateMnemonic a private-public key pair and ensure consistency
|
||||
notPasswd := "n9y25ah7"
|
||||
|
@ -242,7 +246,8 @@ func TestLazyExportImportPubKeyKeyRing(t *testing.T) {
|
|||
func TestLazyExportPrivateKeyObjectKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
info, _, err := kb.CreateMnemonic("john", English, "secretcpw", Secp256k1)
|
||||
require.NoError(t, err)
|
||||
|
@ -257,14 +262,15 @@ func TestLazyExportPrivateKeyObjectKeyRing(t *testing.T) {
|
|||
func TestLazyAdvancedKeyManagementKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2 := "old-name", "new name"
|
||||
p1 := "1234"
|
||||
|
||||
// make sure key works with initial password
|
||||
_, _, err := kb.CreateMnemonic(n1, English, p1, algo)
|
||||
_, _, err = kb.CreateMnemonic(n1, English, p1, algo)
|
||||
require.Nil(t, err, "%+v", err)
|
||||
|
||||
_, err = kb.Export(n1 + ".notreal")
|
||||
|
@ -290,7 +296,8 @@ func TestLazyAdvancedKeyManagementKeyRing(t *testing.T) {
|
|||
func TestLazySeedPhraseKeyRing(t *testing.T) {
|
||||
dir, cleanup := tests.NewTestCaseDir(t)
|
||||
defer cleanup()
|
||||
kb := NewTestKeyring("keybasename", dir)
|
||||
kb, err := NewTestKeyring("keybasename", dir)
|
||||
require.NoError(t, err)
|
||||
|
||||
algo := Secp256k1
|
||||
n1, n2 := "lost-key", "found-again"
|
||||
|
|
Loading…
Reference in New Issue