'make test_sim', simulation folder

This commit is contained in:
Christopher Goes 2018-07-11 19:43:25 +02:00
parent 0572a2743e
commit 53138fb36f
2 changed files with 36 additions and 31 deletions

View File

@ -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

View File

@ -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),