Fix StatusCommand (#7974)
Co-authored-by: SaReN <sahithnarahari@gmail.com>
This commit is contained in:
parent
87315a6aab
commit
35183a37e6
|
@ -0,0 +1,47 @@
|
||||||
|
package rpc_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
|
"github.com/cosmos/cosmos-sdk/client/rpc"
|
||||||
|
clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
|
||||||
|
"github.com/cosmos/cosmos-sdk/testutil/network"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IntegrationTestSuite struct {
|
||||||
|
suite.Suite
|
||||||
|
|
||||||
|
network *network.Network
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *IntegrationTestSuite) SetupSuite() {
|
||||||
|
s.T().Log("setting up integration test suite")
|
||||||
|
|
||||||
|
s.network = network.New(s.T(), network.DefaultConfig())
|
||||||
|
s.Require().NotNil(s.network)
|
||||||
|
|
||||||
|
s.Require().NoError(s.network.WaitForNextBlock())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *IntegrationTestSuite) TearDownSuite() {
|
||||||
|
s.T().Log("tearing down integration test suite")
|
||||||
|
s.network.Cleanup()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *IntegrationTestSuite) TestStatusCommand() {
|
||||||
|
val0 := s.network.Validators[0]
|
||||||
|
cmd := rpc.StatusCommand()
|
||||||
|
|
||||||
|
out, err := clitestutil.ExecTestCLICmd(val0.ClientCtx, cmd, []string{})
|
||||||
|
s.Require().NoError(err)
|
||||||
|
|
||||||
|
// Make sure the output has the validator moniker.
|
||||||
|
s.Require().Contains(out.String(), fmt.Sprintf("\"moniker\":\"%s\"", val0.Moniker))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestIntegrationTestSuite(t *testing.T) {
|
||||||
|
suite.Run(t, new(IntegrationTestSuite))
|
||||||
|
}
|
|
@ -2,22 +2,38 @@ package rpc
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
"github.com/tendermint/tendermint/libs/bytes"
|
||||||
|
"github.com/tendermint/tendermint/p2p"
|
||||||
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
ctypes "github.com/tendermint/tendermint/rpc/core/types"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client"
|
"github.com/cosmos/cosmos-sdk/client"
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/codec/legacy"
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||||
|
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
|
||||||
"github.com/cosmos/cosmos-sdk/types/rest"
|
"github.com/cosmos/cosmos-sdk/types/rest"
|
||||||
"github.com/cosmos/cosmos-sdk/version"
|
"github.com/cosmos/cosmos-sdk/version"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/p2p"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ValidatorInfo is info about the node's validator, same as Tendermint,
|
||||||
|
// except that we use our own PubKey.
|
||||||
|
type validatorInfo struct {
|
||||||
|
Address bytes.HexBytes
|
||||||
|
PubKey cryptotypes.PubKey
|
||||||
|
VotingPower int64
|
||||||
|
}
|
||||||
|
|
||||||
|
// ResultStatus is node's info, same as Tendermint, except that we use our own
|
||||||
|
// PubKey.
|
||||||
|
type resultStatus struct {
|
||||||
|
NodeInfo p2p.DefaultNodeInfo
|
||||||
|
SyncInfo ctypes.SyncInfo
|
||||||
|
ValidatorInfo validatorInfo
|
||||||
|
}
|
||||||
|
|
||||||
// StatusCommand returns the command to return the status of the network.
|
// StatusCommand returns the command to return the status of the network.
|
||||||
func StatusCommand() *cobra.Command {
|
func StatusCommand() *cobra.Command {
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
|
@ -31,12 +47,27 @@ func StatusCommand() *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
output, err := legacy.Cdc.MarshalJSON(status)
|
// `status` has TM pubkeys, we need to convert them to our pubkeys.
|
||||||
|
pk, err := cryptocodec.FromTmPubKeyInterface(status.ValidatorInfo.PubKey)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
statusWithPk := resultStatus{
|
||||||
|
NodeInfo: status.NodeInfo,
|
||||||
|
SyncInfo: status.SyncInfo,
|
||||||
|
ValidatorInfo: validatorInfo{
|
||||||
|
Address: status.ValidatorInfo.Address,
|
||||||
|
PubKey: pk,
|
||||||
|
VotingPower: status.ValidatorInfo.VotingPower,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
output, err := clientCtx.LegacyAmino.MarshalJSON(statusWithPk)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println(string(output))
|
cmd.Println(string(output))
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue