From 93ab31d9c464a3090bf04cfb81be03cc10b76a9d Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Mon, 4 Apr 2022 12:11:02 +0200 Subject: [PATCH] fix(cli): Group SubmitProposal CLI not working properly (#11521) ## Description Closes: #11510 Add json struct tags in order to parse correctly the json. --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [x] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [x] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [x] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [x] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable) --- crypto/keyring/keyring.go | 4 ++-- x/group/client/cli/tx.go | 2 +- x/group/client/cli/util.go | 20 +++++++++++--------- x/group/client/cli/util_test.go | 30 ++++++++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 x/group/client/cli/util_test.go diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index ef1cec74fd..7cd3bd3107 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -482,11 +482,11 @@ func (ks keystore) Delete(uid string) error { func (ks keystore) KeyByAddress(address sdk.Address) (*Record, error) { ik, err := ks.db.Get(addrHexKeyAsString(address)) if err != nil { - return nil, wrapKeyNotFound(err, fmt.Sprint("key with address ", address.String(), "not found")) + return nil, wrapKeyNotFound(err, fmt.Sprintf("key with address %s not found", address.String())) } if len(ik.Data) == 0 { - return nil, wrapKeyNotFound(err, fmt.Sprint("key with address ", address.String(), "not found")) + return nil, wrapKeyNotFound(err, fmt.Sprintf("key with address %s not found", address.String())) } return ks.Key(string(ik.Data)) diff --git a/x/group/client/cli/tx.go b/x/group/client/cli/tx.go index 3f01be2f73..3a3602f874 100644 --- a/x/group/client/cli/tx.go +++ b/x/group/client/cli/tx.go @@ -580,7 +580,7 @@ Example: }`, version.AppName), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - prop, err := parseCLIProposal(args[0]) + prop, err := getCLIProposal(args[0]) if err != nil { return err } diff --git a/x/group/client/cli/util.go b/x/group/client/cli/util.go index 2c187bdd70..e7ac279985 100644 --- a/x/group/client/cli/util.go +++ b/x/group/client/cli/util.go @@ -42,23 +42,25 @@ func execFromString(execStr string) group.Exec { // CLIProposal defines a Msg-based group proposal for CLI purposes. type CLIProposal struct { - GroupPolicyAddress string + GroupPolicyAddress string `json:"group_policy_address"` // Messages defines an array of sdk.Msgs proto-JSON-encoded as Anys. - Messages []json.RawMessage - Metadata string - Proposers []string + Messages []json.RawMessage `json:"messages"` + Metadata string `json:"metadata"` + Proposers []string `json:"proposers"` } -func parseCLIProposal(path string) (CLIProposal, error) { - var p CLIProposal - +func getCLIProposal(path string) (CLIProposal, error) { contents, err := os.ReadFile(path) if err != nil { return CLIProposal{}, err } - err = json.Unmarshal(contents, &p) - if err != nil { + return parseCLIProposal(contents) +} + +func parseCLIProposal(contents []byte) (CLIProposal, error) { + var p CLIProposal + if err := json.Unmarshal(contents, &p); err != nil { return CLIProposal{}, err } diff --git a/x/group/client/cli/util_test.go b/x/group/client/cli/util_test.go new file mode 100644 index 0000000000..8d0b0d1994 --- /dev/null +++ b/x/group/client/cli/util_test.go @@ -0,0 +1,30 @@ +package cli + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func Test_ParseCLIProposal(t *testing.T) { + data := []byte(`{ + "group_policy_address": "cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf", + "messages": [ + { + "@type": "/cosmos.bank.v1beta1.MsgSend", + "from_address": "cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf", + "to_address": "cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf", + "amount":[{"denom": "stake","amount": "10"}] + } + ], + "metadata": "4pIMOgIGx1vZGU=", + "proposers": ["cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf"] + }`) + + result, err := parseCLIProposal(data) + require.NoError(t, err) + require.Equal(t, result.GroupPolicyAddress, "cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf") + require.NotEmpty(t, result.Metadata) + require.Equal(t, result.Metadata, "4pIMOgIGx1vZGU=") + require.Equal(t, result.Proposers, []string{"cosmos15r295x4994egvckteam9skazy9kvfvzpak4naf"}) +}