1
1
package keys
2
2
3
3
import (
4
+ "bufio"
4
5
"context"
5
6
"fmt"
6
7
"testing"
@@ -17,55 +18,95 @@ import (
17
18
)
18
19
19
20
func Test_runExportCmd (t * testing.T ) {
20
- cmd := ExportKeyCommand ()
21
- cmd .Flags ().AddFlagSet (Commands ("home" ).PersistentFlags ())
22
- mockIn := testutil .ApplyMockIODiscardOutErr (cmd )
23
-
24
- // Now add a temporary keybase
25
- kbHome := t .TempDir ()
26
-
27
- // create a key
28
- kb , err := keyring .New (sdk .KeyringServiceName (), keyring .BackendTest , kbHome , mockIn )
29
- require .NoError (t , err )
30
- t .Cleanup (func () {
31
- kb .Delete ("keyname1" ) // nolint:errcheck
32
- })
33
-
34
- path := sdk .GetConfig ().GetFullFundraiserPath ()
35
- _ , err = kb .NewAccount ("keyname1" , testutil .TestMnemonic , "" , path , hd .Secp256k1 )
36
- require .NoError (t , err )
37
-
38
- // Now enter password
39
- args := []string {
40
- "keyname1" ,
41
- fmt .Sprintf ("--%s=%s" , flags .FlagHome , kbHome ),
42
- fmt .Sprintf ("--%s=%s" , flags .FlagKeyringBackend , keyring .BackendTest ),
21
+ testCases := []struct {
22
+ name string
23
+ keyringBackend string
24
+ extraArgs []string
25
+ userInput string
26
+ mustFail bool
27
+ expectedOutput string
28
+ }{
29
+ {
30
+ name : "--unsafe only must fail" ,
31
+ keyringBackend : keyring .BackendTest ,
32
+ extraArgs : []string {"--unsafe" },
33
+ mustFail : true ,
34
+ },
35
+ {
36
+ name : "--unarmored-hex must fail" ,
37
+ keyringBackend : keyring .BackendTest ,
38
+ extraArgs : []string {"--unarmored-hex" },
39
+ mustFail : true ,
40
+ },
41
+ {
42
+ name : "--unsafe --unarmored-hex fail with no user confirmation" ,
43
+ keyringBackend : keyring .BackendTest ,
44
+ extraArgs : []string {"--unsafe" , "--unarmored-hex" },
45
+ userInput : "" ,
46
+ mustFail : true ,
47
+ expectedOutput : "" ,
48
+ },
49
+ {
50
+ name : "--unsafe --unarmored-hex succeed" ,
51
+ keyringBackend : keyring .BackendTest ,
52
+ extraArgs : []string {"--unsafe" , "--unarmored-hex" },
53
+ userInput : "y\n " ,
54
+ mustFail : false ,
55
+ expectedOutput : "2485e33678db4175dc0ecef2d6e1fc493d4a0d7f7ce83324b6ed70afe77f3485\n " ,
56
+ },
57
+ {
58
+ name : "file keyring backend properly read password and user confirmation" ,
59
+ keyringBackend : keyring .BackendFile ,
60
+ extraArgs : []string {"--unsafe" , "--unarmored-hex" },
61
+ // first 2 pass for creating the key, then unsafe export confirmation, then unlock keyring pass
62
+ userInput : "12345678\n 12345678\n y\n 12345678\n " ,
63
+ mustFail : false ,
64
+ expectedOutput : "2485e33678db4175dc0ecef2d6e1fc493d4a0d7f7ce83324b6ed70afe77f3485\n " ,
65
+ },
43
66
}
44
67
45
- mockIn .Reset ("123456789\n 123456789\n " )
46
- cmd .SetArgs (args )
47
-
48
- clientCtx := client.Context {}.
49
- WithKeyringDir (kbHome ).
50
- WithKeyring (kb )
51
- ctx := context .WithValue (context .Background (), client .ClientContextKey , & clientCtx )
52
-
53
- require .NoError (t , cmd .ExecuteContext (ctx ))
54
-
55
- argsUnsafeOnly := append (args , "--unsafe" )
56
- cmd .SetArgs (argsUnsafeOnly )
57
- require .Error (t , cmd .ExecuteContext (ctx ))
58
-
59
- argsUnarmoredHexOnly := append (args , "--unarmored-hex" )
60
- cmd .SetArgs (argsUnarmoredHexOnly )
61
- require .Error (t , cmd .ExecuteContext (ctx ))
62
-
63
- argsUnsafeUnarmoredHex := append (args , "--unsafe" , "--unarmored-hex" )
64
- cmd .SetArgs (argsUnsafeUnarmoredHex )
65
- require .Error (t , cmd .ExecuteContext (ctx ))
66
-
67
- mockIn , mockOut := testutil .ApplyMockIO (cmd )
68
- mockIn .Reset ("y\n " )
69
- require .NoError (t , cmd .ExecuteContext (ctx ))
70
- require .Equal (t , "2485e33678db4175dc0ecef2d6e1fc493d4a0d7f7ce83324b6ed70afe77f3485\n " , mockOut .String ())
68
+ for _ , tc := range testCases {
69
+ t .Run (tc .name , func (t * testing.T ) {
70
+ kbHome := t .TempDir ()
71
+ defaultArgs := []string {
72
+ "keyname1" ,
73
+ fmt .Sprintf ("--%s=%s" , flags .FlagHome , kbHome ),
74
+ fmt .Sprintf ("--%s=%s" , flags .FlagKeyringBackend , tc .keyringBackend ),
75
+ }
76
+
77
+ cmd := ExportKeyCommand ()
78
+ cmd .Flags ().AddFlagSet (Commands ("home" ).PersistentFlags ())
79
+
80
+ cmd .SetArgs (append (defaultArgs , tc .extraArgs ... ))
81
+ mockIn , mockOut := testutil .ApplyMockIO (cmd )
82
+
83
+ mockIn .Reset (tc .userInput )
84
+ mockInBuf := bufio .NewReader (mockIn )
85
+
86
+ // create a key
87
+ kb , err := keyring .New (sdk .KeyringServiceName (), tc .keyringBackend , kbHome , bufio .NewReader (mockInBuf ))
88
+ require .NoError (t , err )
89
+ t .Cleanup (func () {
90
+ kb .Delete ("keyname1" ) // nolint:errcheck
91
+ })
92
+
93
+ path := sdk .GetConfig ().GetFullFundraiserPath ()
94
+ _ , err = kb .NewAccount ("keyname1" , testutil .TestMnemonic , "" , path , hd .Secp256k1 )
95
+ require .NoError (t , err )
96
+
97
+ clientCtx := client.Context {}.
98
+ WithKeyringDir (kbHome ).
99
+ WithKeyring (kb ).
100
+ WithInput (mockInBuf )
101
+ ctx := context .WithValue (context .Background (), client .ClientContextKey , & clientCtx )
102
+
103
+ err = cmd .ExecuteContext (ctx )
104
+ if tc .mustFail {
105
+ require .Error (t , err )
106
+ } else {
107
+ require .NoError (t , err )
108
+ require .Equal (t , tc .expectedOutput , mockOut .String ())
109
+ }
110
+ })
111
+ }
71
112
}
0 commit comments