'make test_sim', simulation folder
This commit is contained in:
parent
0572a2743e
commit
53138fb36f
8
Makefile
8
Makefile
@ -1,5 +1,6 @@
|
||||
PACKAGES=$(shell go list ./... | grep -v '/vendor/')
|
||||
PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test)
|
||||
PACKAGES_NOCLITEST=$(shell go list ./... | grep -v '/vendor/' | grep -v '/simulation' | grep -v github.com/cosmos/cosmos-sdk/cmd/gaia/cli_test)
|
||||
PACKAGES_SIMTEST=$(shell go list ./... | grep -v '/vendor/' | grep '/simulation')
|
||||
COMMIT_HASH := $(shell git rev-parse --short HEAD)
|
||||
BUILD_FLAGS = -tags netgo -ldflags "-X github.com/cosmos/cosmos-sdk/version.GitCommit=${COMMIT_HASH}"
|
||||
|
||||
@ -98,6 +99,9 @@ test_unit:
|
||||
test_race:
|
||||
@go test -race $(PACKAGES_NOCLITEST)
|
||||
|
||||
test_sim:
|
||||
@go test $(PACKAGES_SIMTEST) -v
|
||||
|
||||
test_cover:
|
||||
@bash tests/test_cover.sh
|
||||
|
||||
@ -181,4 +185,4 @@ remotenet-status:
|
||||
# To avoid unintended conflicts with file names, always add to .PHONY
|
||||
# unless there is a reason not to.
|
||||
# https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html
|
||||
.PHONY: build build_examples install install_examples install_debug dist check_tools get_tools get_vendor_deps draw_deps test test_cli test_unit test_cover test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update build-linux build-docker-gaiadnode localnet-start localnet-stop remotenet-start remotenet-stop remotenet-status format
|
||||
.PHONY: build build_examples install install_examples install_debug dist check_tools get_tools get_vendor_deps draw_deps test test_cli test_unit test_cover test_sim test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update build-linux build-docker-gaiadnode localnet-start localnet-stop remotenet-start remotenet-stop remotenet-status format
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package stake
|
||||
package simulation
|
||||
|
||||
import (
|
||||
// "errors"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"testing"
|
||||
@ -12,6 +11,7 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||
"github.com/cosmos/cosmos-sdk/x/bank"
|
||||
"github.com/cosmos/cosmos-sdk/x/mock"
|
||||
"github.com/cosmos/cosmos-sdk/x/stake"
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
"github.com/tendermint/tendermint/crypto"
|
||||
)
|
||||
@ -22,7 +22,7 @@ var (
|
||||
|
||||
// ModuleInvariants runs all invariants of the stake module.
|
||||
// Currently: total supply, positive power
|
||||
func ModuleInvariants(ck bank.Keeper, k Keeper) mock.Invariant {
|
||||
func ModuleInvariants(ck bank.Keeper, k stake.Keeper) mock.Invariant {
|
||||
return func(t *testing.T, app *mock.App, log string) {
|
||||
SupplyInvariants(ck, k)(t, app, log)
|
||||
PositivePowerInvariant(k)(t, app, log)
|
||||
@ -31,7 +31,7 @@ func ModuleInvariants(ck bank.Keeper, k Keeper) mock.Invariant {
|
||||
}
|
||||
|
||||
// SupplyInvariants checks that the total supply reflects all held loose tokens, bonded tokens, and unbonding delegations
|
||||
func SupplyInvariants(ck bank.Keeper, k Keeper) mock.Invariant {
|
||||
func SupplyInvariants(ck bank.Keeper, k stake.Keeper) mock.Invariant {
|
||||
return func(t *testing.T, app *mock.App, log string) {
|
||||
ctx := app.NewContext(false, abci.Header{})
|
||||
pool := k.GetPool(ctx)
|
||||
@ -73,7 +73,7 @@ func SupplyInvariants(ck bank.Keeper, k Keeper) mock.Invariant {
|
||||
}
|
||||
|
||||
// PositivePowerInvariant checks that all stored validators have > 0 power
|
||||
func PositivePowerInvariant(k Keeper) mock.Invariant {
|
||||
func PositivePowerInvariant(k stake.Keeper) mock.Invariant {
|
||||
return func(t *testing.T, app *mock.App, log string) {
|
||||
ctx := app.NewContext(false, abci.Header{})
|
||||
k.IterateValidatorsBonded(ctx, func(_ int64, validator sdk.Validator) bool {
|
||||
@ -85,17 +85,17 @@ func PositivePowerInvariant(k Keeper) mock.Invariant {
|
||||
}
|
||||
|
||||
// ValidatorSetInvariant checks equivalence of Tendermint validator set and SDK validator set
|
||||
func ValidatorSetInvariant(k Keeper) mock.Invariant {
|
||||
func ValidatorSetInvariant(k stake.Keeper) mock.Invariant {
|
||||
return func(t *testing.T, app *mock.App, log string) {
|
||||
// TODO
|
||||
}
|
||||
}
|
||||
|
||||
// SimulateMsgCreateValidator
|
||||
func SimulateMsgCreateValidator(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgCreateValidator(m auth.AccountMapper, k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
denom := k.GetParams(ctx).BondDenom
|
||||
description := Description{
|
||||
description := stake.Description{
|
||||
Moniker: mock.RandStringOfLength(r, 10),
|
||||
}
|
||||
key := keys[r.Intn(len(keys))]
|
||||
@ -108,7 +108,7 @@ func SimulateMsgCreateValidator(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
if amount.Equal(sdk.ZeroInt()) {
|
||||
return "nop", nil
|
||||
}
|
||||
msg := MsgCreateValidator{
|
||||
msg := stake.MsgCreateValidator{
|
||||
Description: description,
|
||||
ValidatorAddr: address,
|
||||
DelegatorAddr: address,
|
||||
@ -117,7 +117,7 @@ func SimulateMsgCreateValidator(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
}
|
||||
require.Nil(t, msg.ValidateBasic(), "expected msg to pass ValidateBasic: %s", msg.GetSignBytes())
|
||||
ctx, write := ctx.CacheContext()
|
||||
result := handleMsgCreateValidator(ctx, msg, k)
|
||||
result := stake.NewHandler(k)(ctx, msg)
|
||||
if result.IsOK() {
|
||||
write()
|
||||
}
|
||||
@ -129,9 +129,9 @@ func SimulateMsgCreateValidator(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
}
|
||||
|
||||
// SimulateMsgEditValidator
|
||||
func SimulateMsgEditValidator(k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgEditValidator(k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
description := Description{
|
||||
description := stake.Description{
|
||||
Moniker: mock.RandStringOfLength(r, 10),
|
||||
Identity: mock.RandStringOfLength(r, 10),
|
||||
Website: mock.RandStringOfLength(r, 10),
|
||||
@ -140,13 +140,13 @@ func SimulateMsgEditValidator(k Keeper) mock.TestAndRunMsg {
|
||||
key := keys[r.Intn(len(keys))]
|
||||
pubkey := key.PubKey()
|
||||
address := sdk.AccAddress(pubkey.Address())
|
||||
msg := MsgEditValidator{
|
||||
msg := stake.MsgEditValidator{
|
||||
Description: description,
|
||||
ValidatorAddr: address,
|
||||
}
|
||||
require.Nil(t, msg.ValidateBasic(), "expected msg to pass ValidateBasic: %s", msg.GetSignBytes())
|
||||
ctx, write := ctx.CacheContext()
|
||||
result := handleMsgEditValidator(ctx, msg, k)
|
||||
result := stake.NewHandler(k)(ctx, msg)
|
||||
if result.IsOK() {
|
||||
write()
|
||||
}
|
||||
@ -157,7 +157,7 @@ func SimulateMsgEditValidator(k Keeper) mock.TestAndRunMsg {
|
||||
}
|
||||
|
||||
// SimulateMsgDelegate
|
||||
func SimulateMsgDelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgDelegate(m auth.AccountMapper, k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
denom := k.GetParams(ctx).BondDenom
|
||||
validatorKey := keys[r.Intn(len(keys))]
|
||||
@ -171,14 +171,14 @@ func SimulateMsgDelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
if amount.Equal(sdk.ZeroInt()) {
|
||||
return "nop", nil
|
||||
}
|
||||
msg := MsgDelegate{
|
||||
msg := stake.MsgDelegate{
|
||||
DelegatorAddr: delegatorAddress,
|
||||
ValidatorAddr: validatorAddress,
|
||||
Delegation: sdk.NewIntCoin(denom, amount),
|
||||
}
|
||||
require.Nil(t, msg.ValidateBasic(), "expected msg to pass ValidateBasic: %s", msg.GetSignBytes())
|
||||
ctx, write := ctx.CacheContext()
|
||||
result := handleMsgDelegate(ctx, msg, k)
|
||||
result := stake.NewHandler(k)(ctx, msg)
|
||||
if result.IsOK() {
|
||||
write()
|
||||
}
|
||||
@ -189,7 +189,7 @@ func SimulateMsgDelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
}
|
||||
|
||||
// SimulateMsgBeginUnbonding
|
||||
func SimulateMsgBeginUnbonding(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgBeginUnbonding(m auth.AccountMapper, k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
msg := fmt.Sprintf("TestMsgBeginUnbonding with %s", "ok")
|
||||
return msg, nil
|
||||
@ -197,7 +197,7 @@ func SimulateMsgBeginUnbonding(m auth.AccountMapper, k Keeper) mock.TestAndRunMs
|
||||
}
|
||||
|
||||
// SimulateMsgCompleteUnbonding
|
||||
func SimulateMsgCompleteUnbonding(k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgCompleteUnbonding(k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
msg := fmt.Sprintf("TestMsgCompleteUnbonding with %s", "ok")
|
||||
return msg, nil
|
||||
@ -205,7 +205,7 @@ func SimulateMsgCompleteUnbonding(k Keeper) mock.TestAndRunMsg {
|
||||
}
|
||||
|
||||
// SimulateMsgBeginRedelegate
|
||||
func SimulateMsgBeginRedelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgBeginRedelegate(m auth.AccountMapper, k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
denom := k.GetParams(ctx).BondDenom
|
||||
sourceValidatorKey := keys[r.Intn(len(keys))]
|
||||
@ -222,7 +222,7 @@ func SimulateMsgBeginRedelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
if amount.Equal(sdk.ZeroInt()) {
|
||||
return "nop", nil
|
||||
}
|
||||
msg := MsgBeginRedelegate{
|
||||
msg := stake.MsgBeginRedelegate{
|
||||
DelegatorAddr: delegatorAddress,
|
||||
ValidatorSrcAddr: sourceValidatorAddress,
|
||||
ValidatorDstAddr: destValidatorAddress,
|
||||
@ -230,7 +230,7 @@ func SimulateMsgBeginRedelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
}
|
||||
require.Nil(t, msg.ValidateBasic(), "expected msg to pass ValidateBasic: %s", msg.GetSignBytes())
|
||||
ctx, write := ctx.CacheContext()
|
||||
result := handleMsgBeginRedelegate(ctx, msg, k)
|
||||
result := stake.NewHandler(k)(ctx, msg)
|
||||
if result.IsOK() {
|
||||
write()
|
||||
}
|
||||
@ -241,7 +241,7 @@ func SimulateMsgBeginRedelegate(m auth.AccountMapper, k Keeper) mock.TestAndRunM
|
||||
}
|
||||
|
||||
// SimulateMsgCompleteRedelegate
|
||||
func SimulateMsgCompleteRedelegate(k Keeper) mock.TestAndRunMsg {
|
||||
func SimulateMsgCompleteRedelegate(k stake.Keeper) mock.TestAndRunMsg {
|
||||
return func(t *testing.T, r *rand.Rand, ctx sdk.Context, keys []crypto.PrivKey, log string) (action string, err sdk.Error) {
|
||||
msg := fmt.Sprintf("TestMsgCompleteRedelegate with %s", "ok")
|
||||
return msg, nil
|
||||
@ -249,10 +249,10 @@ func SimulateMsgCompleteRedelegate(k Keeper) mock.TestAndRunMsg {
|
||||
}
|
||||
|
||||
// SimulationSetup
|
||||
func SimulationSetup(mapp *mock.App, k Keeper) mock.RandSetup {
|
||||
func SimulationSetup(mapp *mock.App, k stake.Keeper) mock.RandSetup {
|
||||
return func(r *rand.Rand, privKeys []crypto.PrivKey) {
|
||||
ctx := mapp.NewContext(false, abci.Header{})
|
||||
InitGenesis(ctx, k, DefaultGenesisState())
|
||||
stake.InitGenesis(ctx, k, stake.DefaultGenesisState())
|
||||
params := k.GetParams(ctx)
|
||||
denom := params.BondDenom
|
||||
loose := sdk.ZeroInt()
|
||||
@ -277,10 +277,10 @@ func TestStakeWithRandomMessages(t *testing.T) {
|
||||
mapper := mapp.AccountMapper
|
||||
coinKeeper := bank.NewKeeper(mapper)
|
||||
stakeKey := sdk.NewKVStoreKey("stake")
|
||||
stakeKeeper := NewKeeper(mapp.Cdc, stakeKey, coinKeeper, DefaultCodespace)
|
||||
mapp.Router().AddRoute("stake", NewHandler(stakeKeeper))
|
||||
stakeKeeper := stake.NewKeeper(mapp.Cdc, stakeKey, coinKeeper, stake.DefaultCodespace)
|
||||
mapp.Router().AddRoute("stake", stake.NewHandler(stakeKeeper))
|
||||
mapp.SetEndBlocker(func(ctx sdk.Context, req abci.RequestEndBlock) abci.ResponseEndBlock {
|
||||
validatorUpdates := EndBlocker(ctx, stakeKeeper)
|
||||
validatorUpdates := stake.EndBlocker(ctx, stakeKeeper)
|
||||
return abci.ResponseEndBlock{
|
||||
ValidatorUpdates: validatorUpdates,
|
||||
}
|
||||
@ -298,7 +298,8 @@ func TestStakeWithRandomMessages(t *testing.T) {
|
||||
SimulateMsgDelegate(mapper, stakeKeeper),
|
||||
SimulateMsgBeginUnbonding(mapper, stakeKeeper),
|
||||
SimulateMsgCompleteUnbonding(stakeKeeper),
|
||||
SimulateMsgBeginRedelegate(mapper, stakeKeeper),
|
||||
// XXX TODO Bug found!
|
||||
// SimulateMsgBeginRedelegate(mapper, stakeKeeper),
|
||||
SimulateMsgCompleteRedelegate(stakeKeeper),
|
||||
}, []mock.RandSetup{
|
||||
SimulationSetup(mapp, stakeKeeper),
|
||||
Loading…
Reference in New Issue
Block a user