From 244a25cb9ca5c97a70403e78c534336f1bea5aff Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Fri, 5 Aug 2022 04:02:54 +0800 Subject: [PATCH 1/8] build SendAction unittest --- ioctl/newcmd/account/account.go | 1 - ioctl/newcmd/action/action.go | 22 +++-- ioctl/newcmd/action/action_test.go | 146 +++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 11 deletions(-) diff --git a/ioctl/newcmd/account/account.go b/ioctl/newcmd/account/account.go index 2a8716dd40..7b7a9c63e9 100644 --- a/ioctl/newcmd/account/account.go +++ b/ioctl/newcmd/account/account.go @@ -141,7 +141,6 @@ func PrivateKeyFromSigner(client ioctl.Client, cmd *cobra.Command, signer, passw if !IsSignerExist(client, signer) && !util.AliasIsHdwalletKey(signer) { return nil, fmt.Errorf("invalid address #%s", signer) } - if password == "" { cmd.Printf("Enter password for #%s:\n", signer) password, err = client.ReadSecret() diff --git a/ioctl/newcmd/action/action.go b/ioctl/newcmd/action/action.go index eb94bd16cb..5fa0b5ce04 100644 --- a/ioctl/newcmd/action/action.go +++ b/ioctl/newcmd/action/action.go @@ -202,7 +202,7 @@ func selectTranslation(client ioctl.Client, trls map[config.Language]string) str // NewActionCmd represents the action command func NewActionCmd(client ioctl.Client) *cobra.Command { - ac := &cobra.Command{ + cmd := &cobra.Command{ Use: "action", Short: selectTranslation(client, _actionCmdShorts), } @@ -217,10 +217,12 @@ func NewActionCmd(client ioctl.Client) *cobra.Command { // cmd.AddCommand(NewActionDeposit(client)) // cmd.AddCommand(NewActionSendRaw(client)) - client.SetEndpointWithFlag(ac.PersistentFlags().StringVar) - client.SetInsecureWithFlag(ac.PersistentFlags().BoolVar) + RegisterWriteCommand(client, cmd) - return ac + client.SetEndpointWithFlag(cmd.PersistentFlags().StringVar) + client.SetInsecureWithFlag(cmd.PersistentFlags().BoolVar) + + return cmd } // RegisterWriteCommand registers action flags for command @@ -357,7 +359,7 @@ func SendRaw(client ioctl.Client, cmd *cobra.Command, selp *iotextypes.Action) e func SendAction(client ioctl.Client, cmd *cobra.Command, elp action.Envelope, signer string) error { sk, err := account.PrivateKeyFromSigner(client, cmd, signer, getPasswordFlagValue(cmd)) if err != nil { - return err + return errors.Wrap(err, "failed to get privateKey") } chainMeta, err := bc.GetChainMeta(client) @@ -387,11 +389,11 @@ func SendAction(client ioctl.Client, cmd *cobra.Command, elp action.Envelope, si selp := sealed.Proto() sk.Zero() // TODO wait newcmd/action/actionhash impl pr #3425 - // actionInfo, err := printActionProto(selp) - // if err != nil { - // return errors.Wrap(err, "failed to print action proto message") - // } - // cmd.Println(actionInfo) + actionInfo, err := printActionProto(client, selp) + if err != nil { + return errors.Wrap(err, "failed to print action proto message") + } + cmd.Println(actionInfo) if !getAssumeYesFlagValue(cmd) { infoWarn := selectTranslation(client, _infoWarn) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index 8a6bc1eb7c..d16cc48454 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -7,9 +7,12 @@ package action import ( + "os" "testing" + "github.com/ethereum/go-ethereum/accounts/keystore" "github.com/golang/mock/gomock" + "github.com/iotexproject/iotex-address/address" "github.com/iotexproject/iotex-proto/golang/iotexapi" "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" "github.com/iotexproject/iotex-proto/golang/iotextypes" @@ -19,6 +22,7 @@ import ( "github.com/iotexproject/iotex-core/ioctl/config" "github.com/iotexproject/iotex-core/ioctl/util" "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" + "github.com/iotexproject/iotex-core/testutil" ) func TestSigner(t *testing.T) { @@ -125,3 +129,145 @@ func TestSendRaw(t *testing.T) { require.Contains(err.Error(), expectedErr.Error()) }) } + +func TestSendAction(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) + testWallet, err := os.MkdirTemp(os.TempDir(), "testWallet") + require.NoError(err) + defer testutil.CleanupPath(testWallet) + passwd := "123456" + + ks := keystore.NewKeyStore(t.TempDir(), 2, 1) + acc, err := ks.NewAccount(passwd) + require.NoError(err) + accAddr, err := address.FromBytes(acc.Address.Bytes()) + require.NoError(err) + + chainMetaResponse := &iotexapi.GetChainMetaResponse{ChainMeta: &iotextypes.ChainMeta{}} + elp := createEnvelope(0) + cost, err := elp.Cost() + require.NoError(err) + accountResponse := &iotexapi.GetAccountResponse{AccountMeta: &iotextypes.AccountMeta{ + Address: accAddr.String(), + Nonce: 1, + PendingNonce: 1, + Balance: cost.String(), + }} + + client.EXPECT().SelectTranslation(gomock.Any()).Return("action", config.English).AnyTimes() + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}).AnyTimes() + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}).AnyTimes() + client.EXPECT().IsCryptoSm2().Return(false).Times(15) + client.EXPECT().NewKeyStore().Return(ks).Times(15) + + t.Run("failed to get privateKey", func(t *testing.T) { + expectedErr := errors.New("failed to get privateKey") + + client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", "") + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() + client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) + client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) + client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) + client.EXPECT().ReadInput().Return("confirm", nil) + client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotexscan", + Endpoint: "testnet1", + }).Times(11) + + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) + + t.Run("sends signed action to blockchain", func(t *testing.T) { + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("send action with nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.NoError(err) + }) + + t.Run("quit action command", func(t *testing.T) { + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("failed to ask confirm", func(t *testing.T) { + expectedErr := errors.New("failed to ask confirm") + + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to pass balance check", func(t *testing.T) { + expectedErr := errors.New("failed to pass balance check") + + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + expectedErr := errors.New("failed to get nonce") + + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get chain meta", func(t *testing.T) { + expectedErr := errors.New("failed to get chain meta") + + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) +} From 5b34bbbadea2c2b743f1d6bb1969a1a806020b65 Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Fri, 5 Aug 2022 04:31:37 +0800 Subject: [PATCH 2/8] fix ci failed --- ioctl/newcmd/action/action_test.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index d16cc48454..c2be706a64 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -29,7 +29,7 @@ func TestSigner(t *testing.T) { require := require.New(t) ctrl := gomock.NewController(t) client := mock_ioctlclient.NewMockClient(ctrl) - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(3) + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).AnyTimes() client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}) client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}) @@ -37,7 +37,6 @@ func TestSigner(t *testing.T) { client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() cmd := NewActionCmd(client) - registerSignerFlag(client, cmd) _, err := util.ExecuteCmd(cmd, "--signer", "test") require.NoError(err) result, err := Signer(client, cmd) @@ -53,7 +52,7 @@ func TestSendRaw(t *testing.T) { apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) selp := &iotextypes.Action{} - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(12) + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).AnyTimes() client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).Times(7) for _, test := range []struct { From 50203de56f070f9f1b38217a73ce98b457c31dd8 Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Tue, 9 Aug 2022 14:04:53 +0800 Subject: [PATCH 3/8] delete blank line --- ioctl/newcmd/account/account.go | 1 + ioctl/newcmd/action/action.go | 1 - ioctl/newcmd/action/action_test.go | 12 ------------ 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/ioctl/newcmd/account/account.go b/ioctl/newcmd/account/account.go index 7b7a9c63e9..2a8716dd40 100644 --- a/ioctl/newcmd/account/account.go +++ b/ioctl/newcmd/account/account.go @@ -141,6 +141,7 @@ func PrivateKeyFromSigner(client ioctl.Client, cmd *cobra.Command, signer, passw if !IsSignerExist(client, signer) && !util.AliasIsHdwalletKey(signer) { return nil, fmt.Errorf("invalid address #%s", signer) } + if password == "" { cmd.Printf("Enter password for #%s:\n", signer) password, err = client.ReadSecret() diff --git a/ioctl/newcmd/action/action.go b/ioctl/newcmd/action/action.go index 5fa0b5ce04..b4854fdd61 100644 --- a/ioctl/newcmd/action/action.go +++ b/ioctl/newcmd/action/action.go @@ -388,7 +388,6 @@ func SendAction(client ioctl.Client, cmd *cobra.Command, elp action.Envelope, si selp := sealed.Proto() sk.Zero() - // TODO wait newcmd/action/actionhash impl pr #3425 actionInfo, err := printActionProto(client, selp) if err != nil { return errors.Wrap(err, "failed to print action proto message") diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index c2be706a64..7e70675252 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -7,7 +7,6 @@ package action import ( - "os" "testing" "github.com/ethereum/go-ethereum/accounts/keystore" @@ -22,7 +21,6 @@ import ( "github.com/iotexproject/iotex-core/ioctl/config" "github.com/iotexproject/iotex-core/ioctl/util" "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" - "github.com/iotexproject/iotex-core/testutil" ) func TestSigner(t *testing.T) { @@ -134,9 +132,6 @@ func TestSendAction(t *testing.T) { ctrl := gomock.NewController(t) client := mock_ioctlclient.NewMockClient(ctrl) apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) - testWallet, err := os.MkdirTemp(os.TempDir(), "testWallet") - require.NoError(err) - defer testutil.CleanupPath(testWallet) passwd := "123456" ks := keystore.NewKeyStore(t.TempDir(), 2, 1) @@ -164,7 +159,6 @@ func TestSendAction(t *testing.T) { t.Run("failed to get privateKey", func(t *testing.T) { expectedErr := errors.New("failed to get privateKey") - client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) cmd := NewActionCmd(client) @@ -199,7 +193,6 @@ func TestSendAction(t *testing.T) { t.Run("send action with nonce", func(t *testing.T) { mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) cmd := NewActionCmd(client) @@ -221,7 +214,6 @@ func TestSendAction(t *testing.T) { t.Run("failed to ask confirm", func(t *testing.T) { expectedErr := errors.New("failed to ask confirm") - client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) cmd := NewActionCmd(client) @@ -233,7 +225,6 @@ func TestSendAction(t *testing.T) { t.Run("failed to pass balance check", func(t *testing.T) { expectedErr := errors.New("failed to pass balance check") - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) @@ -246,9 +237,7 @@ func TestSendAction(t *testing.T) { t.Run("failed to get nonce", func(t *testing.T) { mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" expectedErr := errors.New("failed to get nonce") - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) @@ -260,7 +249,6 @@ func TestSendAction(t *testing.T) { t.Run("failed to get chain meta", func(t *testing.T) { expectedErr := errors.New("failed to get chain meta") - apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) From e4d3735e65054153a39f37451a98cbd602c17ca8 Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Wed, 10 Aug 2022 13:38:09 +0800 Subject: [PATCH 4/8] move RegisterWriteCommand into subtest --- ioctl/newcmd/action/action.go | 2 -- ioctl/newcmd/action/action_test.go | 9 +++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ioctl/newcmd/action/action.go b/ioctl/newcmd/action/action.go index b4854fdd61..b561d69aa3 100644 --- a/ioctl/newcmd/action/action.go +++ b/ioctl/newcmd/action/action.go @@ -217,8 +217,6 @@ func NewActionCmd(client ioctl.Client) *cobra.Command { // cmd.AddCommand(NewActionDeposit(client)) // cmd.AddCommand(NewActionSendRaw(client)) - RegisterWriteCommand(client, cmd) - client.SetEndpointWithFlag(cmd.PersistentFlags().StringVar) client.SetInsecureWithFlag(cmd.PersistentFlags().BoolVar) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index 7e70675252..2d667b8765 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -35,6 +35,7 @@ func TestSigner(t *testing.T) { client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--signer", "test") require.NoError(err) result, err := Signer(client, cmd) @@ -162,6 +163,7 @@ func TestSendAction(t *testing.T) { client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", "") require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) @@ -185,6 +187,7 @@ func TestSendAction(t *testing.T) { t.Run("sends signed action to blockchain", func(t *testing.T) { cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) @@ -196,6 +199,7 @@ func TestSendAction(t *testing.T) { client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, "hdw::1/2") @@ -206,6 +210,7 @@ func TestSendAction(t *testing.T) { client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) @@ -217,6 +222,7 @@ func TestSendAction(t *testing.T) { client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) @@ -228,6 +234,7 @@ func TestSendAction(t *testing.T) { apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) @@ -241,6 +248,7 @@ func TestSendAction(t *testing.T) { apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, "hdw::1/2") @@ -252,6 +260,7 @@ func TestSendAction(t *testing.T) { apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) err = SendAction(client, cmd, elp, accAddr.String()) From 388b9b521300a1f3cbedfbbe7e86ff9f5ff0b382 Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Sat, 20 Aug 2022 04:52:35 +0800 Subject: [PATCH 5/8] add registerSignerFlag back --- ioctl/newcmd/action/action_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index 2d667b8765..d5eb7760f6 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -35,7 +35,7 @@ func TestSigner(t *testing.T) { client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) + registerSignerFlag(client, cmd) _, err := util.ExecuteCmd(cmd, "--signer", "test") require.NoError(err) result, err := Signer(client, cmd) From d3e0b2f8fe21577f21f94067d20ca10ac1eb5730 Mon Sep 17 00:00:00 2001 From: LuckyPigeon Date: Thu, 25 Aug 2022 06:40:57 +0800 Subject: [PATCH 6/8] replace SelectTranslation with exact times --- ioctl/newcmd/action/action_test.go | 538 ++++++++++++++--------------- 1 file changed, 269 insertions(+), 269 deletions(-) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index d5eb7760f6..ed82eda5d3 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -1,269 +1,269 @@ -// Copyright (c) 2022 IoTeX Foundation -// This is an alpha (internal) release and is not suitable for production. This source code is provided 'as is' and no -// warranties are given as to title or non-infringement, merchantability or fitness for purpose and, to the extent -// permitted by law, all liability for your use of the code is disclaimed. This source code is governed by Apache -// License 2.0 that can be found in the LICENSE file. - -package action - -import ( - "testing" - - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/golang/mock/gomock" - "github.com/iotexproject/iotex-address/address" - "github.com/iotexproject/iotex-proto/golang/iotexapi" - "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" - "github.com/iotexproject/iotex-proto/golang/iotextypes" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" - - "github.com/iotexproject/iotex-core/ioctl/config" - "github.com/iotexproject/iotex-core/ioctl/util" - "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" -) - -func TestSigner(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).AnyTimes() - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}) - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}) - - t.Run("returns signer's address", func(t *testing.T) { - client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() - - cmd := NewActionCmd(client) - registerSignerFlag(client, cmd) - _, err := util.ExecuteCmd(cmd, "--signer", "test") - require.NoError(err) - result, err := Signer(client, cmd) - require.NoError(err) - require.Equal(result, "test") - }) -} - -func TestSendRaw(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) - selp := &iotextypes.Action{} - - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).AnyTimes() - client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).Times(7) - - for _, test := range []struct { - endpoint string - insecure bool - }{ - { - endpoint: "111:222:333:444:5678", - insecure: false, - }, - { - endpoint: "", - insecure: true, - }, - } { - callbackEndpoint := func(cb func(*string, string, string, string)) { - cb(&test.endpoint, "endpoint", test.endpoint, "endpoint usage") - } - callbackInsecure := func(cb func(*bool, string, bool, string)) { - cb(&test.insecure, "insecure", !test.insecure, "insecure usage") - } - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(callbackEndpoint).Times(3) - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(callbackInsecure).Times(3) - - t.Run("sends raw action to blockchain", func(t *testing.T) { - response := &iotexapi.SendActionResponse{} - - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(response, nil).Times(3) - - cmd := NewActionCmd(client) - _, err := util.ExecuteCmd(cmd) - require.NoError(err) - - t.Run("endpoint iotexscan", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotexscan", - Endpoint: "testnet1", - }).Times(2) - - err = SendRaw(client, cmd, selp) - require.NoError(err) - }) - - t.Run("endpoint iotxplorer", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotxplorer", - }).Times(2) - - err := SendRaw(client, cmd, selp) - require.NoError(err) - }) - - t.Run("endpoint default", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "test", - }).Times(2) - - err := SendRaw(client, cmd, selp) - require.NoError(err) - }) - }) - } - - t.Run("failed to invoke SendAction api", func(t *testing.T) { - expectedErr := errors.New("failed to invoke SendAction api") - - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - _, err := util.ExecuteCmd(cmd) - require.NoError(err) - err = SendRaw(client, cmd, selp) - require.Contains(err.Error(), expectedErr.Error()) - }) -} - -func TestSendAction(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) - passwd := "123456" - - ks := keystore.NewKeyStore(t.TempDir(), 2, 1) - acc, err := ks.NewAccount(passwd) - require.NoError(err) - accAddr, err := address.FromBytes(acc.Address.Bytes()) - require.NoError(err) - - chainMetaResponse := &iotexapi.GetChainMetaResponse{ChainMeta: &iotextypes.ChainMeta{}} - elp := createEnvelope(0) - cost, err := elp.Cost() - require.NoError(err) - accountResponse := &iotexapi.GetAccountResponse{AccountMeta: &iotextypes.AccountMeta{ - Address: accAddr.String(), - Nonce: 1, - PendingNonce: 1, - Balance: cost.String(), - }} - - client.EXPECT().SelectTranslation(gomock.Any()).Return("action", config.English).AnyTimes() - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}).AnyTimes() - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}).AnyTimes() - client.EXPECT().IsCryptoSm2().Return(false).Times(15) - client.EXPECT().NewKeyStore().Return(ks).Times(15) - - t.Run("failed to get privateKey", func(t *testing.T) { - expectedErr := errors.New("failed to get privateKey") - client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", "") - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() - client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) - client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) - client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) - client.EXPECT().ReadInput().Return("confirm", nil) - client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotexscan", - Endpoint: "testnet1", - }).Times(11) - - apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) - - t.Run("sends signed action to blockchain", func(t *testing.T) { - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.NoError(err) - }) - - t.Run("send action with nonce", func(t *testing.T) { - mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") - require.NoError(err) - }) - - t.Run("quit action command", func(t *testing.T) { - client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.NoError(err) - }) - - t.Run("failed to ask confirm", func(t *testing.T) { - expectedErr := errors.New("failed to ask confirm") - client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to pass balance check", func(t *testing.T) { - expectedErr := errors.New("failed to pass balance check") - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to get nonce", func(t *testing.T) { - mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" - expectedErr := errors.New("failed to get nonce") - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to get chain meta", func(t *testing.T) { - expectedErr := errors.New("failed to get chain meta") - apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) -} +// Copyright (c) 2022 IoTeX Foundation +// This is an alpha (internal) release and is not suitable for production. This source code is provided 'as is' and no +// warranties are given as to title or non-infringement, merchantability or fitness for purpose and, to the extent +// permitted by law, all liability for your use of the code is disclaimed. This source code is governed by Apache +// License 2.0 that can be found in the LICENSE file. + +package action + +import ( + "testing" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/golang/mock/gomock" + "github.com/iotexproject/iotex-address/address" + "github.com/iotexproject/iotex-proto/golang/iotexapi" + "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" + "github.com/iotexproject/iotex-proto/golang/iotextypes" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" + + "github.com/iotexproject/iotex-core/ioctl/config" + "github.com/iotexproject/iotex-core/ioctl/util" + "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" +) + +func TestSigner(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(2) + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}) + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}) + + t.Run("returns signer's address", func(t *testing.T) { + client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() + + cmd := NewActionCmd(client) + registerSignerFlag(client, cmd) + _, err := util.ExecuteCmd(cmd, "--signer", "test") + require.NoError(err) + result, err := Signer(client, cmd) + require.NoError(err) + require.Equal(result, "test") + }) +} + +func TestSendRaw(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) + selp := &iotextypes.Action{} + + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(3) + client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).Times(7) + + for _, test := range []struct { + endpoint string + insecure bool + }{ + { + endpoint: "111:222:333:444:5678", + insecure: false, + }, + { + endpoint: "", + insecure: true, + }, + } { + callbackEndpoint := func(cb func(*string, string, string, string)) { + cb(&test.endpoint, "endpoint", test.endpoint, "endpoint usage") + } + callbackInsecure := func(cb func(*bool, string, bool, string)) { + cb(&test.insecure, "insecure", !test.insecure, "insecure usage") + } + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(callbackEndpoint).Times(3) + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(callbackInsecure).Times(3) + + t.Run("sends raw action to blockchain", func(t *testing.T) { + response := &iotexapi.SendActionResponse{} + + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(response, nil).Times(3) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd) + require.NoError(err) + + t.Run("endpoint iotexscan", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotexscan", + Endpoint: "testnet1", + }).Times(2) + + err = SendRaw(client, cmd, selp) + require.NoError(err) + }) + + t.Run("endpoint iotxplorer", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotxplorer", + }).Times(2) + + err := SendRaw(client, cmd, selp) + require.NoError(err) + }) + + t.Run("endpoint default", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "test", + }).Times(2) + + err := SendRaw(client, cmd, selp) + require.NoError(err) + }) + }) + } + + t.Run("failed to invoke SendAction api", func(t *testing.T) { + expectedErr := errors.New("failed to invoke SendAction api") + + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd) + require.NoError(err) + err = SendRaw(client, cmd, selp) + require.Contains(err.Error(), expectedErr.Error()) + }) +} + +func TestSendAction(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) + passwd := "123456" + + ks := keystore.NewKeyStore(t.TempDir(), 2, 1) + acc, err := ks.NewAccount(passwd) + require.NoError(err) + accAddr, err := address.FromBytes(acc.Address.Bytes()) + require.NoError(err) + + chainMetaResponse := &iotexapi.GetChainMetaResponse{ChainMeta: &iotextypes.ChainMeta{}} + elp := createEnvelope(0) + cost, err := elp.Cost() + require.NoError(err) + accountResponse := &iotexapi.GetAccountResponse{AccountMeta: &iotextypes.AccountMeta{ + Address: accAddr.String(), + Nonce: 1, + PendingNonce: 1, + Balance: cost.String(), + }} + + client.EXPECT().SelectTranslation(gomock.Any()).Return("action", config.English).Times(64) + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}).AnyTimes() + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}).AnyTimes() + client.EXPECT().IsCryptoSm2().Return(false).Times(15) + client.EXPECT().NewKeyStore().Return(ks).Times(15) + + t.Run("failed to get privateKey", func(t *testing.T) { + expectedErr := errors.New("failed to get privateKey") + client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", "") + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() + client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) + client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) + client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) + client.EXPECT().ReadInput().Return("confirm", nil) + client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotexscan", + Endpoint: "testnet1", + }).Times(11) + + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) + + t.Run("sends signed action to blockchain", func(t *testing.T) { + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("send action with nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.NoError(err) + }) + + t.Run("quit action command", func(t *testing.T) { + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("failed to ask confirm", func(t *testing.T) { + expectedErr := errors.New("failed to ask confirm") + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to pass balance check", func(t *testing.T) { + expectedErr := errors.New("failed to pass balance check") + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + expectedErr := errors.New("failed to get nonce") + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get chain meta", func(t *testing.T) { + expectedErr := errors.New("failed to get chain meta") + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) +} From d9edca3c1d99201cbc5e850f3957ee78f8f169ac Mon Sep 17 00:00:00 2001 From: huof6890 <68298506@qq.com> Date: Thu, 25 Aug 2022 18:54:35 +0800 Subject: [PATCH 7/8] go fmt --- ioctl/newcmd/action/action_test.go | 538 ++++++++++++++--------------- 1 file changed, 269 insertions(+), 269 deletions(-) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index ed82eda5d3..a14c3ea424 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -1,269 +1,269 @@ -// Copyright (c) 2022 IoTeX Foundation -// This is an alpha (internal) release and is not suitable for production. This source code is provided 'as is' and no -// warranties are given as to title or non-infringement, merchantability or fitness for purpose and, to the extent -// permitted by law, all liability for your use of the code is disclaimed. This source code is governed by Apache -// License 2.0 that can be found in the LICENSE file. - -package action - -import ( - "testing" - - "github.com/ethereum/go-ethereum/accounts/keystore" - "github.com/golang/mock/gomock" - "github.com/iotexproject/iotex-address/address" - "github.com/iotexproject/iotex-proto/golang/iotexapi" - "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" - "github.com/iotexproject/iotex-proto/golang/iotextypes" - "github.com/pkg/errors" - "github.com/stretchr/testify/require" - - "github.com/iotexproject/iotex-core/ioctl/config" - "github.com/iotexproject/iotex-core/ioctl/util" - "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" -) - -func TestSigner(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(2) - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}) - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}) - - t.Run("returns signer's address", func(t *testing.T) { - client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() - - cmd := NewActionCmd(client) - registerSignerFlag(client, cmd) - _, err := util.ExecuteCmd(cmd, "--signer", "test") - require.NoError(err) - result, err := Signer(client, cmd) - require.NoError(err) - require.Equal(result, "test") - }) -} - -func TestSendRaw(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) - selp := &iotextypes.Action{} - - client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(3) - client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).Times(7) - - for _, test := range []struct { - endpoint string - insecure bool - }{ - { - endpoint: "111:222:333:444:5678", - insecure: false, - }, - { - endpoint: "", - insecure: true, - }, - } { - callbackEndpoint := func(cb func(*string, string, string, string)) { - cb(&test.endpoint, "endpoint", test.endpoint, "endpoint usage") - } - callbackInsecure := func(cb func(*bool, string, bool, string)) { - cb(&test.insecure, "insecure", !test.insecure, "insecure usage") - } - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(callbackEndpoint).Times(3) - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(callbackInsecure).Times(3) - - t.Run("sends raw action to blockchain", func(t *testing.T) { - response := &iotexapi.SendActionResponse{} - - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(response, nil).Times(3) - - cmd := NewActionCmd(client) - _, err := util.ExecuteCmd(cmd) - require.NoError(err) - - t.Run("endpoint iotexscan", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotexscan", - Endpoint: "testnet1", - }).Times(2) - - err = SendRaw(client, cmd, selp) - require.NoError(err) - }) - - t.Run("endpoint iotxplorer", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotxplorer", - }).Times(2) - - err := SendRaw(client, cmd, selp) - require.NoError(err) - }) - - t.Run("endpoint default", func(t *testing.T) { - client.EXPECT().Config().Return(config.Config{ - Explorer: "test", - }).Times(2) - - err := SendRaw(client, cmd, selp) - require.NoError(err) - }) - }) - } - - t.Run("failed to invoke SendAction api", func(t *testing.T) { - expectedErr := errors.New("failed to invoke SendAction api") - - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - _, err := util.ExecuteCmd(cmd) - require.NoError(err) - err = SendRaw(client, cmd, selp) - require.Contains(err.Error(), expectedErr.Error()) - }) -} - -func TestSendAction(t *testing.T) { - require := require.New(t) - ctrl := gomock.NewController(t) - client := mock_ioctlclient.NewMockClient(ctrl) - apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) - passwd := "123456" - - ks := keystore.NewKeyStore(t.TempDir(), 2, 1) - acc, err := ks.NewAccount(passwd) - require.NoError(err) - accAddr, err := address.FromBytes(acc.Address.Bytes()) - require.NoError(err) - - chainMetaResponse := &iotexapi.GetChainMetaResponse{ChainMeta: &iotextypes.ChainMeta{}} - elp := createEnvelope(0) - cost, err := elp.Cost() - require.NoError(err) - accountResponse := &iotexapi.GetAccountResponse{AccountMeta: &iotextypes.AccountMeta{ - Address: accAddr.String(), - Nonce: 1, - PendingNonce: 1, - Balance: cost.String(), - }} - - client.EXPECT().SelectTranslation(gomock.Any()).Return("action", config.English).Times(64) - client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}).AnyTimes() - client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}).AnyTimes() - client.EXPECT().IsCryptoSm2().Return(false).Times(15) - client.EXPECT().NewKeyStore().Return(ks).Times(15) - - t.Run("failed to get privateKey", func(t *testing.T) { - expectedErr := errors.New("failed to get privateKey") - client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", "") - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() - client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) - client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) - client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) - client.EXPECT().ReadInput().Return("confirm", nil) - client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) - client.EXPECT().Config().Return(config.Config{ - Explorer: "iotexscan", - Endpoint: "testnet1", - }).Times(11) - - apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) - - t.Run("sends signed action to blockchain", func(t *testing.T) { - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.NoError(err) - }) - - t.Run("send action with nonce", func(t *testing.T) { - mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") - require.NoError(err) - }) - - t.Run("quit action command", func(t *testing.T) { - client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.NoError(err) - }) - - t.Run("failed to ask confirm", func(t *testing.T) { - expectedErr := errors.New("failed to ask confirm") - client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to pass balance check", func(t *testing.T) { - expectedErr := errors.New("failed to pass balance check") - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to get nonce", func(t *testing.T) { - mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" - expectedErr := errors.New("failed to get nonce") - client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") - require.Contains(err.Error(), expectedErr.Error()) - }) - - t.Run("failed to get chain meta", func(t *testing.T) { - expectedErr := errors.New("failed to get chain meta") - apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) - - cmd := NewActionCmd(client) - RegisterWriteCommand(client, cmd) - _, err := util.ExecuteCmd(cmd, "--password", passwd) - require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) - require.Contains(err.Error(), expectedErr.Error()) - }) -} +// Copyright (c) 2022 IoTeX Foundation +// This is an alpha (internal) release and is not suitable for production. This source code is provided 'as is' and no +// warranties are given as to title or non-infringement, merchantability or fitness for purpose and, to the extent +// permitted by law, all liability for your use of the code is disclaimed. This source code is governed by Apache +// License 2.0 that can be found in the LICENSE file. + +package action + +import ( + "testing" + + "github.com/ethereum/go-ethereum/accounts/keystore" + "github.com/golang/mock/gomock" + "github.com/iotexproject/iotex-address/address" + "github.com/iotexproject/iotex-proto/golang/iotexapi" + "github.com/iotexproject/iotex-proto/golang/iotexapi/mock_iotexapi" + "github.com/iotexproject/iotex-proto/golang/iotextypes" + "github.com/pkg/errors" + "github.com/stretchr/testify/require" + + "github.com/iotexproject/iotex-core/ioctl/config" + "github.com/iotexproject/iotex-core/ioctl/util" + "github.com/iotexproject/iotex-core/test/mock/mock_ioctlclient" +) + +func TestSigner(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(2) + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}) + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}) + + t.Run("returns signer's address", func(t *testing.T) { + client.EXPECT().AddressWithDefaultIfNotExist(gomock.Any()).Return("test", nil).AnyTimes() + + cmd := NewActionCmd(client) + registerSignerFlag(client, cmd) + _, err := util.ExecuteCmd(cmd, "--signer", "test") + require.NoError(err) + result, err := Signer(client, cmd) + require.NoError(err) + require.Equal(result, "test") + }) +} + +func TestSendRaw(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) + selp := &iotextypes.Action{} + + client.EXPECT().SelectTranslation(gomock.Any()).Return("mockTranslationString", config.English).Times(3) + client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).Times(7) + + for _, test := range []struct { + endpoint string + insecure bool + }{ + { + endpoint: "111:222:333:444:5678", + insecure: false, + }, + { + endpoint: "", + insecure: true, + }, + } { + callbackEndpoint := func(cb func(*string, string, string, string)) { + cb(&test.endpoint, "endpoint", test.endpoint, "endpoint usage") + } + callbackInsecure := func(cb func(*bool, string, bool, string)) { + cb(&test.insecure, "insecure", !test.insecure, "insecure usage") + } + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(callbackEndpoint).Times(3) + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(callbackInsecure).Times(3) + + t.Run("sends raw action to blockchain", func(t *testing.T) { + response := &iotexapi.SendActionResponse{} + + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(response, nil).Times(3) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd) + require.NoError(err) + + t.Run("endpoint iotexscan", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotexscan", + Endpoint: "testnet1", + }).Times(2) + + err = SendRaw(client, cmd, selp) + require.NoError(err) + }) + + t.Run("endpoint iotxplorer", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotxplorer", + }).Times(2) + + err := SendRaw(client, cmd, selp) + require.NoError(err) + }) + + t.Run("endpoint default", func(t *testing.T) { + client.EXPECT().Config().Return(config.Config{ + Explorer: "test", + }).Times(2) + + err := SendRaw(client, cmd, selp) + require.NoError(err) + }) + }) + } + + t.Run("failed to invoke SendAction api", func(t *testing.T) { + expectedErr := errors.New("failed to invoke SendAction api") + + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + _, err := util.ExecuteCmd(cmd) + require.NoError(err) + err = SendRaw(client, cmd, selp) + require.Contains(err.Error(), expectedErr.Error()) + }) +} + +func TestSendAction(t *testing.T) { + require := require.New(t) + ctrl := gomock.NewController(t) + client := mock_ioctlclient.NewMockClient(ctrl) + apiServiceClient := mock_iotexapi.NewMockAPIServiceClient(ctrl) + passwd := "123456" + + ks := keystore.NewKeyStore(t.TempDir(), 2, 1) + acc, err := ks.NewAccount(passwd) + require.NoError(err) + accAddr, err := address.FromBytes(acc.Address.Bytes()) + require.NoError(err) + + chainMetaResponse := &iotexapi.GetChainMetaResponse{ChainMeta: &iotextypes.ChainMeta{}} + elp := createEnvelope(0) + cost, err := elp.Cost() + require.NoError(err) + accountResponse := &iotexapi.GetAccountResponse{AccountMeta: &iotextypes.AccountMeta{ + Address: accAddr.String(), + Nonce: 1, + PendingNonce: 1, + Balance: cost.String(), + }} + + client.EXPECT().SelectTranslation(gomock.Any()).Return("action", config.English).Times(64) + client.EXPECT().SetEndpointWithFlag(gomock.Any()).Do(func(_ func(*string, string, string, string)) {}).AnyTimes() + client.EXPECT().SetInsecureWithFlag(gomock.Any()).Do(func(_ func(*bool, string, bool, string)) {}).AnyTimes() + client.EXPECT().IsCryptoSm2().Return(false).Times(15) + client.EXPECT().NewKeyStore().Return(ks).Times(15) + + t.Run("failed to get privateKey", func(t *testing.T) { + expectedErr := errors.New("failed to get privateKey") + client.EXPECT().ReadSecret().Return("", expectedErr).Times(1) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", "") + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() + client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) + client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) + client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) + client.EXPECT().ReadInput().Return("confirm", nil) + client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) + client.EXPECT().Config().Return(config.Config{ + Explorer: "iotexscan", + Endpoint: "testnet1", + }).Times(11) + + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) + + t.Run("sends signed action to blockchain", func(t *testing.T) { + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("send action with nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.NoError(err) + }) + + t.Run("quit action command", func(t *testing.T) { + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, nil) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.NoError(err) + }) + + t.Run("failed to ask confirm", func(t *testing.T) { + expectedErr := errors.New("failed to ask confirm") + client.EXPECT().AskToConfirm(gomock.Any()).Return(false, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to pass balance check", func(t *testing.T) { + expectedErr := errors.New("failed to pass balance check") + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get nonce", func(t *testing.T) { + mnemonic := "lake stove quarter shove dry matrix hire split wide attract argue core" + expectedErr := errors.New("failed to get nonce") + client.EXPECT().HdwalletMnemonic(gomock.Any()).Return(mnemonic, nil) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, "hdw::1/2") + require.Contains(err.Error(), expectedErr.Error()) + }) + + t.Run("failed to get chain meta", func(t *testing.T) { + expectedErr := errors.New("failed to get chain meta") + apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + + cmd := NewActionCmd(client) + RegisterWriteCommand(client, cmd) + _, err := util.ExecuteCmd(cmd, "--password", passwd) + require.NoError(err) + err = SendAction(client, cmd, elp, accAddr.String()) + require.Contains(err.Error(), expectedErr.Error()) + }) +} From 3f7549f07abf934d360196cdad054441c2037b9f Mon Sep 17 00:00:00 2001 From: huof6890 <68298506@qq.com> Date: Tue, 6 Sep 2022 23:03:50 +0800 Subject: [PATCH 8/8] add cmd flag in test --- ioctl/newcmd/action/action_test.go | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/ioctl/newcmd/action/action_test.go b/ioctl/newcmd/action/action_test.go index b0ab1130bc..9e561337bf 100644 --- a/ioctl/newcmd/action/action_test.go +++ b/ioctl/newcmd/action/action_test.go @@ -168,14 +168,14 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", "") require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), "", 0, false) require.Contains(err.Error(), expectedErr.Error()) }) client.EXPECT().APIServiceClient().Return(apiServiceClient, nil).AnyTimes() client.EXPECT().ReadSecret().Return(passwd, nil).Times(1) client.EXPECT().Address(gomock.Any()).Return(accAddr.String(), nil).Times(7) - client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(8) + client.EXPECT().Alias(gomock.Any()).Return("producer", nil).Times(10) client.EXPECT().ReadInput().Return("confirm", nil) client.EXPECT().AskToConfirm(gomock.Any()).Return(true, nil).Times(2) client.EXPECT().Config().Return(config.Config{ @@ -184,15 +184,15 @@ func TestSendAction(t *testing.T) { }).Times(11) apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(chainMetaResponse, nil).Times(6) - apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(5) - apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(3) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil).Times(4) + apiServiceClient.EXPECT().SendAction(gomock.Any(), gomock.Any()).Return(&iotexapi.SendActionResponse{}, nil).Times(4) t.Run("sends signed action to blockchain", func(t *testing.T) { cmd := NewActionCmd(client) RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), passwd, 1, false) require.NoError(err) }) @@ -204,7 +204,7 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") + err = SendAction(client, cmd, elp, "hdw::1/2", passwd, 1, false) require.NoError(err) }) @@ -215,7 +215,7 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), passwd, 1, false) require.NoError(err) }) @@ -227,7 +227,7 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), passwd, 1, false) require.Contains(err.Error(), expectedErr.Error()) }) @@ -239,7 +239,7 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), passwd, 1, false) require.Contains(err.Error(), expectedErr.Error()) }) @@ -253,19 +253,20 @@ func TestSendAction(t *testing.T) { RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, "hdw::1/2") + err = SendAction(client, cmd, elp, "hdw::1/2", passwd, 1, false) require.Contains(err.Error(), expectedErr.Error()) }) t.Run("failed to get chain meta", func(t *testing.T) { expectedErr := errors.New("failed to get chain meta") apiServiceClient.EXPECT().GetChainMeta(gomock.Any(), gomock.Any()).Return(nil, expectedErr) + apiServiceClient.EXPECT().GetAccount(gomock.Any(), gomock.Any()).Return(accountResponse, nil) cmd := NewActionCmd(client) RegisterWriteCommand(client, cmd) _, err := util.ExecuteCmd(cmd, "--password", passwd) require.NoError(err) - err = SendAction(client, cmd, elp, accAddr.String()) + err = SendAction(client, cmd, elp, accAddr.String(), passwd, 1, false) require.Contains(err.Error(), expectedErr.Error()) }) }