github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/evidence/handler_test.go (about)

     1  package evidence_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/simapp"
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/evidence"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/evidence/internal/types"
    10  
    11  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
    12  	"github.com/fibonacci-chain/fbc/libs/tendermint/crypto/ed25519"
    13  	"github.com/stretchr/testify/suite"
    14  )
    15  
    16  type HandlerTestSuite struct {
    17  	suite.Suite
    18  
    19  	ctx     sdk.Context
    20  	handler sdk.Handler
    21  	keeper  evidence.Keeper
    22  }
    23  
    24  func (suite *HandlerTestSuite) SetupTest() {
    25  	checkTx := false
    26  	app := simapp.Setup(checkTx)
    27  
    28  	// get the app's codec and register custom testing types
    29  	cdc := app.Codec()
    30  	cdc.RegisterConcrete(types.TestEquivocationEvidence{}, "test/TestEquivocationEvidence", nil)
    31  
    32  	// recreate keeper in order to use custom testing types
    33  	evidenceKeeper := evidence.NewKeeper(
    34  		cdc, app.GetKey(evidence.StoreKey), app.GetSubspace(evidence.ModuleName), app.StakingKeeper, app.SlashingKeeper,
    35  	)
    36  	router := evidence.NewRouter()
    37  	router = router.AddRoute(types.TestEvidenceRouteEquivocation, types.TestEquivocationHandler(*evidenceKeeper))
    38  	evidenceKeeper.SetRouter(router)
    39  
    40  	suite.ctx = app.BaseApp.NewContext(checkTx, abci.Header{Height: 1})
    41  	suite.handler = evidence.NewHandler(*evidenceKeeper)
    42  	suite.keeper = *evidenceKeeper
    43  }
    44  
    45  func (suite *HandlerTestSuite) TestMsgSubmitEvidence_Valid() {
    46  	pk := ed25519.GenPrivKey()
    47  	sv := types.TestVote{
    48  		ValidatorAddress: pk.PubKey().Address(),
    49  		Height:           11,
    50  		Round:            0,
    51  	}
    52  
    53  	sig, err := pk.Sign(sv.SignBytes(suite.ctx.ChainID()))
    54  	suite.NoError(err)
    55  	sv.Signature = sig
    56  
    57  	s := sdk.AccAddress("test")
    58  	e := types.TestEquivocationEvidence{
    59  		Power:      100,
    60  		TotalPower: 100000,
    61  		PubKey:     pk.PubKey(),
    62  		VoteA:      sv,
    63  		VoteB:      sv,
    64  	}
    65  
    66  	ctx := suite.ctx.WithIsCheckTx(false)
    67  	msg := evidence.NewMsgSubmitEvidence(e, s)
    68  	res, err := suite.handler(ctx, msg)
    69  	suite.NoError(err)
    70  	suite.NotNil(res)
    71  	suite.Equal(e.Hash().Bytes(), res.Data)
    72  }
    73  
    74  func (suite *HandlerTestSuite) TestMsgSubmitEvidence_Invalid() {
    75  	pk := ed25519.GenPrivKey()
    76  	sv := types.TestVote{
    77  		ValidatorAddress: pk.PubKey().Address(),
    78  		Height:           11,
    79  		Round:            0,
    80  	}
    81  
    82  	sig, err := pk.Sign(sv.SignBytes(suite.ctx.ChainID()))
    83  	suite.NoError(err)
    84  	sv.Signature = sig
    85  
    86  	s := sdk.AccAddress("test")
    87  	e := types.TestEquivocationEvidence{
    88  		Power:      100,
    89  		TotalPower: 100000,
    90  		PubKey:     pk.PubKey(),
    91  		VoteA:      sv,
    92  		VoteB:      types.TestVote{Height: 10, Round: 1},
    93  	}
    94  
    95  	ctx := suite.ctx.WithIsCheckTx(false)
    96  	msg := evidence.NewMsgSubmitEvidence(e, s)
    97  	res, err := suite.handler(ctx, msg)
    98  	suite.Error(err)
    99  	suite.Nil(res)
   100  }
   101  
   102  func TestHandlerTestSuite(t *testing.T) {
   103  	suite.Run(t, new(HandlerTestSuite))
   104  }