github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/client/keys/delete_test.go (about) 1 package keys 2 3 import ( 4 "bufio" 5 "strings" 6 "testing" 7 8 "github.com/spf13/viper" 9 "github.com/stretchr/testify/require" 10 11 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/flags" 12 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/crypto/keys" 13 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/tests" 14 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 15 ) 16 17 func Test_runDeleteCmd(t *testing.T) { 18 runningUnattended := isRunningUnattended() 19 deleteKeyCommand := DeleteKeyCommand() 20 mockIn, _, _ := tests.ApplyMockIO(deleteKeyCommand) 21 22 yesF, _ := deleteKeyCommand.Flags().GetBool(flagYes) 23 forceF, _ := deleteKeyCommand.Flags().GetBool(flagForce) 24 require.False(t, yesF) 25 require.False(t, forceF) 26 27 fakeKeyName1 := "runDeleteCmd_Key1" 28 fakeKeyName2 := "runDeleteCmd_Key2" 29 if !runningUnattended { 30 kb, err := keys.NewKeyring(sdk.KeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), viper.GetString(flags.FlagHome), mockIn) 31 require.NoError(t, err) 32 defer func() { 33 kb.Delete("runDeleteCmd_Key1", "", false) 34 kb.Delete("runDeleteCmd_Key2", "", false) 35 36 }() 37 } 38 // Now add a temporary keybase 39 kbHome, cleanUp := tests.NewTestCaseDir(t) 40 defer cleanUp() 41 viper.Set(flags.FlagHome, kbHome) 42 43 // Now 44 kb, err := keys.NewKeyring(sdk.KeyringServiceName(), viper.GetString(flags.FlagKeyringBackend), kbHome, mockIn) 45 require.NoError(t, err) 46 if runningUnattended { 47 mockIn.Reset("testpass1\ntestpass1\n") 48 } 49 _, err = kb.CreateAccount(fakeKeyName1, tests.TestMnemonic, "", "", sdk.FullFundraiserPath, keys.Secp256k1) 50 require.NoError(t, err) 51 52 if runningUnattended { 53 mockIn.Reset("testpass1\ntestpass1\n") 54 } 55 _, err = kb.CreateAccount(fakeKeyName2, tests.TestMnemonic, "", "", "m/44'/118'/0'/0/1", keys.Secp256k1) 56 require.NoError(t, err) 57 58 if runningUnattended { 59 mockIn.Reset("testpass1\ntestpass1\n") 60 } 61 err = runDeleteCmd(deleteKeyCommand, []string{"blah"}) 62 require.Error(t, err) 63 require.Equal(t, "The specified item could not be found in the keyring", err.Error()) 64 65 // User confirmation missing 66 err = runDeleteCmd(deleteKeyCommand, []string{fakeKeyName1}) 67 require.Error(t, err) 68 if runningUnattended { 69 require.Equal(t, "aborted", err.Error()) 70 } else { 71 require.Equal(t, "EOF", err.Error()) 72 } 73 74 { 75 if runningUnattended { 76 mockIn.Reset("testpass1\n") 77 } 78 _, err = kb.Get(fakeKeyName1) 79 require.NoError(t, err) 80 81 // Now there is a confirmation 82 viper.Set(flagYes, true) 83 if runningUnattended { 84 mockIn.Reset("testpass1\ntestpass1\n") 85 } 86 require.NoError(t, runDeleteCmd(deleteKeyCommand, []string{fakeKeyName1})) 87 88 _, err = kb.Get(fakeKeyName1) 89 require.Error(t, err) // Key1 is gone 90 } 91 92 viper.Set(flagYes, true) 93 if runningUnattended { 94 mockIn.Reset("testpass1\n") 95 } 96 _, err = kb.Get(fakeKeyName2) 97 require.NoError(t, err) 98 if runningUnattended { 99 mockIn.Reset("testpass1\ny\ntestpass1\n") 100 } 101 err = runDeleteCmd(deleteKeyCommand, []string{fakeKeyName2}) 102 require.NoError(t, err) 103 _, err = kb.Get(fakeKeyName2) 104 require.Error(t, err) // Key2 is gone 105 } 106 107 func Test_confirmDeletion(t *testing.T) { 108 type args struct { 109 buf *bufio.Reader 110 } 111 112 answerYes := bufio.NewReader(strings.NewReader("y\n")) 113 answerYes2 := bufio.NewReader(strings.NewReader("Y\n")) 114 answerNo := bufio.NewReader(strings.NewReader("n\n")) 115 answerInvalid := bufio.NewReader(strings.NewReader("245\n")) 116 117 tests := []struct { 118 name string 119 args args 120 wantErr bool 121 }{ 122 {"Y", args{answerYes}, false}, 123 {"y", args{answerYes2}, false}, 124 {"N", args{answerNo}, true}, 125 {"BAD", args{answerInvalid}, true}, 126 } 127 for _, tt := range tests { 128 tt := tt 129 t.Run(tt.name, func(t *testing.T) { 130 if err := confirmDeletion(tt.args.buf); (err != nil) != tt.wantErr { 131 t.Errorf("confirmDeletion() error = %v, wantErr %v", err, tt.wantErr) 132 } 133 }) 134 } 135 }