Enable sequence file locking in tests (#236)

* [lib] Add `FeeGranter` to tx factory
* [lib] Align return value with test cases
* [test] Return error on tx response
* [test] Switch to sequence file locking via libRPC
* [test] Reintegrate `TestPoPResult`

Closes #234


Signed-off-by: Julian Strobl <jmastr@mailbox.org>
This commit is contained in:
Julian Strobl 2023-12-18 15:47:44 +01:00 committed by GitHub
parent 487dc3b93c
commit 036ce7cbc1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 232 additions and 321 deletions

View File

@ -61,6 +61,7 @@ func getTxFactoryWithAccountNumberAndSequence(clientCtx client.Context, accountN
WithAccountNumber(accountNumber).
WithAccountRetriever(clientCtx.AccountRetriever).
WithChainID(clientCtx.ChainID).
WithFeeGranter(clientCtx.FeeGranter).
WithGas(200000).
WithGasPrices("0.000005" + GetConfig().FeeDenom).
WithKeybase(clientCtx.Keyring).
@ -140,16 +141,16 @@ func BuildUnsignedTx(address sdk.AccAddress, msgs ...sdk.Msg) (txJSON string, er
}
// BroadcastTx broadcasts a transaction via RPC.
func BroadcastTx(address sdk.AccAddress, msgs ...sdk.Msg) (broadcastTxResponseJSON string, err error) {
func BroadcastTx(address sdk.AccAddress, msgs ...sdk.Msg) (out *bytes.Buffer, err error) {
clientCtx, txf, err := getClientContextAndTxFactory(address)
if err != nil {
return
}
broadcastTxResponseJSON, err = broadcastTx(clientCtx, txf, msgs...)
out, err = broadcastTx(clientCtx, txf, msgs...)
return
}
func broadcastTx(clientCtx client.Context, txf tx.Factory, msgs ...sdk.Msg) (broadcastTxResponseJSON string, err error) {
func broadcastTx(clientCtx client.Context, txf tx.Factory, msgs ...sdk.Msg) (out *bytes.Buffer, err error) {
err = tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msgs...)
if err != nil {
return
@ -166,17 +167,10 @@ func broadcastTx(clientCtx client.Context, txf tx.Factory, msgs ...sdk.Msg) (bro
if err != nil {
return
}
code, ok := result["code"].(float64)
if !ok {
err = ErrTypeAssertionFailed
return
}
if code != 0 {
err = errors.New(output.String())
return
}
broadcastTxResponseJSON = output.String()
// Make a copy because we `defer output.Reset()`
out = &bytes.Buffer{}
*out = *output
return
}
func getSequenceFromFile(seqFile *os.File, filename string) (sequence uint64, err error) {
@ -216,7 +210,7 @@ func getSequenceFromChain(clientCtx client.Context) (sequence uint64, err error)
}
// BroadcastTxWithFileLock broadcasts a transaction via gRPC and synchronises requests via a file lock.
func BroadcastTxWithFileLock(address sdk.AccAddress, msgs ...sdk.Msg) (broadcastTxResponseJSON string, err error) {
func BroadcastTxWithFileLock(address sdk.AccAddress, msgs ...sdk.Msg) (out *bytes.Buffer, err error) {
// open and lock file, if it exists
usr, err := user.Current()
if err != nil {
@ -272,7 +266,7 @@ func BroadcastTxWithFileLock(address sdk.AccAddress, msgs ...sdk.Msg) (broadcast
// Set new sequence number
txf = txf.WithSequence(sequence)
broadcastTxResponseJSON, err = broadcastTx(clientCtx, txf, msgs...)
out, err = broadcastTx(clientCtx, txf, msgs...)
if err != nil {
return
}

View File

@ -1,20 +1,18 @@
package asset
import (
"encoding/json"
"fmt"
"github.com/planetmint/planetmint-go/config"
"github.com/planetmint/planetmint-go/lib"
"github.com/planetmint/planetmint-go/testutil/network"
"github.com/planetmint/planetmint-go/testutil/sample"
clitestutil "github.com/planetmint/planetmint-go/testutil/cli"
assetcli "github.com/planetmint/planetmint-go/x/asset/client/cli"
machinecli "github.com/planetmint/planetmint-go/x/machine/client/cli"
machinetypes "github.com/planetmint/planetmint-go/x/machine/types"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
bank "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
@ -39,6 +37,9 @@ func NewE2ETestSuite(cfg network.Config) *E2ETestSuite {
// SetupSuite initializes asset E2ETestSuite
func (s *E2ETestSuite) SetupSuite() {
conf := config.GetConfig()
conf.FeeDenom = "stake"
s.T().Log("setting up e2e test suite")
s.network = network.New(s.T())
@ -51,15 +52,9 @@ func (s *E2ETestSuite) SetupSuite() {
addr, _ := account.GetAddress()
// sending funds to machine to initialize account on chain
args := []string{
val.Moniker,
addr.String(),
sample.Amount,
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
}
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
coin := sdk.NewCoins(sdk.NewInt64Coin("stake", 1000))
msg1 := banktypes.NewMsgSend(val.Address, addr, coin)
out, err := lib.BroadcastTxWithFileLock(val.Address, msg1)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
@ -73,32 +68,26 @@ func (s *E2ETestSuite) SetupSuite() {
prvKey, pubKey = sample.KeyPair()
ta := sample.TrustAnchor(pubKey)
taJSON, err := json.Marshal(&ta)
msg2 := machinetypes.NewMsgRegisterTrustAnchor(val.Address.String(), &ta)
out, err = lib.BroadcastTxWithFileLock(val.Address, msg2)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, addr.String()),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(taJSON),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdRegisterTrustAnchor(), args)
s.Require().NoError(s.network.WaitForNextBlock())
_, err = clitestutil.GetRawLogFromTxOut(val, out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// name and address of private key with which to sign
clientCtx := val.ClientCtx.
WithFromAddress(addr).
WithFromName(sample.Name)
libConfig := lib.GetConfig()
libConfig.SetClientCtx(clientCtx)
machine := sample.Machine(sample.Name, pubKey, prvKey, addr.String())
machineJSON, err := json.Marshal(&machine)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(machineJSON),
}
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
msg3 := machinetypes.NewMsgAttestMachine(addr.String(), &machine)
out, err = lib.BroadcastTxWithFileLock(addr, msg3)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
@ -120,29 +109,24 @@ func (s *E2ETestSuite) TestNotarizeAsset() {
s.Require().NoError(err)
addr, _ := k.GetAddress()
cid := sample.Asset()
liquidAsset := machinetypes.LiquidAsset{}
testCases := []struct {
name string
args []string
msg *machinetypes.MsgNotarizeLiquidAsset
rawLog string
expectCheckTxErr bool
}{
{
"valid notarization",
[]string{
cid,
fmt.Sprintf("--%s=%s", flags.FlagFrom, addr.String()),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
},
machinetypes.NewMsgNotarizeLiquidAsset(addr.String(), &liquidAsset),
"[]",
true,
},
}
for _, tc := range testCases {
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, assetcli.CmdNotarizeAsset(), tc.args)
out, err := lib.BroadcastTxWithFileLock(addr, tc.msg)
s.Require().NoError(err)
txResponse, err := clitestutil.GetTxResponseFromOut(out)

View File

@ -2,17 +2,18 @@ package dao
import (
"bufio"
"encoding/json"
"bytes"
"fmt"
"os"
"strconv"
"strings"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/client/flags"
"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/planetmint/planetmint-go/config"
"github.com/planetmint/planetmint-go/lib"
clitestutil "github.com/planetmint/planetmint-go/testutil/cli"
"github.com/planetmint/planetmint-go/testutil/network"
"github.com/planetmint/planetmint-go/testutil/sample"
@ -115,24 +116,19 @@ func (s *E2ETestSuite) TearDownSuite() {
}
func (s *E2ETestSuite) TestDistributeCollectedFees() {
conf := config.GetConfig()
val := s.network.Validators[0]
// sending funds to alice and pay some fees to be distributed
args := []string{
val.Moniker,
aliceAddr.String(),
"1000stake",
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
}
_, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
coin := sdk.NewCoins(sdk.NewInt64Coin("stake", 1000))
msg := banktypes.NewMsgSend(val.Address, aliceAddr, coin)
_, err := lib.BroadcastTxWithFileLock(val.Address, msg)
s.Require().NoError(err)
err = s.network.WaitForNextBlock()
s.Require().NoError(err)
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg)
s.Require().NoError(err)
err = s.network.WaitForNextBlock()
@ -141,40 +137,27 @@ func (s *E2ETestSuite) TestDistributeCollectedFees() {
err = s.network.WaitForNextBlock()
s.Require().NoError(err)
// assert that alice has 6 of 20 paid fee tokens based on 5000 stake of 15000 total stake
// assert that alice has 0 of 20 paid fee tokens based on 5000 stake of 15000 total stake
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
aliceAddr.String(),
})
assert.Contains(s.T(), out.String(), "node0token")
assert.Contains(s.T(), out.String(), "6")
assert.False(s.T(), strings.Contains(out.String(), "node0token"))
s.Require().NoError(err)
// assert that bob has 13 of 20 paid fee tokens based on 10000 stake of 15000 total stake
// assert that bob has 1 of 20 paid fee tokens based on 10000 stake of 15000 total stake
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
bobAddr.String(),
})
assert.Contains(s.T(), out.String(), "node0token")
assert.Contains(s.T(), out.String(), "13")
assert.Contains(s.T(), out.String(), "amount: \"1\"\n denom: node0token")
s.Require().NoError(err)
}
func (s *E2ETestSuite) TestMintToken() {
conf := config.GetConfig()
val := s.network.Validators[0]
mintRequest := sample.MintRequest(aliceAddr.String(), 1000, "hash")
mrJSON, err := json.Marshal(&mintRequest)
s.Require().NoError(err)
// send mint token request from mint address
args := []string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
"--yes",
string(mrJSON),
}
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdMintToken(), args)
msg1 := daotypes.NewMsgMintToken(val.Address.String(), &mintRequest)
out, err := lib.BroadcastTxWithFileLock(val.Address, msg1)
s.Require().NoError(err)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
@ -188,9 +171,14 @@ func (s *E2ETestSuite) TestMintToken() {
assert.Contains(s.T(), rawLog, "planetmintgo.dao.MsgMintToken")
// assert that alice has actually received the minted tokens 10000 (initial supply) + 1000 (minted) = 11000 (total)
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
output, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
aliceAddr.String(),
})
out, ok := output.(*bytes.Buffer)
if !ok {
err = lib.ErrTypeAssertionFailed
s.Require().NoError(err)
}
assert.Contains(s.T(), out.String(), "plmnt")
assert.Contains(s.T(), out.String(), "11000")
s.Require().NoError(err)
@ -203,26 +191,17 @@ func (s *E2ETestSuite) TestMintToken() {
addr, _ := account.GetAddress()
// sending funds to account to initialize on chain
args = []string{
val.Moniker,
addr.String(),
sample.Amount,
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
coin := sdk.NewCoins(sdk.NewInt64Coin("stake", 1000))
msg2 := banktypes.NewMsgSend(val.Address, addr, coin)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg2)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagFrom, addr.String()),
fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
"--yes",
string(mrJSON),
}
msg1 = daotypes.NewMsgMintToken(addr.String(), &mintRequest)
out, err = lib.BroadcastTxWithFileLock(addr, msg1)
s.Require().NoError(err)
out, _ = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdMintToken(), args)
txResponse, err = clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().Equal(int(2), int(txResponse.Code))
@ -285,144 +264,107 @@ func (s *E2ETestSuite) TestReissuance() {
s.Require().NoError(err)
}
// disabled due to indeterministic behaviour.
// TODO can be reintegrated asap clitestutil.ExecTestCLICmd(val.ClientCtx supports sequence locking
// func (s *E2ETestSuite) TestPoPResult() {
// conf := config.GetConfig()
// conf.PopEpochs = 1
// val := s.network.Validators[0]
func (s *E2ETestSuite) TestPoPResult() {
conf := config.GetConfig()
conf.PopEpochs = 5
val := s.network.Validators[0]
// // send PoP results
// challenges := make([]daotypes.Challenge, 5)
// for i := range challenges {
// blockHeight := (i + 1) * config.GetConfig().PopEpochs
// challenges[i].Height = int64(blockHeight)
// challenges[i].Initiator = val.Address.String()
// challenges[i].Challenger = aliceAddr.String()
// challenges[i].Challengee = bobAddr.String()
// challenges[i].Success = true
// challenges[i].Finished = true
// send PoP results
challenges := make([]daotypes.Challenge, 5)
for i := range challenges {
blockHeight := (i + 1) * config.GetConfig().PopEpochs
challenges[i].Height = int64(blockHeight)
challenges[i].Initiator = val.Address.String()
challenges[i].Challenger = aliceAddr.String()
challenges[i].Challengee = bobAddr.String()
challenges[i].Success = true
challenges[i].Finished = true
// chJSON, err := json.Marshal(&challenges[i])
// s.Require().NoError(err)
msg := daotypes.NewMsgReportPopResult(val.Address.String(), &challenges[i])
_, err := lib.BroadcastTxWithFileLock(val.Address, msg)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
}
// args := []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
// fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
// "--yes",
// string(chJSON),
// }
// check balance for stagedcrddl
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetCmdQueryTotalSupply(), []string{
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.StagedDenom)
assert.Contains(s.T(), out.String(), "39954337890") // Total supply 5 * 7990867578 = 39954337890
// _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdReportPopResult(), args)
// s.Require().NoError(err)
// s.Require().NoError(s.network.WaitForNextBlock())
// }
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
aliceAddr.String(),
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.StagedDenom)
assert.Contains(s.T(), out.String(), "9988584470") // 5 * 1997716894 = 9988584470
// // check balance for stagedcrddl
// out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetCmdQueryTotalSupply(), []string{
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.StagedDenom)
// assert.Contains(s.T(), out.String(), "39954337890") // Total supply 5 * 7990867578 = 39954337890
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
bobAddr.String(),
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.StagedDenom)
assert.Contains(s.T(), out.String(), "29965753420") // 5 * 5993150684 = 29965753420
// out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
// aliceAddr.String(),
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.StagedDenom)
// assert.Contains(s.T(), out.String(), "9988584470") // 5 * 1997716894 = 9988584470
// send ReissuanceProposal
msg1 := daotypes.NewMsgReissueRDDLProposal(val.Address.String(), aliceAddr.String(),
"reissueasset 7add40beb27df701e02ee85089c5bc0021bc813823fedb5f1dcb5debda7f3da9 2996.07000000",
challenges[4].Height, challenges[0].Height, challenges[2].Height)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg1)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
// bobAddr.String(),
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.StagedDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.StagedDenom)
// assert.Contains(s.T(), out.String(), "29965753420") // 5 * 5993150684 = 29965753420
// send ReissuanceResult
msg2 := daotypes.NewMsgReissueRDDLResult(val.Address.String(), aliceAddr.String(), "TxID", challenges[4].Height)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg2)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// // send ReissuanceProposal
// _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdReissueRDDLProposal(), []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
// fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
// "--yes",
// aliceAddr.String(),
// "reissueasset 7add40beb27df701e02ee85089c5bc0021bc813823fedb5f1dcb5debda7f3da9 2996.07000000",
// strconv.FormatInt(challenges[4].Height, 10),
// strconv.FormatInt(challenges[0].Height, 10),
// strconv.FormatInt(challenges[2].Height, 10),
// })
// s.Require().NoError(err)
// s.Require().NoError(s.network.WaitForNextBlock())
// send DistributionRequest
distributionOrder := daotypes.DistributionOrder{
Proposer: aliceAddr.String(),
FirstPop: challenges[0].Height,
LastPop: challenges[2].Height,
DaoTxID: "DaoTxID",
PopTxID: "PoPTxID",
InvestorTxID: "InvestorTxID",
}
msg3 := daotypes.NewMsgDistributionRequest(val.Address.String(), &distributionOrder)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg3)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// // send ReissuanceResult
// _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdReissueRDDLResult(), []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
// fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
// "--yes",
// aliceAddr.String(),
// "TxID",
// strconv.FormatInt(challenges[4].Height, 10),
// })
// s.Require().NoError(err)
// s.Require().NoError(s.network.WaitForNextBlock())
// send DistributionResult
msg4 := daotypes.NewMsgDistributionResult(val.Address.String(), challenges[2].Height, "DaoTxID", "InvestorTxID", "PoPTxID")
_, err = lib.BroadcastTxWithFileLock(val.Address, msg4)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// // send DistributionRequest
// distributionOrder := daotypes.DistributionOrder{
// Proposer: aliceAddr.String(),
// FirstPop: challenges[0].Height,
// LastPop: challenges[2].Height,
// DaoTxID: "DaoTxID",
// PopTxID: "PoPTxID",
// InvestorTxID: "InvestorTxID",
// }
// doJSON, err := json.Marshal(&distributionOrder)
// s.Require().NoError(err)
// check balance for crddl
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetCmdQueryTotalSupply(), []string{
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.ClaimDenom)
assert.Contains(s.T(), out.String(), "0") // Total supply 3 * 5993150684 + 3 * 1997716894 = 23972602734
// _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdDistributionRequest(), []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
// fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
// "--yes",
// string(doJSON),
// })
// s.Require().NoError(err)
// s.Require().NoError(s.network.WaitForNextBlock())
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
aliceAddr.String(),
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.ClaimDenom)
assert.Contains(s.T(), out.String(), "0") // 3 * 1997716894 = 5993150682
// // send DistributionResult
// _, err = clitestutil.ExecTestCLICmd(val.ClientCtx, daocli.CmdDistributionResult(), []string{
// fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
// fmt.Sprintf("--%s=%s", flags.FlagFees, fmt.Sprintf("10%s", conf.FeeDenom)),
// "--yes",
// strconv.FormatInt(challenges[2].Height, 10),
// "DaoTxID",
// "InvestorTxID",
// "PoPTxID",
// })
// s.Require().NoError(err)
// s.Require().NoError(s.network.WaitForNextBlock())
// // check balance for crddl
// out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetCmdQueryTotalSupply(), []string{
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.ClaimDenom)
// assert.Contains(s.T(), out.String(), "0") // Total supply 3 * 5993150684 + 3 * 1997716894 = 23972602734
// out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
// aliceAddr.String(),
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.ClaimDenom)
// assert.Contains(s.T(), out.String(), "0") // 3 * 1997716894 = 5993150682
// out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
// bobAddr.String(),
// fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
// })
// s.Require().NoError(err)
// assert.Contains(s.T(), out.String(), conf.ClaimDenom)
// assert.Contains(s.T(), out.String(), "0") // 3 * 5993150684 = 17979452052
// }
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, bank.GetBalancesCmd(), []string{
bobAddr.String(),
fmt.Sprintf("--%s=%s", bank.FlagDenom, conf.ClaimDenom),
})
s.Require().NoError(err)
assert.Contains(s.T(), out.String(), conf.ClaimDenom)
assert.Contains(s.T(), out.String(), "0") // 3 * 5993150684 = 17979452052
}

View File

@ -1,19 +1,19 @@
package machine
import (
"encoding/json"
"fmt"
"github.com/planetmint/planetmint-go/config"
"github.com/planetmint/planetmint-go/lib"
clitestutil "github.com/planetmint/planetmint-go/testutil/cli"
"github.com/planetmint/planetmint-go/testutil/network"
"github.com/planetmint/planetmint-go/testutil/sample"
machinecli "github.com/planetmint/planetmint-go/x/machine/client/cli"
machinetypes "github.com/planetmint/planetmint-go/x/machine/types"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
bank "github.com/cosmos/cosmos-sdk/x/bank/client/cli"
feegrant "github.com/cosmos/cosmos-sdk/x/feegrant/client/cli"
sdk "github.com/cosmos/cosmos-sdk/types"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
"github.com/cosmos/cosmos-sdk/x/feegrant"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
)
@ -33,6 +33,9 @@ func NewE2ETestSuite(cfg network.Config) *E2ETestSuite {
// SetupSuite initializes machine E2ETestSuite
func (s *E2ETestSuite) SetupSuite() {
conf := config.GetConfig()
conf.FeeDenom = "stake"
s.T().Log("setting up e2e test suite")
s.network = network.New(s.T())
@ -45,14 +48,9 @@ func (s *E2ETestSuite) SetupSuite() {
addr, _ := account.GetAddress()
// sending funds to machine to initialize account on chain
args := []string{
val.Moniker,
addr.String(),
sample.Amount,
"--yes",
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
}
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, bank.NewSendTxCmd(), args)
coin := sdk.NewCoins(sdk.NewInt64Coin("stake", 1000))
msg := banktypes.NewMsgSend(val.Address, addr, coin)
out, err := lib.BroadcastTxWithFileLock(val.Address, msg)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
@ -75,16 +73,8 @@ func (s *E2ETestSuite) TestAttestMachine() {
prvKey, pubKey := sample.KeyPair()
ta := sample.TrustAnchor(pubKey)
taJSON, err := json.Marshal(&ta)
s.Require().NoError(err)
args := []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(taJSON),
}
out, err := clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdRegisterTrustAnchor(), args)
msg1 := machinetypes.NewMsgRegisterTrustAnchor(val.Address.String(), &ta)
out, err := lib.BroadcastTxWithFileLock(val.Address, msg1)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
@ -97,19 +87,16 @@ func (s *E2ETestSuite) TestAttestMachine() {
s.Require().NoError(err)
addr, _ := k.GetAddress()
// name and address of private key with which to sign
clientCtx := val.ClientCtx.
WithFromAddress(addr).
WithFromName(sample.Name)
libConfig := lib.GetConfig()
libConfig.SetClientCtx(clientCtx)
machine := sample.Machine(sample.Name, pubKey, prvKey, addr.String())
machineJSON, err := json.Marshal(&machine)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(machineJSON),
}
out, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
msg2 := machinetypes.NewMsgAttestMachine(addr.String(), &machine)
out, err = lib.BroadcastTxWithFileLock(addr, msg2)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
@ -118,7 +105,7 @@ func (s *E2ETestSuite) TestAttestMachine() {
assert.Contains(s.T(), rawLog, "planetmintgo.machine.MsgAttestMachine")
args = []string{
args := []string{
pubKey,
}
@ -137,36 +124,27 @@ func (s *E2ETestSuite) TestInvalidAttestMachine() {
addr, _ := k.GetAddress()
machine := sample.Machine(sample.Name, pubKey, prvKey, addr.String())
machineJSON, err := json.Marshal(&machine)
s.Require().NoError(err)
args := []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(machineJSON),
}
// name and address of private key with which to sign
clientCtx := val.ClientCtx.
WithFromAddress(addr).
WithFromName(sample.Name)
libConfig := lib.GetConfig()
libConfig.SetClientCtx(clientCtx)
out, _ := clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
msg := machinetypes.NewMsgAttestMachine(addr.String(), &machine)
out, _ := lib.BroadcastTxWithFileLock(addr, msg)
txResponse, err := clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().Equal(int(txResponse.Code), int(4))
unregisteredPubKey, unregisteredPrivKey := sample.KeyPair(2)
machine = sample.Machine(sample.Name, unregisteredPubKey, unregisteredPrivKey, addr.String())
machineJSON, err = json.Marshal(&machine)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, sample.Name),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(machineJSON),
}
out, _ = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
msg = machinetypes.NewMsgAttestMachine(addr.String(), &machine)
out, _ = lib.BroadcastTxWithFileLock(addr, msg)
txResponse, err = clitestutil.GetTxResponseFromOut(out)
s.Require().NoError(err)
s.Require().Equal(int(txResponse.Code), int(3))
@ -186,56 +164,65 @@ func (s *E2ETestSuite) TestMachineAllowanceAttestation() {
// register TA
prvKey, pubKey := sample.KeyPair(3)
// name and address of private key with which to sign
libConfig := lib.GetConfig()
libConfig.SetClientCtx(val.ClientCtx)
ta := sample.TrustAnchor(pubKey)
taJSON, err := json.Marshal(&ta)
msg1 := machinetypes.NewMsgRegisterTrustAnchor(val.Address.String(), &ta)
out, err := lib.BroadcastTxWithFileLock(val.Address, msg1)
s.Require().NoError(err)
args := []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Moniker),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
string(taJSON),
}
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdRegisterTrustAnchor(), args)
s.Require().NoError(s.network.WaitForNextBlock())
_, err = clitestutil.GetRawLogFromTxOut(val, out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// create allowance for machine
args = []string{
val.Moniker, // granter
addr.String(), // grantee
fmt.Sprintf("--%s=%s", feegrant.FlagAllowedMsgs, "/planetmintgo.machine.MsgAttestMachine"),
fmt.Sprintf("--%s=%s", feegrant.FlagSpendLimit, "2stake"),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
"--yes",
allowedMsgs := []string{"/planetmintgo.machine.MsgAttestMachine"}
limit := sdk.NewCoins(sdk.NewInt64Coin("stake", 2))
basic := feegrant.BasicAllowance{
SpendLimit: limit,
}
var grant feegrant.FeeAllowanceI
grant = &basic
grant, err = feegrant.NewAllowedMsgAllowance(grant, allowedMsgs)
s.Require().NoError(err)
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, feegrant.NewCmdFeeGrant(), args)
msg2, err := feegrant.NewMsgGrantAllowance(grant, val.Address, addr)
s.Require().NoError(err)
_, err = lib.BroadcastTxWithFileLock(val.Address, msg2)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
_, err = clitestutil.GetRawLogFromTxOut(val, out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
// attest machine with fee granter without funding the machine account first
machine := sample.Machine(sample.Name, pubKey, prvKey, addr.String())
machineJSON, err := json.Marshal(&machine)
s.Require().NoError(err)
args = []string{
fmt.Sprintf("--%s=%s", flags.FlagChainID, s.network.Config.ChainID),
fmt.Sprintf("--%s=%s", flags.FlagFrom, addr.String()),
fmt.Sprintf("--%s=%s", flags.FlagFees, sample.Fees),
fmt.Sprintf("--%s=%s", flags.FlagFeeGranter, val.Address.String()),
"--yes",
string(machineJSON),
}
// name and address of private key with which to sign
clientCtx := val.ClientCtx.
WithFromAddress(addr).
WithFromName("AllowanceMachine").
WithFeeGranterAddress(val.Address)
libConfig.SetClientCtx(clientCtx)
_, err = clitestutil.ExecTestCLICmd(val.ClientCtx, machinecli.CmdAttestMachine(), args)
msg3 := machinetypes.NewMsgAttestMachine(addr.String(), &machine)
_, err = lib.BroadcastTxWithFileLock(addr, msg3)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
_, err = clitestutil.GetRawLogFromTxOut(val, out)
s.Require().NoError(err)
s.Require().NoError(s.network.WaitForNextBlock())
args = []string{
args := []string{
pubKey,
}

View File

@ -72,6 +72,10 @@ func GetRawLogFromTxOut(val *network.Validator, out testutil.BufferWriter) (stri
if err != nil {
return "", err
}
if txResponse.Code != 0 {
err = errors.New(txResponse.RawLog)
return "", err
}
args := []string{
txResponse.TxHash,
}

View File

@ -11,7 +11,7 @@ var (
ErrMachineNotFound = errorsmod.Register(ModuleName, 2, "machine not found")
ErrTrustAnchorNotFound = errorsmod.Register(ModuleName, 3, "trust anchor not found")
ErrTrustAnchorAlreadyInUse = errorsmod.Register(ModuleName, 4, "trust anchor already in use")
ErrMachineIsNotCreator = errorsmod.Register(ModuleName, 5, "the machine.address is no the message creator address")
ErrMachineIsNotCreator = errorsmod.Register(ModuleName, 5, "the machine.address is not the message creator address")
ErrInvalidKey = errorsmod.Register(ModuleName, 6, "invalid key")
ErrNFTIssuanceFailed = errorsmod.Register(ModuleName, 7, "an error occurred while issuing the machine NFT")
ErrMachineTypeUndefined = errorsmod.Register(ModuleName, 8, "the machine type has to be defined")