117 lines
3.9 KiB
Go
117 lines
3.9 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
|
|
"github.com/cosmos/cosmos-sdk/simapp"
|
|
|
|
"github.com/cosmos/cosmos-sdk/x/staking/types"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
abci "github.com/tendermint/tendermint/abci/types"
|
|
)
|
|
|
|
func TestHistoricalInfo(t *testing.T) {
|
|
_, app, ctx := createTestInput()
|
|
|
|
addrDels := simapp.AddTestAddrsIncremental(app, ctx, 50, sdk.NewInt(0))
|
|
addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
|
|
|
|
validators := make([]types.Validator, len(addrVals))
|
|
|
|
for i, valAddr := range addrVals {
|
|
validators[i] = types.NewValidator(valAddr, PKs[i], types.Description{})
|
|
}
|
|
|
|
hi := types.NewHistoricalInfo(ctx.BlockHeader(), validators)
|
|
|
|
app.StakingKeeper.SetHistoricalInfo(ctx, 2, hi)
|
|
|
|
recv, found := app.StakingKeeper.GetHistoricalInfo(ctx, 2)
|
|
require.True(t, found, "HistoricalInfo not found after set")
|
|
require.Equal(t, hi, recv, "HistoricalInfo not equal")
|
|
require.True(t, sort.IsSorted(types.Validators(recv.Valset)), "HistoricalInfo validators is not sorted")
|
|
|
|
app.StakingKeeper.DeleteHistoricalInfo(ctx, 2)
|
|
|
|
recv, found = app.StakingKeeper.GetHistoricalInfo(ctx, 2)
|
|
require.False(t, found, "HistoricalInfo found after delete")
|
|
require.Equal(t, types.HistoricalInfo{}, recv, "HistoricalInfo is not empty")
|
|
}
|
|
|
|
func TestTrackHistoricalInfo(t *testing.T) {
|
|
_, app, ctx := createTestInput()
|
|
|
|
addrDels := simapp.AddTestAddrsIncremental(app, ctx, 50, sdk.NewInt(0))
|
|
addrVals := simapp.ConvertAddrsToValAddrs(addrDels)
|
|
|
|
// set historical entries in params to 5
|
|
params := types.DefaultParams()
|
|
params.HistoricalEntries = 5
|
|
app.StakingKeeper.SetParams(ctx, params)
|
|
|
|
// set historical info at 5, 4 which should be pruned
|
|
// and check that it has been stored
|
|
h4 := abci.Header{
|
|
ChainID: "HelloChain",
|
|
Height: 4,
|
|
}
|
|
h5 := abci.Header{
|
|
ChainID: "HelloChain",
|
|
Height: 5,
|
|
}
|
|
valSet := []types.Validator{
|
|
types.NewValidator(addrVals[0], PKs[0], types.Description{}),
|
|
types.NewValidator(addrVals[1], PKs[1], types.Description{}),
|
|
}
|
|
hi4 := types.NewHistoricalInfo(h4, valSet)
|
|
hi5 := types.NewHistoricalInfo(h5, valSet)
|
|
app.StakingKeeper.SetHistoricalInfo(ctx, 4, hi4)
|
|
app.StakingKeeper.SetHistoricalInfo(ctx, 5, hi5)
|
|
recv, found := app.StakingKeeper.GetHistoricalInfo(ctx, 4)
|
|
require.True(t, found)
|
|
require.Equal(t, hi4, recv)
|
|
recv, found = app.StakingKeeper.GetHistoricalInfo(ctx, 5)
|
|
require.True(t, found)
|
|
require.Equal(t, hi5, recv)
|
|
|
|
// Set last validators in keeper
|
|
val1 := types.NewValidator(addrVals[2], PKs[2], types.Description{})
|
|
app.StakingKeeper.SetValidator(ctx, val1)
|
|
app.StakingKeeper.SetLastValidatorPower(ctx, val1.OperatorAddress, 10)
|
|
val2 := types.NewValidator(addrVals[3], PKs[3], types.Description{})
|
|
vals := []types.Validator{val1, val2}
|
|
sort.Sort(types.Validators(vals))
|
|
app.StakingKeeper.SetValidator(ctx, val2)
|
|
app.StakingKeeper.SetLastValidatorPower(ctx, val2.OperatorAddress, 8)
|
|
|
|
// Set Header for BeginBlock context
|
|
header := abci.Header{
|
|
ChainID: "HelloChain",
|
|
Height: 10,
|
|
}
|
|
ctx = ctx.WithBlockHeader(header)
|
|
|
|
app.StakingKeeper.TrackHistoricalInfo(ctx)
|
|
|
|
// Check HistoricalInfo at height 10 is persisted
|
|
expected := types.HistoricalInfo{
|
|
Header: header,
|
|
Valset: vals,
|
|
}
|
|
recv, found = app.StakingKeeper.GetHistoricalInfo(ctx, 10)
|
|
require.True(t, found, "GetHistoricalInfo failed after BeginBlock")
|
|
require.Equal(t, expected, recv, "GetHistoricalInfo returned eunexpected result")
|
|
|
|
// Check HistoricalInfo at height 5, 4 is pruned
|
|
recv, found = app.StakingKeeper.GetHistoricalInfo(ctx, 4)
|
|
require.False(t, found, "GetHistoricalInfo did not prune earlier height")
|
|
require.Equal(t, types.HistoricalInfo{}, recv, "GetHistoricalInfo at height 4 is not empty after prune")
|
|
recv, found = app.StakingKeeper.GetHistoricalInfo(ctx, 5)
|
|
require.False(t, found, "GetHistoricalInfo did not prune first prune height")
|
|
require.Equal(t, types.HistoricalInfo{}, recv, "GetHistoricalInfo at height 5 is not empty after prune")
|
|
}
|