Merge PR #5164: Handle New{,Test}Keyring errors

This commit is contained in:
Alessio Treglia 2019-10-09 19:53:54 +01:00 committed by Alexander Bezobchuk
parent 160033414c
commit ee404e96ab
3 changed files with 31 additions and 16 deletions

View File

@ -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 {

View File

@ -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

View File

@ -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"