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

     1  package types_test
     2  
     3  import (
     4  	"testing"
     5  	"time"
     6  
     7  	"github.com/stretchr/testify/require"
     8  	abci "github.com/tendermint/tendermint/abci/types"
     9  
    10  	sdk "github.com/Finschia/finschia-sdk/types"
    11  	"github.com/Finschia/finschia-sdk/x/evidence/types"
    12  )
    13  
    14  func TestEquivocation_Valid(t *testing.T) {
    15  	n, _ := time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
    16  	addr := sdk.ConsAddress("foo_________________")
    17  
    18  	e := types.Equivocation{
    19  		Height:           100,
    20  		Time:             n,
    21  		Power:            1000000,
    22  		ConsensusAddress: addr.String(),
    23  	}
    24  
    25  	require.Equal(t, e.GetTotalPower(), int64(0))
    26  	require.Equal(t, e.GetValidatorPower(), e.Power)
    27  	require.Equal(t, e.GetTime(), e.Time)
    28  	require.Equal(t, e.GetConsensusAddress().String(), e.ConsensusAddress)
    29  	require.Equal(t, e.GetHeight(), e.Height)
    30  	require.Equal(t, e.Type(), types.TypeEquivocation)
    31  	require.Equal(t, e.Route(), types.RouteEquivocation)
    32  	require.Equal(t, e.Hash().String(), "1EB689FD54073D3FCF1212FB87281324B9ED2B690C32454B403778451F5D817D")
    33  	require.Equal(t, e.String(), "height: 100\ntime: 2006-01-02T15:04:05Z\npower: 1000000\nconsensus_address: linkvalcons1vehk7h6lta047h6lta047h6lta047h6l94rfde\n")
    34  	require.NoError(t, e.ValidateBasic())
    35  }
    36  
    37  func TestEquivocationValidateBasic(t *testing.T) {
    38  	var zeroTime time.Time
    39  	addr := sdk.ConsAddress("foo_________________")
    40  
    41  	n, _ := time.Parse(time.RFC3339, "2006-01-02T15:04:05Z")
    42  	testCases := []struct {
    43  		name      string
    44  		e         types.Equivocation
    45  		expectErr bool
    46  	}{
    47  		{"valid", types.Equivocation{100, n, 1000000, addr.String()}, false},
    48  		{"invalid time", types.Equivocation{100, zeroTime, 1000000, addr.String()}, true},
    49  		{"invalid height", types.Equivocation{0, n, 1000000, addr.String()}, true},
    50  		{"invalid power", types.Equivocation{100, n, 0, addr.String()}, true},
    51  		{"invalid address", types.Equivocation{100, n, 1000000, ""}, true},
    52  	}
    53  
    54  	for _, tc := range testCases {
    55  		tc := tc
    56  		t.Run(tc.name, func(t *testing.T) {
    57  			require.Equal(t, tc.expectErr, tc.e.ValidateBasic() != nil)
    58  		})
    59  	}
    60  }
    61  
    62  func TestEvidenceAddressConversion(t *testing.T) {
    63  	sdk.GetConfig().SetBech32PrefixForConsensusNode("testcnclcons", "testcnclconspub")
    64  	tmEvidence := abci.Evidence{
    65  		Type: abci.EvidenceType_DUPLICATE_VOTE,
    66  		Validator: abci.Validator{
    67  			Address: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    68  			Power:   100,
    69  		},
    70  		Height:           1,
    71  		Time:             time.Now(),
    72  		TotalVotingPower: 100,
    73  	}
    74  	evidence := types.FromABCIEvidence(tmEvidence).(*types.Equivocation)
    75  	consAddr := evidence.GetConsensusAddress()
    76  	// Check the address is the same after conversion
    77  	require.Equal(t, tmEvidence.Validator.Address, consAddr.Bytes())
    78  	sdk.GetConfig().SetBech32PrefixForConsensusNode(sdk.Bech32PrefixConsAddr, sdk.Bech32PrefixConsPub)
    79  }