2019-02-08 12:45:23 -08:00
package keys
import (
2020-07-06 12:50:09 -07:00
"fmt"
2019-02-08 12:45:23 -08:00
"testing"
2019-11-14 06:17:21 -08:00
"github.com/stretchr/testify/require"
2019-05-28 01:44:04 -07:00
2019-02-08 12:45:23 -08:00
"github.com/tendermint/tendermint/libs/cli"
2019-05-28 01:44:04 -07:00
"github.com/cosmos/cosmos-sdk/client/flags"
2020-06-11 07:30:42 -07:00
"github.com/cosmos/cosmos-sdk/crypto/hd"
2020-03-25 08:20:36 -07:00
"github.com/cosmos/cosmos-sdk/crypto/keyring"
2020-07-09 05:21:20 -07:00
"github.com/cosmos/cosmos-sdk/testutil"
2020-01-22 09:54:56 -08:00
sdk "github.com/cosmos/cosmos-sdk/types"
2019-02-08 12:45:23 -08:00
)
func Test_runAddCmdBasic ( t * testing . T ) {
2019-12-12 13:52:24 -08:00
cmd := AddKeyCommand ( )
2020-07-20 08:12:33 -07:00
cmd . Flags ( ) . AddFlagSet ( Commands ( "home" ) . PersistentFlags ( ) )
2020-06-11 07:30:42 -07:00
2020-07-09 23:55:48 -07:00
mockIn := testutil . ApplyMockIODiscardOutErr ( cmd )
2020-09-18 04:08:24 -07:00
kbHome := t . TempDir ( )
2020-07-06 12:50:09 -07:00
kb , err := keyring . New ( sdk . KeyringServiceName ( ) , keyring . BackendTest , kbHome , mockIn )
2020-09-18 04:08:24 -07:00
2020-03-30 11:30:50 -07:00
require . NoError ( t , err )
t . Cleanup ( func ( ) {
2020-06-11 07:30:42 -07:00
_ = kb . Delete ( "keyname1" )
_ = kb . Delete ( "keyname2" )
2020-03-30 11:30:50 -07:00
} )
2020-07-06 12:50:09 -07:00
cmd . SetArgs ( [ ] string {
"keyname1" ,
fmt . Sprintf ( "--%s=%s" , flags . FlagHome , kbHome ) ,
fmt . Sprintf ( "--%s=%s" , cli . OutputFlag , OutputFormatText ) ,
2020-08-12 01:34:10 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyAlgorithm , string ( hd . Secp256k1Type ) ) ,
2020-07-06 12:50:09 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyringBackend , keyring . BackendTest ) ,
} )
mockIn . Reset ( "y\n" )
require . NoError ( t , cmd . Execute ( ) )
2019-11-14 06:17:21 -08:00
2020-03-30 11:30:50 -07:00
mockIn . Reset ( "N\n" )
2020-07-06 12:50:09 -07:00
require . Error ( t , cmd . Execute ( ) )
cmd . SetArgs ( [ ] string {
"keyname2" ,
fmt . Sprintf ( "--%s=%s" , flags . FlagHome , kbHome ) ,
fmt . Sprintf ( "--%s=%s" , cli . OutputFlag , OutputFormatText ) ,
2020-08-12 01:34:10 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyAlgorithm , string ( hd . Secp256k1Type ) ) ,
2020-07-06 12:50:09 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyringBackend , keyring . BackendTest ) ,
} )
require . NoError ( t , cmd . Execute ( ) )
require . Error ( t , cmd . Execute ( ) )
2019-11-14 06:17:21 -08:00
2020-03-30 11:30:50 -07:00
mockIn . Reset ( "y\n" )
2020-07-06 12:50:09 -07:00
require . NoError ( t , cmd . Execute ( ) )
cmd . SetArgs ( [ ] string {
"keyname4" ,
fmt . Sprintf ( "--%s=%s" , flags . FlagHome , kbHome ) ,
fmt . Sprintf ( "--%s=%s" , cli . OutputFlag , OutputFormatText ) ,
2020-08-12 01:34:10 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyAlgorithm , string ( hd . Secp256k1Type ) ) ,
2020-07-06 12:50:09 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyringBackend , keyring . BackendTest ) ,
} )
require . NoError ( t , cmd . Execute ( ) )
require . Error ( t , cmd . Execute ( ) )
2020-03-30 11:30:50 -07:00
2020-07-06 12:50:09 -07:00
cmd . SetArgs ( [ ] string {
"keyname5" ,
fmt . Sprintf ( "--%s=%s" , flags . FlagHome , kbHome ) ,
fmt . Sprintf ( "--%s=true" , flags . FlagDryRun ) ,
fmt . Sprintf ( "--%s=%s" , cli . OutputFlag , OutputFormatText ) ,
2020-08-12 01:34:10 -07:00
fmt . Sprintf ( "--%s=%s" , flags . FlagKeyAlgorithm , string ( hd . Secp256k1Type ) ) ,
2020-07-06 12:50:09 -07:00
} )
2020-03-30 11:30:50 -07:00
2020-07-06 12:50:09 -07:00
require . NoError ( t , cmd . Execute ( ) )
2020-08-28 09:29:32 -07:00
// In recovery mode
cmd . SetArgs ( [ ] string {
"keyname6" ,
fmt . Sprintf ( "--%s=true" , flagRecover ) ,
} )
// use valid mnemonic and complete recovery key generation successfully
mockIn . Reset ( "decide praise business actor peasant farm drastic weather extend front hurt later song give verb rhythm worry fun pond reform school tumble august one\n" )
require . NoError ( t , cmd . Execute ( ) )
// use invalid mnemonic and fail recovery key generation
mockIn . Reset ( "invalid mnemonic\n" )
require . Error ( t , cmd . Execute ( ) )
// In interactive mode
cmd . SetArgs ( [ ] string {
"keyname7" ,
"-i" ,
fmt . Sprintf ( "--%s=false" , flagRecover ) ,
} )
const password = "password1!"
// set password and complete interactive key generation successfully
mockIn . Reset ( "\n" + password + "\n" + password + "\n" )
require . NoError ( t , cmd . Execute ( ) )
// passwords don't match and fail interactive key generation
mockIn . Reset ( "\n" + password + "\n" + "fail" + "\n" )
require . Error ( t , cmd . Execute ( ) )
2019-02-08 12:45:23 -08:00
}