github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/add_ledger_test.go (about) 1 //go:build ledger_suite 2 // +build ledger_suite 3 4 package client 5 6 import ( 7 "context" 8 "strings" 9 "testing" 10 "time" 11 12 "github.com/gnolang/gno/tm2/pkg/commands" 13 "github.com/gnolang/gno/tm2/pkg/crypto/keys" 14 "github.com/stretchr/testify/assert" 15 "github.com/stretchr/testify/require" 16 ) 17 18 // Make sure to run these tests with the following tag enabled: 19 // -tags='ledger_suite' 20 func TestAdd_Ledger(t *testing.T) { 21 t.Parallel() 22 23 t.Run("valid ledger reference added", func(t *testing.T) { 24 t.Parallel() 25 26 var ( 27 kbHome = t.TempDir() 28 baseOptions = BaseOptions{ 29 InsecurePasswordStdin: true, 30 Home: kbHome, 31 } 32 33 keyName = "key-name" 34 ) 35 36 ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) 37 defer cancelFn() 38 39 io := commands.NewTestIO() 40 io.SetIn(strings.NewReader("test1234\ntest1234\n")) 41 42 // Create the command 43 cmd := NewRootCmdWithBaseConfig(io, baseOptions) 44 45 args := []string{ 46 "add", 47 "ledger", 48 "--insecure-password-stdin", 49 "--home", 50 kbHome, 51 keyName, 52 } 53 54 require.NoError(t, cmd.ParseAndRun(ctx, args)) 55 56 // Check the keybase 57 kb, err := keys.NewKeyBaseFromDir(kbHome) 58 require.NoError(t, err) 59 60 original, err := kb.GetByName(keyName) 61 require.NoError(t, err) 62 require.NotNil(t, original) 63 }) 64 65 t.Run("valid ledger reference added, overwrite", func(t *testing.T) { 66 t.Parallel() 67 68 var ( 69 kbHome = t.TempDir() 70 baseOptions = BaseOptions{ 71 InsecurePasswordStdin: true, 72 Home: kbHome, 73 } 74 75 keyName = "key-name" 76 ) 77 78 ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) 79 defer cancelFn() 80 81 io := commands.NewTestIO() 82 io.SetIn(strings.NewReader("test1234\ntest1234\n")) 83 84 // Create the command 85 cmd := NewRootCmdWithBaseConfig(io, baseOptions) 86 87 args := []string{ 88 "add", 89 "ledger", 90 "--insecure-password-stdin", 91 "--home", 92 kbHome, 93 keyName, 94 } 95 96 require.NoError(t, cmd.ParseAndRun(ctx, args)) 97 98 // Check the keybase 99 kb, err := keys.NewKeyBaseFromDir(kbHome) 100 require.NoError(t, err) 101 102 original, err := kb.GetByName(keyName) 103 require.NoError(t, err) 104 require.NotNil(t, original) 105 106 io.SetIn(strings.NewReader("y\ntest1234\ntest1234\n")) 107 108 cmd = NewRootCmdWithBaseConfig(io, baseOptions) 109 require.NoError(t, cmd.ParseAndRun(ctx, args)) 110 111 newKey, err := kb.GetByName(keyName) 112 require.NoError(t, err) 113 114 // Make sure the different key is generated and overwritten 115 assert.NotEqual(t, original.GetAddress(), newKey.GetAddress()) 116 }) 117 118 t.Run("valid ledger reference added, no overwrite permission", func(t *testing.T) { 119 t.Parallel() 120 121 var ( 122 kbHome = t.TempDir() 123 baseOptions = BaseOptions{ 124 InsecurePasswordStdin: true, 125 Home: kbHome, 126 } 127 128 keyName = "key-name" 129 ) 130 131 ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) 132 defer cancelFn() 133 134 io := commands.NewTestIO() 135 io.SetIn(strings.NewReader("test1234\ntest1234\n")) 136 137 // Create the command 138 cmd := NewRootCmdWithBaseConfig(io, baseOptions) 139 140 args := []string{ 141 "add", 142 "ledger", 143 "--insecure-password-stdin", 144 "--home", 145 kbHome, 146 keyName, 147 } 148 149 require.NoError(t, cmd.ParseAndRun(ctx, args)) 150 151 // Check the keybase 152 kb, err := keys.NewKeyBaseFromDir(kbHome) 153 require.NoError(t, err) 154 155 original, err := kb.GetByName(keyName) 156 require.NoError(t, err) 157 require.NotNil(t, original) 158 159 io.SetIn(strings.NewReader("n\ntest1234\ntest1234\n")) 160 161 cmd = NewRootCmdWithBaseConfig(io, baseOptions) 162 require.ErrorIs(t, cmd.ParseAndRun(ctx, args), errOverwriteAborted) 163 164 newKey, err := kb.GetByName(keyName) 165 require.NoError(t, err) 166 167 // Make sure the key is not overwritten 168 assert.Equal(t, original.GetAddress(), newKey.GetAddress()) 169 }) 170 }