Merge pull request #46 from planetmint/jmastr/code-improvements

Code Improvements
This commit is contained in:
Lorenz Herzberger 2023-07-24 13:02:01 +02:00 committed by GitHub
commit 75616169f4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 101 additions and 43 deletions

View File

@ -16,13 +16,13 @@ func (s *E2ETestSuite) TestNotarizeAssetREST() {
val := s.network.Validators[0]
// Create Msg
k, err := val.ClientCtx.Keyring.Key("machine")
k, err := val.ClientCtx.Keyring.Key(sample.Name)
s.Require().NoError(err)
addr, err := k.GetAddress()
s.Require().NoError(err)
privKey, err := val.ClientCtx.Keyring.(unsafeExporter).ExportPrivateKeyObject("machine")
privKey, err := val.ClientCtx.Keyring.(unsafeExporter).ExportPrivateKeyObject(sample.Name)
s.Require().NoError(err)
sk := hex.EncodeToString(privKey.Bytes())
@ -67,7 +67,7 @@ func (s *E2ETestSuite) TestNotarizeAssetREST() {
for _, tc := range testCases {
// Prepare Tx
txBytes, err := testutil.PrepareTx(val, &tc.msg, "machine")
txBytes, err := testutil.PrepareTx(val, &tc.msg, sample.Name)
s.Require().NoError(err)
// Broadcast Tx

View File

@ -6,14 +6,11 @@ import (
"fmt"
"planetmint-go/testutil/network"
"planetmint-go/testutil/sample"
"regexp"
clitestutil "planetmint-go/testutil/cli"
assetcli "planetmint-go/x/asset/client/cli"
machinecli "planetmint-go/x/machine/client/cli"
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
@ -22,7 +19,6 @@ import (
bank "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"sigs.k8s.io/yaml"
)
// E2ETestSuite struct definition of asset suite
@ -48,9 +44,6 @@ func (s *E2ETestSuite) SetupSuite() {
kb := val.ClientCtx.Keyring
account, err := kb.NewAccount(sample.Name, sample.Mnemonic, keyring.DefaultBIP39Passphrase, sdk.FullFundraiserPath, hd.Secp256k1)
s.Require().NoError(err)
pk, err := account.GetPubKey()
pkHex := hex.EncodeToString(pk.Bytes())
s.Require().NoError(err)
addr, _ := account.GetAddress()
@ -62,25 +55,42 @@ func (s *E2ETestSuite) SetupSuite() {
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
s.Require().NoError(err)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
rawLog, err := clitestutil.GetRawLogFromTxResponse(val, txResponse)
s.Require().NoError(err)
machine := sample.Machine("machine", pkHex)
assert.Contains(s.T(), rawLog, "cosmos.bank.v1beta1.MsgSend")
s.Require().NoError(s.network.WaitForNextBlock())
machine := sample.Machine(sample.Name, sample.PubKey)
machineJSON, err := json.Marshal(&machine)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, "machine"),
fmt.Sprintf("--%s=%s", flags.FlagFees, "2stake"),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(machineJSON),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
s.Require().NoError(err)
txResponse, err = clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
rawLog, err = clitestutil.GetRawLogFromTxResponse(val, txResponse)
s.Require().NoError(err)
assert.Contains(s.T(), rawLog, "planetmintgo.machine.MsgAttestMachine")
}
// TearDownSuite clean up after testing
@ -97,7 +107,7 @@ type unsafeExporter interface {
func (s *E2ETestSuite) TestNotarizeAsset() {
val := s.network.Validators[0]
privKey, err := val.ClientCtx.Keyring.(unsafeExporter).ExportPrivateKeyObject("machine")
privKey, err := val.ClientCtx.Keyring.(unsafeExporter).ExportPrivateKeyObject(sample.Name)
s.Require().NoError(err)
sk := hex.EncodeToString(privKey.Bytes())
@ -115,8 +125,8 @@ func (s *E2ETestSuite) TestNotarizeAsset() {
cidHash,
signature,
"pubkey",
fmt.Sprintf("--%s=%s", flags.FlagFrom, "machine"),
fmt.Sprintf("--%s=%s", flags.FlagFees, "2stake"),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
},
"machine not found",
@ -127,8 +137,8 @@ func (s *E2ETestSuite) TestNotarizeAsset() {
"cid",
"signature",
hex.EncodeToString(privKey.PubKey().Bytes()),
fmt.Sprintf("--%s=%s", flags.FlagFrom, "machine"),
fmt.Sprintf("--%s=%s", flags.FlagFees, "2stake"),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
},
"invalid signature",
@ -139,8 +149,8 @@ func (s *E2ETestSuite) TestNotarizeAsset() {
cidHash,
signature,
hex.EncodeToString(privKey.PubKey().Bytes()),
fmt.Sprintf("--%s=%s", flags.FlagFrom, "machine"),
fmt.Sprintf("--%s=%s", flags.FlagFees, "2stake"),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
},
"planetmintgo.asset.MsgNotarizeAsset",
@ -150,29 +160,14 @@ func (s *E2ETestSuite) TestNotarizeAsset() {
for _, tc := range testCases {
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, assetcli.CmdNotarizeAsset(), tc.args)
s.Require().NoError(err)
// Hack: numbers come back as strings and cannot be unmarshalled into TxResponse struct
m := regexp.MustCompile(`"([0-9]+?)"`)
str := m.ReplaceAllString(out.String(), "${1}")
var txResponse sdk.TxResponse
err = json.Unmarshal([]byte(str), &txResponse)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
args := []string{
txResponse.TxHash,
}
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, authcmd.QueryTxCmd(), args)
rawLog, err := clitestutil.GetRawLogFromTxResponse(val, txResponse)
s.Require().NoError(err)
str = m.ReplaceAllString(out.String(), "${1}")
// Need to convert to JSON first, because TxResponse struct lacks `yaml:"height,omitempty"`, etc.
j, err := yaml.YAMLToJSON([]byte(str))
s.Require().NoError(err)
err = json.Unmarshal(j, &txResponse)
s.Require().NoError(err)
assert.Contains(s.T(), txResponse.RawLog, tc.rawLog)
assert.Contains(s.T(), rawLog, tc.rawLog)
}
}

View File

@ -12,6 +12,7 @@ import (
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
bank "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -51,10 +52,17 @@ func (s *E2ETestSuite) SetupSuite() {
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
s.Require().NoError(err)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
rawLog, err := clitestutil.GetRawLogFromTxResponse(val, txResponse)
s.Require().NoError(err)
assert.Contains(s.T(), rawLog, "cosmos.bank.v1beta1.MsgSend")
}
// TearDownSuite clean up after testing
@ -78,10 +86,17 @@ func (s *E2ETestSuite) TestAttestMachine() {
string(machineJSON),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
s.Require().NoError(err)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
rawLog, err := clitestutil.GetRawLogFromTxResponse(val, txResponse)
s.Require().NoError(err)
assert.Contains(s.T(), rawLog, "planetmintgo.machine.MsgAttestMachine")
args = []string{
sample.PubKey,

View File

@ -2,10 +2,17 @@ package cli
import (
"context"
"encoding/json"
"planetmint-go/testutil"
"regexp"
"github.com/cosmos/cosmos-sdk/testutil/network"
sdk "github.com/cosmos/cosmos-sdk/types"
authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli"
"github.com/cosmos/cosmos-sdk/client"
"github.com/spf13/cobra"
"sigs.k8s.io/yaml"
)
// ExecTestCLICmd builds the client context, mocks the output and executes the command.
@ -24,3 +31,44 @@ func ExecTestCLICmd(clientCtx client.Context, cmd *cobra.Command, extraArgs []st
return out, nil
}
// GetTxResponseFromOut converts strings to numbers and unmarshalles out into TxResponse struct
func GetTxResponseFromOut(out testutil.BufferWriter) (sdk.TxResponse, error) {
var txResponse sdk.TxResponse
m := regexp.MustCompile(`"([0-9]+?)"`)
str := m.ReplaceAllString(out.String(), "${1}")
// We might have YAML here, so we need to convert to JSON first, because TxResponse struct lacks `yaml:"height,omitempty"`, etc.
// Since JSON is a subset of YAML, passing JSON through YAMLToJSON is a no-op and the result is the byte array of the JSON again.
j, err := yaml.YAMLToJSON([]byte(str))
if err != nil {
return txResponse, err
}
err = json.Unmarshal(j, &txResponse)
if err != nil {
return txResponse, err
}
return txResponse, nil
}
// GetRawLogFromTxResponse queries the TxHash of txResponse from the chain and returns the RawLog from the answer.
func GetRawLogFromTxResponse(val *network.Validator, txResponse sdk.TxResponse) (string, error) {
args := []string{
txResponse.TxHash,
}
out, err := ExecTestCLICmd(val.ClientCtx, authcmd.QueryTxCmd(), args)
if err != nil {
return "", err
}
txRes, err := GetTxResponseFromOut(out)
if err != nil {
return "", err
}
return txRes.RawLog, nil
}

View File

@ -15,7 +15,7 @@ import (
const Mnemonic = "helmet hedgehog lab actor weekend elbow pelican valid obtain hungry rocket decade tower gallery fit practice cart cherry giggle hair snack glance bulb farm"
// PubKey corresponding public key to sample mnemonic
const PubKey = "AjKN6HiWucu1EBwzX0ACnkvomJiLRwq79oPxoLMY1zRw"
const PubKey = "02328de87896b9cbb5101c335f40029e4be898988b470abbf683f1a0b318d73470"
// Name is the name of the sample machine to use in tests
const Name = "machine"