- package types
-
- import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "github.com/tendermint/tendermint/crypto/ed25519"
- "github.com/tendermint/tendermint/crypto/secp256k1"
- )
-
- func TestHeartbeatCopy(t *testing.T) {
- hb := &Heartbeat{ValidatorIndex: 1, Height: 10, Round: 1}
- hbCopy := hb.Copy()
- require.Equal(t, hbCopy, hb, "heartbeat copy should be the same")
- hbCopy.Round = hb.Round + 10
- require.NotEqual(t, hbCopy, hb, "heartbeat copy mutation should not change original")
-
- var nilHb *Heartbeat
- nilHbCopy := nilHb.Copy()
- require.Nil(t, nilHbCopy, "copy of nil should also return nil")
- }
-
- func TestHeartbeatString(t *testing.T) {
- var nilHb *Heartbeat
- require.Contains(t, nilHb.String(), "nil", "expecting a string and no panic")
-
- hb := &Heartbeat{ValidatorIndex: 1, Height: 11, Round: 2}
- require.Equal(t, "Heartbeat{1:000000000000 11/02 (0) /000000000000.../}", hb.String())
-
- var key ed25519.PrivKeyEd25519
- sig, err := key.Sign([]byte("Tendermint"))
- require.NoError(t, err)
- hb.Signature = sig
- require.Equal(t, "Heartbeat{1:000000000000 11/02 (0) /FF41E371B9BF.../}", hb.String())
- }
-
- func TestHeartbeatWriteSignBytes(t *testing.T) {
- chainID := "test_chain_id"
-
- {
- testHeartbeat := &Heartbeat{ValidatorIndex: 1, Height: 10, Round: 1}
- signBytes := testHeartbeat.SignBytes(chainID)
- expected, err := cdc.MarshalBinaryLengthPrefixed(CanonicalizeHeartbeat(chainID, testHeartbeat))
- require.NoError(t, err)
- require.Equal(t, expected, signBytes, "Got unexpected sign bytes for Heartbeat")
- }
-
- {
- testHeartbeat := &Heartbeat{}
- signBytes := testHeartbeat.SignBytes(chainID)
- expected, err := cdc.MarshalBinaryLengthPrefixed(CanonicalizeHeartbeat(chainID, testHeartbeat))
- require.NoError(t, err)
- require.Equal(t, expected, signBytes, "Got unexpected sign bytes for Heartbeat")
- }
-
- require.Panics(t, func() {
- var nilHb *Heartbeat
- signBytes := nilHb.SignBytes(chainID)
- require.Equal(t, string(signBytes), "null")
- })
- }
-
- func TestHeartbeatValidateBasic(t *testing.T) {
- testCases := []struct {
- testName string
- malleateHeartBeat func(*Heartbeat)
- expectErr bool
- }{
- {"Good HeartBeat", func(hb *Heartbeat) {}, false},
- {"Invalid address size", func(hb *Heartbeat) {
- hb.ValidatorAddress = nil
- }, true},
- {"Negative validator index", func(hb *Heartbeat) {
- hb.ValidatorIndex = -1
- }, true},
- {"Negative height", func(hb *Heartbeat) {
- hb.Height = -1
- }, true},
- {"Negative round", func(hb *Heartbeat) {
- hb.Round = -1
- }, true},
- {"Negative sequence", func(hb *Heartbeat) {
- hb.Sequence = -1
- }, true},
- {"Missing signature", func(hb *Heartbeat) {
- hb.Signature = nil
- }, true},
- {"Signature too big", func(hb *Heartbeat) {
- hb.Signature = make([]byte, MaxSignatureSize+1)
- }, true},
- }
- for _, tc := range testCases {
- t.Run(tc.testName, func(t *testing.T) {
- hb := &Heartbeat{
- ValidatorAddress: secp256k1.GenPrivKey().PubKey().Address(),
- Signature: make([]byte, 4),
- ValidatorIndex: 1, Height: 10, Round: 1}
-
- tc.malleateHeartBeat(hb)
- assert.Equal(t, tc.expectErr, hb.ValidateBasic() != nil, "Validate Basic had an unexpected result")
- })
- }
- }
|