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  }