github.com/Finschia/finschia-sdk@v0.48.1/x/evidence/genesis_test.go (about)

     1  package evidence_test
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/Finschia/ostracon/types/time"
     8  	"github.com/stretchr/testify/suite"
     9  	tmproto "github.com/tendermint/tendermint/proto/tendermint/types"
    10  
    11  	"github.com/Finschia/finschia-sdk/crypto/keys/ed25519"
    12  	"github.com/Finschia/finschia-sdk/simapp"
    13  	sdk "github.com/Finschia/finschia-sdk/types"
    14  	"github.com/Finschia/finschia-sdk/x/evidence"
    15  	"github.com/Finschia/finschia-sdk/x/evidence/exported"
    16  	"github.com/Finschia/finschia-sdk/x/evidence/keeper"
    17  	"github.com/Finschia/finschia-sdk/x/evidence/types"
    18  )
    19  
    20  type GenesisTestSuite struct {
    21  	suite.Suite
    22  
    23  	ctx    sdk.Context
    24  	keeper keeper.Keeper
    25  }
    26  
    27  func (suite *GenesisTestSuite) SetupTest() {
    28  	checkTx := false
    29  	app := simapp.Setup(checkTx)
    30  
    31  	suite.ctx = app.BaseApp.NewContext(checkTx, tmproto.Header{Height: 1})
    32  	suite.keeper = app.EvidenceKeeper
    33  }
    34  
    35  func (suite *GenesisTestSuite) TestInitGenesis() {
    36  	var (
    37  		genesisState *types.GenesisState
    38  		testEvidence []exported.Evidence
    39  		pk           = ed25519.GenPrivKey()
    40  	)
    41  
    42  	testCases := []struct {
    43  		msg       string
    44  		malleate  func()
    45  		expPass   bool
    46  		posttests func()
    47  	}{
    48  		{
    49  			"valid",
    50  			func() {
    51  				testEvidence = make([]exported.Evidence, 100)
    52  				for i := 0; i < 100; i++ {
    53  					testEvidence[i] = &types.Equivocation{
    54  						Height:           int64(i + 1),
    55  						Power:            100,
    56  						Time:             time.Now().UTC(),
    57  						ConsensusAddress: pk.PubKey().Address().String(),
    58  					}
    59  				}
    60  				genesisState = types.NewGenesisState(testEvidence)
    61  			},
    62  			true,
    63  			func() {
    64  				for _, e := range testEvidence {
    65  					_, ok := suite.keeper.GetEvidence(suite.ctx, e.Hash())
    66  					suite.True(ok)
    67  				}
    68  			},
    69  		},
    70  		{
    71  			"invalid",
    72  			func() {
    73  				testEvidence = make([]exported.Evidence, 100)
    74  				for i := 0; i < 100; i++ {
    75  					testEvidence[i] = &types.Equivocation{
    76  						Power:            100,
    77  						Time:             time.Now().UTC(),
    78  						ConsensusAddress: pk.PubKey().Address().String(),
    79  					}
    80  				}
    81  				genesisState = types.NewGenesisState(testEvidence)
    82  			},
    83  			false,
    84  			func() {
    85  				suite.Empty(suite.keeper.GetAllEvidence(suite.ctx))
    86  			},
    87  		},
    88  	}
    89  
    90  	for _, tc := range testCases {
    91  		suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
    92  			suite.SetupTest()
    93  
    94  			tc.malleate()
    95  
    96  			if tc.expPass {
    97  				suite.NotPanics(func() {
    98  					evidence.InitGenesis(suite.ctx, suite.keeper, genesisState)
    99  				})
   100  			} else {
   101  				suite.Panics(func() {
   102  					evidence.InitGenesis(suite.ctx, suite.keeper, genesisState)
   103  				})
   104  			}
   105  
   106  			tc.posttests()
   107  		})
   108  	}
   109  }
   110  
   111  func (suite *GenesisTestSuite) TestExportGenesis() {
   112  	pk := ed25519.GenPrivKey()
   113  
   114  	testCases := []struct {
   115  		msg       string
   116  		malleate  func()
   117  		expPass   bool
   118  		posttests func()
   119  	}{
   120  		{
   121  			"success",
   122  			func() {
   123  				suite.keeper.SetEvidence(suite.ctx, &types.Equivocation{
   124  					Height:           1,
   125  					Power:            100,
   126  					Time:             time.Now().UTC(),
   127  					ConsensusAddress: pk.PubKey().Address().String(),
   128  				})
   129  			},
   130  			true,
   131  			func() {},
   132  		},
   133  	}
   134  
   135  	for _, tc := range testCases {
   136  		suite.Run(fmt.Sprintf("Case %s", tc.msg), func() {
   137  			suite.SetupTest()
   138  
   139  			tc.malleate()
   140  
   141  			if tc.expPass {
   142  				suite.NotPanics(func() {
   143  					evidence.ExportGenesis(suite.ctx, suite.keeper)
   144  				})
   145  			} else {
   146  				suite.Panics(func() {
   147  					evidence.ExportGenesis(suite.ctx, suite.keeper)
   148  				})
   149  			}
   150  
   151  			tc.posttests()
   152  		})
   153  	}
   154  }
   155  
   156  func TestGenesisTestSuite(t *testing.T) {
   157  	suite.Run(t, new(GenesisTestSuite))
   158  }