cosmos-sdk/x/evidence/genesis_test.go

159 lines
3.3 KiB
Go

package evidence_test
import (
"fmt"
"testing"
"github.com/stretchr/testify/suite"
tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
"github.com/tendermint/tendermint/types/time"
"github.com/cosmos/cosmos-sdk/crypto/keys/ed25519"
"github.com/cosmos/cosmos-sdk/simapp"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/x/evidence"
"github.com/cosmos/cosmos-sdk/x/evidence/exported"
"github.com/cosmos/cosmos-sdk/x/evidence/keeper"
"github.com/cosmos/cosmos-sdk/x/evidence/types"
)
type GenesisTestSuite struct {
suite.Suite
ctx sdk.Context
keeper keeper.Keeper
}
func (suite *GenesisTestSuite) SetupTest() {
checkTx := false
app := simapp.Setup(suite.T(), checkTx)
suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1})
suite.keeper = app.EvidenceKeeper
}
func (suite *GenesisTestSuite) TestInitGenesis() {
var (
genesisState *types.GenesisState
testEvidence []exported.Evidence
pk = ed25519.GenPrivKey()
)
testCases := []struct {
msg string
malleate func()
expPass bool
posttests func()
}{
{
"valid",
func() {
testEvidence = make([]exported.Evidence, 100)
for i := 0; i < 100; i++ {
testEvidence[i] = &types.Equivocation{
Height: int64(i + 1),
Power: 100,
Time: time.Now().UTC(),
ConsensusAddress: pk.PubKey().Address().String(),
}
}
genesisState = types.NewGenesisState(testEvidence)
},
true,
func() {
for _, e := range testEvidence {
_, ok := suite.keeper.GetEvidence(suite.ctx, e.Hash())
suite.True(ok)
}
},
},
{
"invalid",
func() {
testEvidence = make([]exported.Evidence, 100)
for i := 0; i < 100; i++ {
testEvidence[i] = &types.Equivocation{
Power: 100,
Time: time.Now().UTC(),
ConsensusAddress: pk.PubKey().Address().String(),
}
}
genesisState = types.NewGenesisState(testEvidence)
},
false,
func() {
suite.Empty(suite.keeper.GetAllEvidence(suite.ctx))
},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
tc.malleate()
if tc.expPass {
suite.NotPanics(func() {
evidence.InitGenesis(suite.ctx, suite.keeper, genesisState)
})
} else {
suite.Panics(func() {
evidence.InitGenesis(suite.ctx, suite.keeper, genesisState)
})
}
tc.posttests()
})
}
}
func (suite *GenesisTestSuite) TestExportGenesis() {
pk := ed25519.GenPrivKey()
testCases := []struct {
msg string
malleate func()
expPass bool
posttests func()
}{
{
"success",
func() {
suite.keeper.SetEvidence(suite.ctx, &types.Equivocation{
Height: 1,
Power: 100,
Time: time.Now().UTC(),
ConsensusAddress: pk.PubKey().Address().String(),
})
},
true,
func() {},
},
}
for _, tc := range testCases {
suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
suite.SetupTest()
tc.malleate()
if tc.expPass {
suite.NotPanics(func() {
evidence.ExportGenesis(suite.ctx, suite.keeper)
})
} else {
suite.Panics(func() {
evidence.ExportGenesis(suite.ctx, suite.keeper)
})
}
tc.posttests()
})
}
}
func TestGenesisTestSuite(t *testing.T) {
suite.Run(t, new(GenesisTestSuite))
}