cosmos-sdk/x/staking/types/historical_info_test.go

68 lines
1.7 KiB
Go

package types
import (
"math/rand"
"sort"
"testing"
"github.com/stretchr/testify/require"
abci "github.com/tendermint/tendermint/abci/types"
)
var (
validators = []Validator{
NewValidator(valAddr1, pk1, Description{}),
NewValidator(valAddr2, pk2, Description{}),
NewValidator(valAddr3, pk3, Description{}),
}
header = abci.Header{
ChainID: "hello",
Height: 5,
}
)
func TestHistoricalInfo(t *testing.T) {
hi := NewHistoricalInfo(header, validators)
require.True(t, sort.IsSorted(Validators(hi.Valset)), "Validators are not sorted")
var value []byte
require.NotPanics(t, func() {
value = MustMarshalHistoricalInfo(ModuleCdc, hi)
})
require.NotNil(t, value, "Marshalled HistoricalInfo is nil")
recv, err := UnmarshalHistoricalInfo(ModuleCdc, value)
require.Nil(t, err, "Unmarshalling HistoricalInfo failed")
require.Equal(t, hi, recv, "Unmarshalled HistoricalInfo is different from original")
require.True(t, sort.IsSorted(Validators(hi.Valset)), "Validators are not sorted")
}
func TestValidateBasic(t *testing.T) {
hi := HistoricalInfo{
Header: header,
}
err := ValidateBasic(hi)
require.Error(t, err, "ValidateBasic passed on nil ValSet")
// Ensure validators are not sorted
for sort.IsSorted(Validators(validators)) {
rand.Shuffle(len(validators), func(i, j int) {
it := validators[i]
validators[i] = validators[j]
validators[j] = it
})
}
hi = HistoricalInfo{
Header: header,
Valset: validators,
}
err = ValidateBasic(hi)
require.Error(t, err, "ValidateBasic passed on unsorted ValSet")
hi = NewHistoricalInfo(header, validators)
err = ValidateBasic(hi)
require.NoError(t, err, "ValidateBasic failed on valid HistoricalInfo")
}