Move integration test attmept to app/integration folder
This commit is contained in:
159
app/integration/common_test.go
Normal file
159
app/integration/common_test.go
Normal file
@@ -0,0 +1,159 @@
|
||||
package integration
|
||||
|
||||
/**
|
||||
This file is full of test helper functions, taken from simapp
|
||||
**/
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
authexported "github.com/cosmos/cosmos-sdk/x/auth/exported"
|
||||
wasmd "github.com/cosmwasm/wasmd/app"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
)
|
||||
|
||||
// SimAppChainID hardcoded chainID for simulation
|
||||
const (
|
||||
DefaultGenTxGas = 1000000
|
||||
SimAppChainID = "wasmd-app"
|
||||
)
|
||||
|
||||
// Setup initializes a new wasmd.WasmApp. A Nop logger is set in WasmApp.
|
||||
func Setup(isCheckTx bool) *wasmd.WasmApp {
|
||||
db := dbm.NewMemDB()
|
||||
app := wasmd.NewWasmApp(log.NewNopLogger(), db, nil, true, 0)
|
||||
// app := wasmd.NewWasmApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, 0)
|
||||
if !isCheckTx {
|
||||
// init chain must be called to stop deliverState from being nil
|
||||
genesisState := wasmd.NewDefaultGenesisState()
|
||||
stateBytes, err := codec.MarshalJSONIndent(app.Codec(), genesisState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Initialize the chain
|
||||
app.InitChain(
|
||||
abci.RequestInitChain{
|
||||
Validators: []abci.ValidatorUpdate{},
|
||||
AppStateBytes: stateBytes,
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
// SetupWithGenesisAccounts initializes a new wasmd.WasmApp with the passed in
|
||||
// genesis accounts.
|
||||
func SetupWithGenesisAccounts(genAccs []authexported.GenesisAccount) *wasmd.WasmApp {
|
||||
db := dbm.NewMemDB()
|
||||
app := wasmd.NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, 0)
|
||||
// app := wasmd.NewWasmApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, 0)
|
||||
|
||||
// initialize the chain with the passed in genesis accounts
|
||||
genesisState := wasmd.NewDefaultGenesisState()
|
||||
|
||||
authGenesis := auth.NewGenesisState(auth.DefaultParams(), genAccs)
|
||||
genesisStateBz := app.Codec().MustMarshalJSON(authGenesis)
|
||||
genesisState[auth.ModuleName] = genesisStateBz
|
||||
|
||||
stateBytes, err := codec.MarshalJSONIndent(app.Codec(), genesisState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
fmt.Println(string(stateBytes))
|
||||
|
||||
// Initialize the chain
|
||||
app.InitChain(
|
||||
abci.RequestInitChain{
|
||||
Validators: []abci.ValidatorUpdate{},
|
||||
AppStateBytes: stateBytes,
|
||||
},
|
||||
)
|
||||
|
||||
app.Commit()
|
||||
app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, ChainID: SimAppChainID}})
|
||||
|
||||
return app
|
||||
}
|
||||
|
||||
// SignAndDeliver checks a generated signed transaction and simulates a
|
||||
// block commitment with the given transaction. A test assertion is made using
|
||||
// the parameter 'expPass' against the result. A corresponding result is
|
||||
// returned.
|
||||
func SignAndDeliver(
|
||||
t *testing.T, app *wasmd.WasmApp, msgs []sdk.Msg,
|
||||
accNums, seq []uint64, expPass bool, priv ...crypto.PrivKey,
|
||||
) sdk.Result {
|
||||
// ) (sdk.GasInfo, *sdk.Result, error) {
|
||||
|
||||
tx := GenTx(
|
||||
msgs,
|
||||
sdk.Coins{sdk.NewInt64Coin(sdk.DefaultBondDenom, 0)},
|
||||
DefaultGenTxGas,
|
||||
SimAppChainID,
|
||||
accNums,
|
||||
seq,
|
||||
priv...,
|
||||
)
|
||||
|
||||
// Simulate a sending a transaction and committing a block
|
||||
app.BeginBlock(abci.RequestBeginBlock{Header: abci.Header{Height: app.LastBlockHeight() + 1, ChainID: SimAppChainID}})
|
||||
|
||||
res := app.Deliver(tx)
|
||||
if expPass {
|
||||
require.True(t, res.IsOK(), res)
|
||||
} else {
|
||||
require.False(t, res.IsOK(), res)
|
||||
}
|
||||
|
||||
// gInfo, res, err := app.Deliver(tx)
|
||||
// if expPass {
|
||||
// require.NoError(t, err)
|
||||
// require.NotNil(t, res)
|
||||
// } else {
|
||||
// require.Error(t, err)
|
||||
// require.Nil(t, res)
|
||||
// }
|
||||
|
||||
app.EndBlock(abci.RequestEndBlock{})
|
||||
app.Commit()
|
||||
|
||||
return res
|
||||
}
|
||||
|
||||
// GenTx generates a signed mock transaction.
|
||||
func GenTx(msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, chainID string, accnums []uint64, seq []uint64, priv ...crypto.PrivKey) auth.StdTx {
|
||||
fee := auth.StdFee{
|
||||
Amount: feeAmt,
|
||||
Gas: gas,
|
||||
}
|
||||
|
||||
sigs := make([]auth.StdSignature, len(priv))
|
||||
|
||||
memo := "Test tx"
|
||||
for i, p := range priv {
|
||||
// use a empty chainID for ease of testing
|
||||
sig, err := p.Sign(auth.StdSignBytes(chainID, accnums[i], seq[i], fee, msgs, memo))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
sigs[i] = auth.StdSignature{
|
||||
PubKey: p.PubKey(),
|
||||
Signature: sig,
|
||||
}
|
||||
}
|
||||
|
||||
return auth.NewStdTx(msgs, fee, sigs, memo)
|
||||
}
|
||||
Reference in New Issue
Block a user