make TestQueryRedelegations pass with simapp

This commit is contained in:
Jonathan Gimeno 2020-02-20 17:58:17 +01:00
parent 06c144805d
commit 32a27afbd5
2 changed files with 75 additions and 353 deletions

View File

@ -17,291 +17,6 @@ var (
pk1, pk2 = PKs[0], PKs[1]
)
func TestQueryDelegation(t *testing.T) {
cdc := codec.New()
ctx, _, _, keeper, _ := CreateTestInput(t, false, 10000)
params := keeper.GetParams(ctx)
// Create Validators and Delegation
val1 := types.NewValidator(addrVal1, pk1, types.Description{})
keeper.SetValidator(ctx, val1)
keeper.SetValidatorByPowerIndex(ctx, val1)
val2 := types.NewValidator(addrVal2, pk2, types.Description{})
keeper.SetValidator(ctx, val2)
keeper.SetValidatorByPowerIndex(ctx, val2)
delTokens := sdk.TokensFromConsensusPower(20)
keeper.Delegate(ctx, addrAcc2, delTokens, sdk.Unbonded, val1, true)
// apply TM updates
keeper.ApplyAndReturnValidatorSetUpdates(ctx)
// Query Delegator bonded validators
queryParams := types.NewQueryDelegatorParams(addrAcc2)
bz, errRes := cdc.MarshalJSON(queryParams)
require.NoError(t, errRes)
query := abci.RequestQuery{
Path: "/custom/staking/delegatorValidators",
Data: bz,
}
delValidators := keeper.GetDelegatorValidators(ctx, addrAcc2, params.MaxValidators)
res, err := queryDelegatorValidators(ctx, query, keeper)
require.NoError(t, err)
var validatorsResp []types.Validator
errRes = cdc.UnmarshalJSON(res, &validatorsResp)
require.NoError(t, errRes)
require.Equal(t, len(delValidators), len(validatorsResp))
require.ElementsMatch(t, delValidators, validatorsResp)
// error unknown request
query.Data = bz[:len(bz)-1]
_, err = queryDelegatorValidators(ctx, query, keeper)
require.Error(t, err)
// Query bonded validator
queryBondParams := types.NewQueryBondsParams(addrAcc2, addrVal1)
bz, errRes = cdc.MarshalJSON(queryBondParams)
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "/custom/staking/delegatorValidator",
Data: bz,
}
res, err = queryDelegatorValidator(ctx, query, keeper)
require.NoError(t, err)
var validator types.Validator
errRes = cdc.UnmarshalJSON(res, &validator)
require.NoError(t, errRes)
require.Equal(t, delValidators[0], validator)
// error unknown request
query.Data = bz[:len(bz)-1]
_, err = queryDelegatorValidator(ctx, query, keeper)
require.Error(t, err)
// Query delegation
query = abci.RequestQuery{
Path: "/custom/staking/delegation",
Data: bz,
}
delegation, found := keeper.GetDelegation(ctx, addrAcc2, addrVal1)
require.True(t, found)
res, err = queryDelegation(ctx, query, keeper)
require.NoError(t, err)
var delegationRes types.DelegationResponse
errRes = cdc.UnmarshalJSON(res, &delegationRes)
require.NoError(t, errRes)
require.Equal(t, delegation.ValidatorAddress, delegationRes.ValidatorAddress)
require.Equal(t, delegation.DelegatorAddress, delegationRes.DelegatorAddress)
require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegationRes.Balance)
// Query Delegator Delegations
query = abci.RequestQuery{
Path: "/custom/staking/delegatorDelegations",
Data: bz,
}
res, err = queryDelegatorDelegations(ctx, query, keeper)
require.NoError(t, err)
var delegatorDelegations types.DelegationResponses
errRes = cdc.UnmarshalJSON(res, &delegatorDelegations)
require.NoError(t, errRes)
require.Len(t, delegatorDelegations, 1)
require.Equal(t, delegation.ValidatorAddress, delegatorDelegations[0].ValidatorAddress)
require.Equal(t, delegation.DelegatorAddress, delegatorDelegations[0].DelegatorAddress)
require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegatorDelegations[0].Balance)
// error unknown request
query.Data = bz[:len(bz)-1]
_, err = queryDelegation(ctx, query, keeper)
require.Error(t, err)
// Query validator delegations
bz, errRes = cdc.MarshalJSON(types.NewQueryValidatorParams(addrVal1))
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "custom/staking/validatorDelegations",
Data: bz,
}
res, err = queryValidatorDelegations(ctx, query, keeper)
require.NoError(t, err)
var delegationsRes types.DelegationResponses
errRes = cdc.UnmarshalJSON(res, &delegationsRes)
require.NoError(t, errRes)
require.Len(t, delegatorDelegations, 1)
require.Equal(t, delegation.ValidatorAddress, delegationsRes[0].ValidatorAddress)
require.Equal(t, delegation.DelegatorAddress, delegationsRes[0].DelegatorAddress)
require.Equal(t, sdk.NewCoin(sdk.DefaultBondDenom, delegation.Shares.TruncateInt()), delegationsRes[0].Balance)
// Query unbonging delegation
unbondingTokens := sdk.TokensFromConsensusPower(10)
_, err = keeper.Undelegate(ctx, addrAcc2, val1.OperatorAddress, unbondingTokens.ToDec())
require.NoError(t, err)
queryBondParams = types.NewQueryBondsParams(addrAcc2, addrVal1)
bz, errRes = cdc.MarshalJSON(queryBondParams)
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "/custom/staking/unbondingDelegation",
Data: bz,
}
unbond, found := keeper.GetUnbondingDelegation(ctx, addrAcc2, addrVal1)
require.True(t, found)
res, err = queryUnbondingDelegation(ctx, query, keeper)
require.NoError(t, err)
var unbondRes types.UnbondingDelegation
errRes = cdc.UnmarshalJSON(res, &unbondRes)
require.NoError(t, errRes)
require.Equal(t, unbond, unbondRes)
// error unknown request
query.Data = bz[:len(bz)-1]
_, err = queryUnbondingDelegation(ctx, query, keeper)
require.Error(t, err)
// Query Delegator Delegations
query = abci.RequestQuery{
Path: "/custom/staking/delegatorUnbondingDelegations",
Data: bz,
}
res, err = queryDelegatorUnbondingDelegations(ctx, query, keeper)
require.NoError(t, err)
var delegatorUbds []types.UnbondingDelegation
errRes = cdc.UnmarshalJSON(res, &delegatorUbds)
require.NoError(t, errRes)
require.Equal(t, unbond, delegatorUbds[0])
// error unknown request
query.Data = bz[:len(bz)-1]
_, err = queryDelegatorUnbondingDelegations(ctx, query, keeper)
require.Error(t, err)
// Query redelegation
redelegationTokens := sdk.TokensFromConsensusPower(10)
_, err = keeper.BeginRedelegation(ctx, addrAcc2, val1.OperatorAddress,
val2.OperatorAddress, redelegationTokens.ToDec())
require.NoError(t, err)
redel, found := keeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress)
require.True(t, found)
bz, errRes = cdc.MarshalJSON(types.NewQueryRedelegationParams(addrAcc2, val1.OperatorAddress, val2.OperatorAddress))
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "/custom/staking/redelegations",
Data: bz,
}
res, err = queryRedelegations(ctx, query, keeper)
require.NoError(t, err)
var redelRes types.RedelegationResponses
errRes = cdc.UnmarshalJSON(res, &redelRes)
require.NoError(t, errRes)
require.Len(t, redelRes, 1)
require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
require.Len(t, redel.Entries, len(redelRes[0].Entries))
}
func TestQueryRedelegations(t *testing.T) {
cdc := codec.New()
ctx, _, _, keeper, _ := CreateTestInput(t, false, 10000)
// Create Validators and Delegation
val1 := types.NewValidator(addrVal1, pk1, types.Description{})
val2 := types.NewValidator(addrVal2, pk2, types.Description{})
keeper.SetValidator(ctx, val1)
keeper.SetValidator(ctx, val2)
delAmount := sdk.TokensFromConsensusPower(100)
keeper.Delegate(ctx, addrAcc2, delAmount, sdk.Unbonded, val1, true)
_ = keeper.ApplyAndReturnValidatorSetUpdates(ctx)
rdAmount := sdk.TokensFromConsensusPower(20)
keeper.BeginRedelegation(ctx, addrAcc2, val1.GetOperator(), val2.GetOperator(), rdAmount.ToDec())
keeper.ApplyAndReturnValidatorSetUpdates(ctx)
redel, found := keeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress)
require.True(t, found)
// delegator redelegations
queryDelegatorParams := types.NewQueryDelegatorParams(addrAcc2)
bz, errRes := cdc.MarshalJSON(queryDelegatorParams)
require.NoError(t, errRes)
query := abci.RequestQuery{
Path: "/custom/staking/redelegations",
Data: bz,
}
res, err := queryRedelegations(ctx, query, keeper)
require.NoError(t, err)
var redelRes types.RedelegationResponses
errRes = cdc.UnmarshalJSON(res, &redelRes)
require.NoError(t, errRes)
require.Len(t, redelRes, 1)
require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
require.Len(t, redel.Entries, len(redelRes[0].Entries))
// validator redelegations
queryValidatorParams := types.NewQueryValidatorParams(val1.GetOperator())
bz, errRes = cdc.MarshalJSON(queryValidatorParams)
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "/custom/staking/redelegations",
Data: bz,
}
res, err = queryRedelegations(ctx, query, keeper)
require.NoError(t, err)
errRes = cdc.UnmarshalJSON(res, &redelRes)
require.NoError(t, errRes)
require.Len(t, redelRes, 1)
require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
require.Len(t, redel.Entries, len(redelRes[0].Entries))
}
func TestQueryUnbondingDelegation(t *testing.T) {
cdc := codec.New()
ctx, _, _, keeper, _ := CreateTestInput(t, false, 10000)

View File

@ -4,8 +4,6 @@ import (
"fmt"
"testing"
"github.com/cosmos/cosmos-sdk/x/distribution"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
@ -13,6 +11,7 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/distribution"
"github.com/cosmos/cosmos-sdk/x/staking"
"github.com/cosmos/cosmos-sdk/x/staking/types"
)
@ -224,11 +223,11 @@ func TestQueryDelegation(t *testing.T) {
app.StakingKeeper.SetValidator(ctx, val1)
app.StakingKeeper.SetValidatorByPowerIndex(ctx, val1)
app.DistrKeeper.SetValidatorHistoricalRewards(ctx, addrVal1, 18446744073709551615, distribution.ValidatorHistoricalRewards{ReferenceCount: 1})
app.DistrKeeper.SetValidatorHistoricalRewards(ctx, addrVal2, 18446744073709551615, distribution.ValidatorHistoricalRewards{ReferenceCount: 1})
val2 := types.NewValidator(addrVal2, pk2, types.Description{})
app.StakingKeeper.SetValidator(ctx, val2)
app.StakingKeeper.SetValidatorByPowerIndex(ctx, val2)
app.DistrKeeper.SetValidatorHistoricalRewards(ctx, addrVal2, 18446744073709551615, distribution.ValidatorHistoricalRewards{ReferenceCount: 1})
delTokens := sdk.TokensFromConsensusPower(20)
_, err := app.StakingKeeper.Delegate(ctx, addrAcc2, delTokens, sdk.Unbonded, val1, true)
@ -437,71 +436,79 @@ func TestQueryDelegation(t *testing.T) {
require.Len(t, redel.Entries, len(redelRes[0].Entries))
}
//func TestQueryRedelegations(t *testing.T) {
// cdc := codec.New()
// ctx, _, _, keeper, _ := CreateTestInput(t, false, 10000)
//
// // Create Validators and Delegation
// val1 := types.NewValidator(addrVal1, pk1, types.Description{})
// val2 := types.NewValidator(addrVal2, pk2, types.Description{})
// keeper.SetValidator(ctx, val1)
// keeper.SetValidator(ctx, val2)
//
// delAmount := sdk.TokensFromConsensusPower(100)
// keeper.Delegate(ctx, addrAcc2, delAmount, sdk.Unbonded, val1, true)
// _ = keeper.ApplyAndReturnValidatorSetUpdates(ctx)
//
// rdAmount := sdk.TokensFromConsensusPower(20)
// keeper.BeginRedelegation(ctx, addrAcc2, val1.GetOperator(), val2.GetOperator(), rdAmount.ToDec())
// keeper.ApplyAndReturnValidatorSetUpdates(ctx)
//
// redel, found := keeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress)
// require.True(t, found)
//
// // delegator redelegations
// queryDelegatorParams := types.NewQueryDelegatorParams(addrAcc2)
// bz, errRes := cdc.MarshalJSON(queryDelegatorParams)
// require.NoError(t, errRes)
//
// query := abci.RequestQuery{
// Path: "/custom/staking/redelegations",
// Data: bz,
// }
//
// res, err := queryRedelegations(ctx, query, keeper)
// require.NoError(t, err)
//
// var redelRes types.RedelegationResponses
// errRes = cdc.UnmarshalJSON(res, &redelRes)
// require.NoError(t, errRes)
// require.Len(t, redelRes, 1)
// require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
// require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
// require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
// require.Len(t, redel.Entries, len(redelRes[0].Entries))
//
// // validator redelegations
// queryValidatorParams := types.NewQueryValidatorParams(val1.GetOperator())
// bz, errRes = cdc.MarshalJSON(queryValidatorParams)
// require.NoError(t, errRes)
//
// query = abci.RequestQuery{
// Path: "/custom/staking/redelegations",
// Data: bz,
// }
//
// res, err = queryRedelegations(ctx, query, keeper)
// require.NoError(t, err)
//
// errRes = cdc.UnmarshalJSON(res, &redelRes)
// require.NoError(t, errRes)
// require.Len(t, redelRes, 1)
// require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
// require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
// require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
// require.Len(t, redel.Entries, len(redelRes[0].Entries))
//}
//
func TestQueryRedelegations(t *testing.T) {
cdc := codec.New()
app := simapp.Setup(false)
ctx := app.BaseApp.NewContext(false, abci.Header{})
querier := staking.NewQuerier(app.StakingKeeper)
addrs := simapp.AddTestAddrs(app, ctx, 2, sdk.TokensFromConsensusPower(10000))
addrAcc1, addrAcc2 := addrs[0], addrs[1]
addrVal1, addrVal2 := sdk.ValAddress(addrAcc1), sdk.ValAddress(addrAcc2)
// Create Validators and Delegation
val1 := types.NewValidator(addrVal1, PKs[0], types.Description{})
val2 := types.NewValidator(addrVal2, PKs[1], types.Description{})
app.StakingKeeper.SetValidator(ctx, val1)
app.StakingKeeper.SetValidator(ctx, val2)
app.DistrKeeper.SetValidatorHistoricalRewards(ctx, addrVal1, 18446744073709551615, distribution.ValidatorHistoricalRewards{ReferenceCount: 1})
app.DistrKeeper.SetValidatorHistoricalRewards(ctx, addrVal2, 18446744073709551615, distribution.ValidatorHistoricalRewards{ReferenceCount: 1})
delAmount := sdk.TokensFromConsensusPower(100)
app.StakingKeeper.Delegate(ctx, addrAcc2, delAmount, sdk.Unbonded, val1, true)
_ = app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
rdAmount := sdk.TokensFromConsensusPower(20)
app.StakingKeeper.BeginRedelegation(ctx, addrAcc2, val1.GetOperator(), val2.GetOperator(), rdAmount.ToDec())
app.StakingKeeper.ApplyAndReturnValidatorSetUpdates(ctx)
redel, found := app.StakingKeeper.GetRedelegation(ctx, addrAcc2, val1.OperatorAddress, val2.OperatorAddress)
require.True(t, found)
// delegator redelegations
queryDelegatorParams := types.NewQueryDelegatorParams(addrAcc2)
bz, errRes := cdc.MarshalJSON(queryDelegatorParams)
require.NoError(t, errRes)
query := abci.RequestQuery{
Path: "/custom/staking/redelegations",
Data: bz,
}
res, err := querier(ctx, []string{types.QueryRedelegations}, query)
require.NoError(t, err)
var redelRes types.RedelegationResponses
errRes = cdc.UnmarshalJSON(res, &redelRes)
require.NoError(t, errRes)
require.Len(t, redelRes, 1)
require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
require.Len(t, redel.Entries, len(redelRes[0].Entries))
// validator redelegations
queryValidatorParams := types.NewQueryValidatorParams(val1.GetOperator())
bz, errRes = cdc.MarshalJSON(queryValidatorParams)
require.NoError(t, errRes)
query = abci.RequestQuery{
Path: "/custom/staking/redelegations",
Data: bz,
}
res, err = querier(ctx, []string{types.QueryRedelegations}, query)
require.NoError(t, err)
errRes = cdc.UnmarshalJSON(res, &redelRes)
require.NoError(t, errRes)
require.Len(t, redelRes, 1)
require.Equal(t, redel.DelegatorAddress, redelRes[0].DelegatorAddress)
require.Equal(t, redel.ValidatorSrcAddress, redelRes[0].ValidatorSrcAddress)
require.Equal(t, redel.ValidatorDstAddress, redelRes[0].ValidatorDstAddress)
require.Len(t, redel.Entries, len(redelRes[0].Entries))
}
//func TestQueryUnbondingDelegation(t *testing.T) {
// cdc := codec.New()
// ctx, _, _, keeper, _ := CreateTestInput(t, false, 10000)