From 17948ccf0411f9ea685651d68a6f21cbfe6e56b2 Mon Sep 17 00:00:00 2001 From: rigelrozanski Date: Fri, 8 Jun 2018 11:28:07 -0700 Subject: [PATCH] auth-mock simulate block now commits, stake app_test cleanup --- baseapp/baseapp.go | 5 +- x/auth/mock/auth_app_test.go | 2 + x/auth/mock/simulate_block.go | 32 ++++++------- x/bank/app_test.go | 1 + x/stake/app_test.go | 89 ++++++++++++++++++----------------- 5 files changed, 70 insertions(+), 59 deletions(-) diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 4d32b92f5c..0664f18eba 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -237,7 +237,10 @@ func (app *BaseApp) NewContext(isCheckTx bool, header abci.Header) sdk.Context { if isCheckTx { return sdk.NewContext(app.checkState.ms, header, true, nil, app.Logger) } - return sdk.NewContext(app.deliverState.ms, header, false, nil, app.Logger) + aa := app.deliverState + a := aa.ms + b := app.Logger + return sdk.NewContext(a, header, false, nil, b) } type state struct { diff --git a/x/auth/mock/auth_app_test.go b/x/auth/mock/auth_app_test.go index 641c8a3665..716037d600 100644 --- a/x/auth/mock/auth_app_test.go +++ b/x/auth/mock/auth_app_test.go @@ -72,6 +72,7 @@ func TestMsgChangePubKey(t *testing.T) { NewPubKey: priv2.PubKey(), } + mapp.BeginBlock(abci.RequestBeginBlock{}) ctxDeliver := mapp.BaseApp.NewContext(false, abci.Header{}) acc2 := mapp.AccountMapper.GetAccount(ctxDeliver, addr1) @@ -82,6 +83,7 @@ func TestMsgChangePubKey(t *testing.T) { assert.True(t, priv2.PubKey().Equals(acc2.GetPubKey())) // signing a SendMsg with the old privKey should be an auth error + mapp.BeginBlock(abci.RequestBeginBlock{}) tx := GenTx(sendMsg1, []int64{2}, priv1) res := mapp.Deliver(tx) assert.Equal(t, sdk.ToABCICode(sdk.CodespaceRoot, sdk.CodeUnauthorized), res.Code, res.Log) diff --git a/x/auth/mock/simulate_block.go b/x/auth/mock/simulate_block.go index cf0c303a3f..f8be0c65a3 100644 --- a/x/auth/mock/simulate_block.go +++ b/x/auth/mock/simulate_block.go @@ -27,8 +27,8 @@ func SetGenesis(app *App, accs []auth.Account) { // check an account balance func CheckBalance(t *testing.T, app *App, addr sdk.Address, exp sdk.Coins) { - ctxDeliver := app.BaseApp.NewContext(false, abci.Header{}) - res := app.AccountMapper.GetAccount(ctxDeliver, addr) + ctxCheck := app.BaseApp.NewContext(true, abci.Header{}) + res := app.AccountMapper.GetAccount(ctxCheck, addr) assert.Equal(t, exp, res.GetCoins()) } @@ -77,25 +77,25 @@ func SignCheckDeliver(t *testing.T, app *baseapp.BaseApp, msg sdk.Msg, seq []int app.EndBlock(abci.RequestEndBlock{}) // XXX fix code or add explaination as to why using commit breaks a bunch of these tests - //app.Commit() + app.Commit() } // XXX the only reason we are using Sign Deliver here is because the tests // break on check tx the second time you use SignCheckDeliver in a test because // the checktx state has not been updated likely because commit is not being // called! -func SignDeliver(t *testing.T, app *baseapp.BaseApp, msg sdk.Msg, seq []int64, expPass bool, priv ...crypto.PrivKeyEd25519) { +//func SignDeliver(t *testing.T, app *baseapp.BaseApp, msg sdk.Msg, seq []int64, expPass bool, priv ...crypto.PrivKeyEd25519) { - // Sign the tx - tx := GenTx(msg, seq, priv...) +//// Sign the tx +//tx := GenTx(msg, seq, priv...) - // Simulate a Block - app.BeginBlock(abci.RequestBeginBlock{}) - res := app.Deliver(tx) - if expPass { - require.Equal(t, sdk.ABCICodeOK, res.Code, res.Log) - } else { - require.NotEqual(t, sdk.ABCICodeOK, res.Code, res.Log) - } - app.EndBlock(abci.RequestEndBlock{}) -} +//// Simulate a Block +//app.BeginBlock(abci.RequestBeginBlock{}) +//res := app.Deliver(tx) +//if expPass { +//require.Equal(t, sdk.ABCICodeOK, res.Code, res.Log) +//} else { +//require.NotEqual(t, sdk.ABCICodeOK, res.Code, res.Log) +//} +//app.EndBlock(abci.RequestEndBlock{}) +//} diff --git a/x/bank/app_test.go b/x/bank/app_test.go index 507f9e3f89..21d7d03a03 100644 --- a/x/bank/app_test.go +++ b/x/bank/app_test.go @@ -117,6 +117,7 @@ func TestMsgSendWithAccounts(t *testing.T) { mock.SignCheckDeliver(t, mapp.BaseApp, sendMsg1, []int64{0}, false, priv1) // bumping the txnonce number without resigning should be an auth error + mapp.BeginBlock(abci.RequestBeginBlock{}) tx := mock.GenTx(sendMsg1, []int64{0}, priv1) tx.Signatures[0].Sequence = 1 res := mapp.Deliver(tx) diff --git a/x/stake/app_test.go b/x/stake/app_test.go index 4e3d1f422e..8e20633a02 100644 --- a/x/stake/app_test.go +++ b/x/stake/app_test.go @@ -7,6 +7,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/mock" "github.com/cosmos/cosmos-sdk/x/bank" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" abci "github.com/tendermint/abci/types" @@ -65,6 +66,30 @@ func getInitChainer(mapp *mock.App, keeper Keeper) sdk.InitChainer { } } +//__________________________________________________________________________________________ + +func checkValidator(t *testing.T, mapp *mock.App, keeper Keeper, + addr sdk.Address, expFound bool) Validator { + + ctxCheck := mapp.BaseApp.NewContext(true, abci.Header{}) + validator, found := keeper.GetValidator(ctxCheck, addr1) + assert.Equal(t, expFound, found) + return validator +} + +func checkDelegation(t *testing.T, mapp *mock.App, keeper Keeper, delegatorAddr, + validatorAddr sdk.Address, expFound bool, expShares sdk.Rat) { + + ctxCheck := mapp.BaseApp.NewContext(true, abci.Header{}) + delegation, found := keeper.GetDelegation(ctxCheck, delegatorAddr, validatorAddr) + if expFound { + assert.True(t, found) + assert.True(sdk.RatEq(t, expShares, delegation.Shares)) + return + } + assert.False(t, found) +} + func TestStakeMsgs(t *testing.T) { mapp, keeper := getMockApp(t) @@ -82,14 +107,10 @@ func TestStakeMsgs(t *testing.T) { accs := []auth.Account{acc1, acc2} mock.SetGenesis(mapp, accs) + mock.CheckBalance(t, mapp, addr1, sdk.Coins{genCoin}) + mock.CheckBalance(t, mapp, addr2, sdk.Coins{genCoin}) - // A checkTx context (true) - ctxCheck := mapp.BaseApp.NewContext(true, abci.Header{}) - res1 := mapp.AccountMapper.GetAccount(ctxCheck, addr1) - res2 := mapp.AccountMapper.GetAccount(ctxCheck, addr2) - require.Equal(t, acc1, res1) - require.Equal(t, acc2, res2) - + //////////////////// // Create Validator description := NewDescription("foo_moniker", "", "", "") @@ -97,56 +118,40 @@ func TestStakeMsgs(t *testing.T) { addr1, priv1.PubKey(), bondCoin, description, ) mock.SignCheckDeliver(t, mapp.BaseApp, createValidatorMsg, []int64{0}, true, priv1) + mock.CheckBalance(t, mapp, addr1, sdk.Coins{genCoin.Minus(bondCoin)}) + mapp.BeginBlock(abci.RequestBeginBlock{}) - ctxDeliver := mapp.BaseApp.NewContext(false, abci.Header{}) - res1 = mapp.AccountMapper.GetAccount(ctxDeliver, addr1) - require.Equal(t, sdk.Coins{genCoin.Minus(bondCoin)}, res1.GetCoins()) - validator, found := keeper.GetValidator(ctxDeliver, addr1) - require.True(t, found) + validator := checkValidator(t, mapp, keeper, addr1, true) require.Equal(t, addr1, validator.Owner) require.Equal(t, sdk.Bonded, validator.Status()) require.True(sdk.RatEq(t, sdk.NewRat(10), validator.PoolShares.Bonded())) // check the bond that should have been created as well - bond, found := keeper.GetDelegation(ctxDeliver, addr1, addr1) - require.True(sdk.RatEq(t, sdk.NewRat(10), bond.Shares)) + checkDelegation(t, mapp, keeper, addr1, addr1, true, sdk.NewRat(10)) + //////////////////// // Edit Validator description = NewDescription("bar_moniker", "", "", "") - editValidatorMsg := NewMsgEditValidator( - addr1, description, - ) - mock.SignDeliver(t, mapp.BaseApp, editValidatorMsg, []int64{1}, true, priv1) - - validator, found = keeper.GetValidator(ctxDeliver, addr1) - require.True(t, found) + editValidatorMsg := NewMsgEditValidator(addr1, description) + mock.SignCheckDeliver(t, mapp.BaseApp, editValidatorMsg, []int64{1}, true, priv1) + validator = checkValidator(t, mapp, keeper, addr1, true) require.Equal(t, description, validator.Description) + //////////////////// // Delegate - delegateMsg := NewMsgDelegate( - addr2, addr1, bondCoin, - ) - mock.SignDeliver(t, mapp.BaseApp, delegateMsg, []int64{0}, true, priv2) - - res2 = mapp.AccountMapper.GetAccount(ctxDeliver, addr2) - require.Equal(t, sdk.Coins{genCoin.Minus(bondCoin)}, res2.GetCoins()) - bond, found = keeper.GetDelegation(ctxDeliver, addr2, addr1) - require.True(t, found) - require.Equal(t, addr2, bond.DelegatorAddr) - require.Equal(t, addr1, bond.ValidatorAddr) - require.True(sdk.RatEq(t, sdk.NewRat(10), bond.Shares)) + mock.CheckBalance(t, mapp, addr2, sdk.Coins{genCoin}) + delegateMsg := NewMsgDelegate(addr2, addr1, bondCoin) + mock.SignCheckDeliver(t, mapp.BaseApp, delegateMsg, []int64{0}, true, priv2) + mock.CheckBalance(t, mapp, addr2, sdk.Coins{genCoin.Minus(bondCoin)}) + checkDelegation(t, mapp, keeper, addr2, addr1, true, sdk.NewRat(10)) + //////////////////// // Unbond - unbondMsg := NewMsgUnbond( - addr2, addr1, "MAX", - ) - mock.SignDeliver(t, mapp.BaseApp, unbondMsg, []int64{1}, true, priv2) - - res2 = mapp.AccountMapper.GetAccount(ctxDeliver, addr2) - require.Equal(t, sdk.Coins{genCoin}, res2.GetCoins()) - _, found = keeper.GetDelegation(ctxDeliver, addr2, addr1) - require.False(t, found) + unbondMsg := NewMsgUnbond(addr2, addr1, "MAX") + mock.SignCheckDeliver(t, mapp.BaseApp, unbondMsg, []int64{1}, true, priv2) + mock.CheckBalance(t, mapp, addr2, sdk.Coins{genCoin}) + checkDelegation(t, mapp, keeper, addr2, addr1, false, sdk.Rat{}) }