mirror of
https://github.com/fluencelabs/tendermint
synced 2025-05-02 01:52:16 +00:00
As per #2127, this refactors the RequestCheckTx ProtoBuf struct to allow for a flag indicating whether a query is a recheck or not (and allows for possible future, more nuanced states). In order to pass this extended information through to the ABCI app, the proxy.AppConnMempool (and, for consistency, the proxy.AppConnConsensus) interface seems to need to be refactored along with abcicli.Client. And, as per this comment, I've made the following modification to the protobuf definition for the RequestCheckTx structure: enum CheckTxType { New = 0; Recheck = 1; } message RequestCheckTx { bytes tx = 1; CheckTxType type = 2; } * Refactor ABCI CheckTx to notify of recheck As per #2127, this refactors the `RequestCheckTx` ProtoBuf struct to allow for: 1. a flag indicating whether a query is a recheck or not (and allows for possible future, more nuanced states) 2. an `additional_data` bytes array to provide information for those more nuanced states. In order to pass this extended information through to the ABCI app, the `proxy.AppConnMempool` (and, for consistency, the `proxy.AppConnConsensus`) interface seems to need to be refactored. Commits: * Fix linting issue * Add CHANGELOG_PENDING entry * Remove extraneous explicit initialization * Update ABCI spec doc to include new CheckTx params * Rename method param for consistency * Rename CheckTxType enum values and remove additional_data param
97 lines
2.8 KiB
Go
97 lines
2.8 KiB
Go
package testsuite
|
|
|
|
import (
|
|
"bytes"
|
|
"errors"
|
|
"fmt"
|
|
|
|
abcicli "github.com/tendermint/tendermint/abci/client"
|
|
"github.com/tendermint/tendermint/abci/types"
|
|
cmn "github.com/tendermint/tendermint/libs/common"
|
|
)
|
|
|
|
func InitChain(client abcicli.Client) error {
|
|
total := 10
|
|
vals := make([]types.ValidatorUpdate, total)
|
|
for i := 0; i < total; i++ {
|
|
pubkey := cmn.RandBytes(33)
|
|
power := cmn.RandInt()
|
|
vals[i] = types.Ed25519ValidatorUpdate(pubkey, int64(power))
|
|
}
|
|
_, err := client.InitChainSync(types.RequestInitChain{
|
|
Validators: vals,
|
|
})
|
|
if err != nil {
|
|
fmt.Printf("Failed test: InitChain - %v\n", err)
|
|
return err
|
|
}
|
|
fmt.Println("Passed test: InitChain")
|
|
return nil
|
|
}
|
|
|
|
func SetOption(client abcicli.Client, key, value string) error {
|
|
_, err := client.SetOptionSync(types.RequestSetOption{Key: key, Value: value})
|
|
if err != nil {
|
|
fmt.Println("Failed test: SetOption")
|
|
fmt.Printf("error while setting %v=%v: \nerror: %v\n", key, value, err)
|
|
return err
|
|
}
|
|
fmt.Println("Passed test: SetOption")
|
|
return nil
|
|
}
|
|
|
|
func Commit(client abcicli.Client, hashExp []byte) error {
|
|
res, err := client.CommitSync()
|
|
data := res.Data
|
|
if err != nil {
|
|
fmt.Println("Failed test: Commit")
|
|
fmt.Printf("error while committing: %v\n", err)
|
|
return err
|
|
}
|
|
if !bytes.Equal(data, hashExp) {
|
|
fmt.Println("Failed test: Commit")
|
|
fmt.Printf("Commit hash was unexpected. Got %X expected %X\n", data, hashExp)
|
|
return errors.New("CommitTx failed")
|
|
}
|
|
fmt.Println("Passed test: Commit")
|
|
return nil
|
|
}
|
|
|
|
func DeliverTx(client abcicli.Client, txBytes []byte, codeExp uint32, dataExp []byte) error {
|
|
res, _ := client.DeliverTxSync(types.RequestDeliverTx{Tx: txBytes})
|
|
code, data, log := res.Code, res.Data, res.Log
|
|
if code != codeExp {
|
|
fmt.Println("Failed test: DeliverTx")
|
|
fmt.Printf("DeliverTx response code was unexpected. Got %v expected %v. Log: %v\n",
|
|
code, codeExp, log)
|
|
return errors.New("DeliverTx error")
|
|
}
|
|
if !bytes.Equal(data, dataExp) {
|
|
fmt.Println("Failed test: DeliverTx")
|
|
fmt.Printf("DeliverTx response data was unexpected. Got %X expected %X\n",
|
|
data, dataExp)
|
|
return errors.New("DeliverTx error")
|
|
}
|
|
fmt.Println("Passed test: DeliverTx")
|
|
return nil
|
|
}
|
|
|
|
func CheckTx(client abcicli.Client, txBytes []byte, codeExp uint32, dataExp []byte) error {
|
|
res, _ := client.CheckTxSync(types.RequestCheckTx{Tx: txBytes})
|
|
code, data, log := res.Code, res.Data, res.Log
|
|
if code != codeExp {
|
|
fmt.Println("Failed test: CheckTx")
|
|
fmt.Printf("CheckTx response code was unexpected. Got %v expected %v. Log: %v\n",
|
|
code, codeExp, log)
|
|
return errors.New("CheckTx")
|
|
}
|
|
if !bytes.Equal(data, dataExp) {
|
|
fmt.Println("Failed test: CheckTx")
|
|
fmt.Printf("CheckTx response data was unexpected. Got %X expected %X\n",
|
|
data, dataExp)
|
|
return errors.New("CheckTx")
|
|
}
|
|
fmt.Println("Passed test: CheckTx")
|
|
return nil
|
|
}
|