From 91314fefd9a28b36fd85e143cd20d04953afba85 Mon Sep 17 00:00:00 2001 From: Amaury M <1293565+amaurym@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:12:13 +0200 Subject: [PATCH] Address review comments --- x/auth/ante/sigverify.go | 2 +- x/auth/client/cli/query.go | 24 +++++++++++++++++------- x/auth/client/cli/query_test.go | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 x/auth/client/cli/query_test.go diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index e7af78a5bd62..638e837aa3f4 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -512,6 +512,6 @@ func signatureDataToBz(data signing.SignatureData) ([][]byte, error) { return sigs, nil default: - return nil, fmt.Errorf("unexpected signature data type %T", data) + return nil, sdkerrors.ErrInvalidType.Wrapf("unexpected signature data type %T", data) } } diff --git a/x/auth/client/cli/query.go b/x/auth/client/cli/query.go index b02e11b481ca..ce4f6e95921d 100644 --- a/x/auth/client/cli/query.go +++ b/x/auth/client/cli/query.go @@ -10,6 +10,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/version" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -222,9 +223,10 @@ Example: $ %s query tx $ %s query tx --%s=%s : $ %s query tx --%s=%s -`, version.AppName, -version.AppName, flagType, typeAccSeq, -version.AppName, flagType, typeSig)), +`, + version.AppName, + version.AppName, flagType, typeAccSeq, + version.AppName, flagType, typeSig)), Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { clientCtx, err := client.GetClientQueryContext(cmd) @@ -255,11 +257,10 @@ version.AppName, flagType, typeSig)), } case typeSig: { - if len(args) != 1 || args[0] == "" { - return fmt.Errorf("argument should be comma-separated signatures") + sigParts, err := parseSigArgs(args) + if err != nil { + return err } - - sigParts := strings.Split(args[0], ",") tmEvents := make([]string, len(sigParts)) for i, sig := range sigParts { tmEvents[i] = fmt.Sprintf("%s.%s='%s'", sdk.EventTypeTx, sdk.AttributeKeySignature, sig) @@ -313,3 +314,12 @@ version.AppName, flagType, typeSig)), return cmd } + +// parseSigArgs parses comma-separated signatures from the CLI arguments. +func parseSigArgs(args []string) ([]string, error) { + if len(args) != 1 || args[0] == "" { + return nil, fmt.Errorf("argument should be comma-separated signatures") + } + + return strings.Split(args[0], ","), nil +} diff --git a/x/auth/client/cli/query_test.go b/x/auth/client/cli/query_test.go new file mode 100644 index 000000000000..0168d3008179 --- /dev/null +++ b/x/auth/client/cli/query_test.go @@ -0,0 +1,32 @@ +package cli + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestParseSigs(t *testing.T) { + cases := []struct { + name string + args []string + expErr bool + expNumSigs int + }{ + {"no args", []string{}, true, 0}, + {"empty args", []string{""}, true, 0}, + {"too many args", []string{"foo", "bar"}, true, 0}, + {"1 sig", []string{"foo"}, false, 1}, + {"3 sigs", []string{"foo,bar,baz"}, false, 3}, + } + + for _, tc := range cases { + sigs, err := parseSigArgs(tc.args) + if tc.expErr { + require.Error(t, err) + } else { + require.NoError(t, err) + require.Equal(t, tc.expNumSigs, len(sigs)) + } + } +}