github.com/gnolang/gno@v0.0.0-20240520182011-228e9d0192ce/tm2/pkg/crypto/keys/client/add_multisig_test.go (about) 1 package client 2 3 import ( 4 "context" 5 "strings" 6 "testing" 7 "time" 8 9 "github.com/gnolang/gno/tm2/pkg/commands" 10 "github.com/gnolang/gno/tm2/pkg/crypto/keys" 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 func TestAdd_Multisig(t *testing.T) { 16 t.Parallel() 17 18 t.Run("invalid multisig threshold", func(t *testing.T) { 19 t.Parallel() 20 21 var ( 22 kbHome = t.TempDir() 23 baseOptions = BaseOptions{ 24 InsecurePasswordStdin: true, 25 Home: kbHome, 26 } 27 28 keyName = "key-name" 29 ) 30 31 ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) 32 defer cancelFn() 33 34 io := commands.NewTestIO() 35 io.SetIn(strings.NewReader("test1234\ntest1234\n")) 36 37 // Create the command 38 cmd := NewRootCmdWithBaseConfig(io, baseOptions) 39 40 args := []string{ 41 "add", 42 "multisig", 43 "--insecure-password-stdin", 44 "--home", 45 kbHome, 46 "--multisig", 47 "example", 48 "--threshold", 49 "2", 50 keyName, 51 } 52 53 require.ErrorIs(t, cmd.ParseAndRun(ctx, args), errUnableToVerifyMultisig) 54 }) 55 56 t.Run("valid multisig reference added", func(t *testing.T) { 57 t.Parallel() 58 59 var ( 60 kbHome = t.TempDir() 61 baseOptions = BaseOptions{ 62 InsecurePasswordStdin: true, 63 Home: kbHome, 64 } 65 mnemonic = generateTestMnemonic(t) 66 67 keyNames = []string{ 68 "key-1", 69 "key-2", 70 } 71 ) 72 73 ctx, cancelFn := context.WithTimeout(context.Background(), 5*time.Second) 74 defer cancelFn() 75 76 io := commands.NewTestIO() 77 io.SetIn(strings.NewReader("y\ntest1234\ntest1234\n")) 78 79 // Create the command 80 cmd := NewRootCmdWithBaseConfig(io, baseOptions) 81 82 args := []string{ 83 "add", 84 "multisig", 85 "--insecure-password-stdin", 86 "--home", 87 kbHome, 88 "--multisig", 89 keyNames[0], 90 "--multisig", 91 keyNames[1], 92 keyNames[0], 93 } 94 95 // Prepare the multisig keys 96 kb, err := keys.NewKeyBaseFromDir(kbHome) 97 require.NoError(t, err) 98 99 for index, keyName := range keyNames { 100 _, err = kb.CreateAccount( 101 keyName, 102 mnemonic, 103 "", 104 "123", 105 0, 106 uint32(index), 107 ) 108 109 require.NoError(t, err) 110 } 111 112 require.NoError(t, cmd.ParseAndRun(ctx, args)) 113 114 // Verify the key is multisig 115 original, err := kb.GetByName(keyNames[0]) 116 require.NoError(t, err) 117 require.NotNil(t, original) 118 119 assert.Equal(t, original.GetType(), keys.TypeMulti) 120 }) 121 }