mirror of
https://github.com/fluencelabs/tendermint
synced 2025-04-25 14:52:17 +00:00
ValidateBasic tests (#3879)
* Add test for bcBlockRequestMessage ValidateBasic method * Add test for bcNoBlockResponseMessage ValidateBasic method * Add test for bcStatusRequestMessage ValidateBasic method * Add test for bcStatusResponseMessage ValidateBasic method * Add blockchain v1 reactor ValidateBasic tests * Add test for NewRoundStepMessage ValidateBasic method * Add test for NewValidBlockMessage ValidateBasic method * Test BlockParts Size * Import cmn package * Add test for ProposalPOLMessage ValidateBasic method * Add test for BlockPartMessage ValidateBasic method * Add test for HasVoteMessage ValidateBasic method * Add test for VoteSetMaj23Message ValidateBasic method * Add test for VoteSetBitsMessage ValidateBasic method * Fix linter errors * Improve readability * Add test for BaseConfig ValidateBasic method * Add test for RPCConfig ValidateBasic method * Add test for P2PConfig ValidateBasic method * Add test for MempoolConfig ValidateBasic method * Add test for FastSyncConfig ValidateBasic method * Add test for ConsensusConfig ValidateBasic method * Add test for InstrumentationConfig ValidateBasic method * Add test for BlockID ValidateBasic method * Add test for SignedHeader ValidateBasic method * Add test for MockGoodEvidence and MockBadEvidence ValidateBasic methods * Remove debug logging Co-Authored-By: Marko <marbar3778@yahoo.com> * Update MempoolConfig field * Test a single struct field at a time, for maintainability Fixes #2740
This commit is contained in:
parent
8a282a5fee
commit
c962567814
@ -246,6 +246,82 @@ func TestBadBlockStopsPeer(t *testing.T) {
|
|||||||
assert.True(t, lastReactorPair.reactor.Switch.Peers().Size() < len(reactorPairs)-1)
|
assert.True(t, lastReactorPair.reactor.Switch.Peers().Size() < len(reactorPairs)-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBcBlockRequestMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
requestHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Request Message", 0, false},
|
||||||
|
{"Valid Request Message", 1, false},
|
||||||
|
{"Invalid Request Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
request := bcBlockRequestMessage{Height: tc.requestHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, request.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcNoBlockResponseMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
nonResponseHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Non-Response Message", 0, false},
|
||||||
|
{"Valid Non-Response Message", 1, false},
|
||||||
|
{"Invalid Non-Response Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
nonResponse := bcNoBlockResponseMessage{Height: tc.nonResponseHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, nonResponse.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcStatusRequestMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
requestHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Request Message", 0, false},
|
||||||
|
{"Valid Request Message", 1, false},
|
||||||
|
{"Invalid Request Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
request := bcStatusRequestMessage{Height: tc.requestHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, request.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcStatusResponseMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
responseHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Response Message", 0, false},
|
||||||
|
{"Valid Response Message", 1, false},
|
||||||
|
{"Invalid Response Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
response := bcStatusResponseMessage{Height: tc.responseHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, response.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
// utility funcs
|
// utility funcs
|
||||||
|
|
||||||
|
@ -317,6 +317,82 @@ outerFor:
|
|||||||
assert.True(t, lastReactorPair.bcR.Switch.Peers().Size() < len(reactorPairs)-1)
|
assert.True(t, lastReactorPair.bcR.Switch.Peers().Size() < len(reactorPairs)-1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBcBlockRequestMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
requestHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Request Message", 0, false},
|
||||||
|
{"Valid Request Message", 1, false},
|
||||||
|
{"Invalid Request Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
request := bcBlockRequestMessage{Height: tc.requestHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, request.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcNoBlockResponseMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
nonResponseHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Non-Response Message", 0, false},
|
||||||
|
{"Valid Non-Response Message", 1, false},
|
||||||
|
{"Invalid Non-Response Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
nonResponse := bcNoBlockResponseMessage{Height: tc.nonResponseHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, nonResponse.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcStatusRequestMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
requestHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Request Message", 0, false},
|
||||||
|
{"Valid Request Message", 1, false},
|
||||||
|
{"Invalid Request Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
request := bcStatusRequestMessage{Height: tc.requestHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, request.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBcStatusResponseMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
responseHeight int64
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Response Message", 0, false},
|
||||||
|
{"Valid Response Message", 1, false},
|
||||||
|
{"Invalid Response Message", -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
response := bcStatusResponseMessage{Height: tc.responseHeight}
|
||||||
|
assert.Equal(t, tc.expectErr, response.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------
|
//----------------------------------------------
|
||||||
// utility funcs
|
// utility funcs
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package config
|
package config
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -52,3 +53,116 @@ func TestTLSConfiguration(t *testing.T) {
|
|||||||
cfg.RPC.TLSKeyFile = "/abs/path/to/file.key"
|
cfg.RPC.TLSKeyFile = "/abs/path/to/file.key"
|
||||||
assert.Equal("/abs/path/to/file.key", cfg.RPC.KeyFile())
|
assert.Equal("/abs/path/to/file.key", cfg.RPC.KeyFile())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestBaseConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestBaseConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
// tamper with log format
|
||||||
|
cfg.LogFormat = "invalid"
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRPCConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestRPCConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
fieldsToTest := []string{
|
||||||
|
"GRPCMaxOpenConnections",
|
||||||
|
"MaxOpenConnections",
|
||||||
|
"MaxSubscriptionClients",
|
||||||
|
"MaxSubscriptionsPerClient",
|
||||||
|
"TimeoutBroadcastTxCommit",
|
||||||
|
"MaxBodyBytes",
|
||||||
|
"MaxHeaderBytes",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, fieldName := range fieldsToTest {
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestP2PConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestP2PConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
fieldsToTest := []string{
|
||||||
|
"MaxNumInboundPeers",
|
||||||
|
"MaxNumOutboundPeers",
|
||||||
|
"FlushThrottleTimeout",
|
||||||
|
"MaxPacketMsgPayloadSize",
|
||||||
|
"SendRate",
|
||||||
|
"RecvRate",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, fieldName := range fieldsToTest {
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMempoolConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestMempoolConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
fieldsToTest := []string{
|
||||||
|
"Size",
|
||||||
|
"MaxTxsBytes",
|
||||||
|
"CacheSize",
|
||||||
|
"MaxTxBytes",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, fieldName := range fieldsToTest {
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFastSyncConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestFastSyncConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
// tamper with version
|
||||||
|
cfg.Version = "v1"
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
cfg.Version = "invalid"
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestConsensusConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestConsensusConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
fieldsToTest := []string{
|
||||||
|
"TimeoutPropose",
|
||||||
|
"TimeoutProposeDelta",
|
||||||
|
"TimeoutPrevote",
|
||||||
|
"TimeoutPrevoteDelta",
|
||||||
|
"TimeoutPrecommit",
|
||||||
|
"TimeoutPrecommitDelta",
|
||||||
|
"TimeoutCommit",
|
||||||
|
"CreateEmptyBlocksInterval",
|
||||||
|
"PeerGossipSleepDuration",
|
||||||
|
"PeerQueryMaj23SleepDuration",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, fieldName := range fieldsToTest {
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(-1)
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
reflect.ValueOf(cfg).Elem().FieldByName(fieldName).SetInt(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInstrumentationConfigValidateBasic(t *testing.T) {
|
||||||
|
cfg := TestInstrumentationConfig()
|
||||||
|
assert.NoError(t, cfg.ValidateBasic())
|
||||||
|
|
||||||
|
// tamper with maximum open connections
|
||||||
|
cfg.MaxOpenConnections = -1
|
||||||
|
assert.Error(t, cfg.ValidateBasic())
|
||||||
|
}
|
||||||
|
@ -18,6 +18,8 @@ import (
|
|||||||
"github.com/tendermint/tendermint/abci/example/kvstore"
|
"github.com/tendermint/tendermint/abci/example/kvstore"
|
||||||
abci "github.com/tendermint/tendermint/abci/types"
|
abci "github.com/tendermint/tendermint/abci/types"
|
||||||
cfg "github.com/tendermint/tendermint/config"
|
cfg "github.com/tendermint/tendermint/config"
|
||||||
|
cstypes "github.com/tendermint/tendermint/consensus/types"
|
||||||
|
cmn "github.com/tendermint/tendermint/libs/common"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
mempl "github.com/tendermint/tendermint/mempool"
|
mempl "github.com/tendermint/tendermint/mempool"
|
||||||
"github.com/tendermint/tendermint/p2p"
|
"github.com/tendermint/tendermint/p2p"
|
||||||
@ -632,3 +634,253 @@ func capture() {
|
|||||||
count := runtime.Stack(trace, true)
|
count := runtime.Stack(trace, true)
|
||||||
fmt.Printf("Stack of %d bytes: %s\n", count, trace)
|
fmt.Printf("Stack of %d bytes: %s\n", count, trace)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//-------------------------------------------------------------
|
||||||
|
// Ensure basic validation of structs is functioning
|
||||||
|
|
||||||
|
func TestNewRoundStepMessageValidateBasic(t *testing.T) {
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messageStep cstypes.RoundStepType
|
||||||
|
messageLastCommitRound int
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, 0x01, 1, false},
|
||||||
|
{"Invalid Message", -1, 0, 0x01, 1, true},
|
||||||
|
{"Invalid Message", 0, -1, 0x01, 1, true},
|
||||||
|
{"Invalid Message", 0, 0, 0x00, 1, true},
|
||||||
|
{"Invalid Message", 0, 0, 0x00, 0, true},
|
||||||
|
{"Invalid Message", 1, 0, 0x01, 0, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := NewRoundStepMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
Step: tc.messageStep,
|
||||||
|
LastCommitRound: tc.messageLastCommitRound,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestNewValidBlockMessageValidateBasic(t *testing.T) {
|
||||||
|
testBitArray := cmn.NewBitArray(1)
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messageBlockParts *cmn.BitArray
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, testBitArray, false},
|
||||||
|
{"Invalid Message", -1, 0, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, -1, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, 0, cmn.NewBitArray(0), true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := NewValidBlockMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
BlockParts: tc.messageBlockParts,
|
||||||
|
}
|
||||||
|
|
||||||
|
message.BlockPartsHeader.Total = 1
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProposalPOLMessageValidateBasic(t *testing.T) {
|
||||||
|
testBitArray := cmn.NewBitArray(1)
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageProposalPOLRound int
|
||||||
|
messageProposalPOL *cmn.BitArray
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, testBitArray, false},
|
||||||
|
{"Invalid Message", -1, 0, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, -1, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, 0, cmn.NewBitArray(0), true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := ProposalPOLMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
ProposalPOLRound: tc.messageProposalPOLRound,
|
||||||
|
ProposalPOL: tc.messageProposalPOL,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlockPartMessageValidateBasic(t *testing.T) {
|
||||||
|
testPart := new(types.Part)
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messagePart *types.Part
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, testPart, false},
|
||||||
|
{"Invalid Message", -1, 0, testPart, true},
|
||||||
|
{"Invalid Message", 0, -1, testPart, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := BlockPartMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
Part: tc.messagePart,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
message := BlockPartMessage{Height: 0, Round: 0, Part: new(types.Part)}
|
||||||
|
message.Part.Index = -1
|
||||||
|
|
||||||
|
assert.Equal(t, true, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestHasVoteMessageValidateBasic(t *testing.T) {
|
||||||
|
const (
|
||||||
|
validSignedMsgType types.SignedMsgType = 0x01
|
||||||
|
invalidSignedMsgType types.SignedMsgType = 0x03
|
||||||
|
)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messageType types.SignedMsgType
|
||||||
|
messageIndex int
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, validSignedMsgType, 0, false},
|
||||||
|
{"Invalid Message", -1, 0, validSignedMsgType, 0, true},
|
||||||
|
{"Invalid Message", 0, -1, validSignedMsgType, 0, true},
|
||||||
|
{"Invalid Message", 0, 0, invalidSignedMsgType, 0, true},
|
||||||
|
{"Invalid Message", 0, 0, validSignedMsgType, -1, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := HasVoteMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
Type: tc.messageType,
|
||||||
|
Index: tc.messageIndex,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestVoteSetMaj23MessageValidateBasic(t *testing.T) {
|
||||||
|
const (
|
||||||
|
validSignedMsgType types.SignedMsgType = 0x01
|
||||||
|
invalidSignedMsgType types.SignedMsgType = 0x03
|
||||||
|
)
|
||||||
|
|
||||||
|
validBlockID := types.BlockID{}
|
||||||
|
invalidBlockID := types.BlockID{
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
PartsHeader: types.PartSetHeader{
|
||||||
|
Total: -1,
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messageType types.SignedMsgType
|
||||||
|
messageBlockID types.BlockID
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, validSignedMsgType, validBlockID, false},
|
||||||
|
{"Invalid Message", -1, 0, validSignedMsgType, validBlockID, true},
|
||||||
|
{"Invalid Message", 0, -1, validSignedMsgType, validBlockID, true},
|
||||||
|
{"Invalid Message", 0, 0, invalidSignedMsgType, validBlockID, true},
|
||||||
|
{"Invalid Message", 0, 0, validSignedMsgType, invalidBlockID, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := VoteSetMaj23Message{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
Type: tc.messageType,
|
||||||
|
BlockID: tc.messageBlockID,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestVoteSetBitsMessageValidateBasic(t *testing.T) {
|
||||||
|
const (
|
||||||
|
validSignedMsgType types.SignedMsgType = 0x01
|
||||||
|
invalidSignedMsgType types.SignedMsgType = 0x03
|
||||||
|
)
|
||||||
|
|
||||||
|
validBlockID := types.BlockID{}
|
||||||
|
invalidBlockID := types.BlockID{
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
PartsHeader: types.PartSetHeader{
|
||||||
|
Total: -1,
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
testBitArray := cmn.NewBitArray(1)
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
messageHeight int64
|
||||||
|
messageRound int
|
||||||
|
messageType types.SignedMsgType
|
||||||
|
messageBlockID types.BlockID
|
||||||
|
messageVotes *cmn.BitArray
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Message", 0, 0, validSignedMsgType, validBlockID, testBitArray, false},
|
||||||
|
{"Invalid Message", -1, 0, validSignedMsgType, validBlockID, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, -1, validSignedMsgType, validBlockID, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, 0, invalidSignedMsgType, validBlockID, testBitArray, true},
|
||||||
|
{"Invalid Message", 0, 0, validSignedMsgType, invalidBlockID, testBitArray, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
message := VoteSetBitsMessage{
|
||||||
|
Height: tc.messageHeight,
|
||||||
|
Round: tc.messageRound,
|
||||||
|
Type: tc.messageType,
|
||||||
|
// Votes: tc.messageVotes,
|
||||||
|
BlockID: tc.messageBlockID,
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t, tc.expectErr, message.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -366,3 +366,91 @@ func TestCommitToVoteSet(t *testing.T) {
|
|||||||
assert.Equal(t, vote1bz, vote3bz)
|
assert.Equal(t, vote1bz, vote3bz)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSignedHeaderValidateBasic(t *testing.T) {
|
||||||
|
commit := randCommit()
|
||||||
|
chainID := "𠜎"
|
||||||
|
timestamp := time.Date(math.MaxInt64, 0, 0, 0, 0, 0, math.MaxInt64, time.UTC)
|
||||||
|
h := Header{
|
||||||
|
Version: version.Consensus{Block: math.MaxInt64, App: math.MaxInt64},
|
||||||
|
ChainID: chainID,
|
||||||
|
Height: commit.Height(),
|
||||||
|
Time: timestamp,
|
||||||
|
NumTxs: math.MaxInt64,
|
||||||
|
TotalTxs: math.MaxInt64,
|
||||||
|
LastBlockID: commit.BlockID,
|
||||||
|
LastCommitHash: commit.Hash(),
|
||||||
|
DataHash: commit.Hash(),
|
||||||
|
ValidatorsHash: commit.Hash(),
|
||||||
|
NextValidatorsHash: commit.Hash(),
|
||||||
|
ConsensusHash: commit.Hash(),
|
||||||
|
AppHash: commit.Hash(),
|
||||||
|
LastResultsHash: commit.Hash(),
|
||||||
|
EvidenceHash: commit.Hash(),
|
||||||
|
ProposerAddress: crypto.AddressHash([]byte("proposer_address")),
|
||||||
|
}
|
||||||
|
|
||||||
|
validSignedHeader := SignedHeader{Header: &h, Commit: commit}
|
||||||
|
validSignedHeader.Commit.BlockID.Hash = validSignedHeader.Hash()
|
||||||
|
invalidSignedHeader := SignedHeader{}
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
shHeader *Header
|
||||||
|
shCommit *Commit
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid Signed Header", validSignedHeader.Header, validSignedHeader.Commit, false},
|
||||||
|
{"Invalid Signed Header", invalidSignedHeader.Header, validSignedHeader.Commit, true},
|
||||||
|
{"Invalid Signed Header", validSignedHeader.Header, invalidSignedHeader.Commit, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
sh := SignedHeader{
|
||||||
|
Header: tc.shHeader,
|
||||||
|
Commit: tc.shCommit,
|
||||||
|
}
|
||||||
|
assert.Equal(t, tc.expectErr, sh.ValidateBasic(validSignedHeader.Header.ChainID) != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestBlockIDValidateBasic(t *testing.T) {
|
||||||
|
validBlockID := BlockID{
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
PartsHeader: PartSetHeader{
|
||||||
|
Total: 1,
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
invalidBlockID := BlockID{
|
||||||
|
Hash: []byte{0},
|
||||||
|
PartsHeader: PartSetHeader{
|
||||||
|
Total: -1,
|
||||||
|
Hash: cmn.HexBytes{},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
testCases := []struct {
|
||||||
|
testName string
|
||||||
|
blockIDHash cmn.HexBytes
|
||||||
|
blockIDPartsHeader PartSetHeader
|
||||||
|
expectErr bool
|
||||||
|
}{
|
||||||
|
{"Valid BlockID", validBlockID.Hash, validBlockID.PartsHeader, false},
|
||||||
|
{"Invalid BlockID", invalidBlockID.Hash, validBlockID.PartsHeader, true},
|
||||||
|
{"Invalid BlockID", validBlockID.Hash, invalidBlockID.PartsHeader, true},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.testName, func(t *testing.T) {
|
||||||
|
blockID := BlockID{
|
||||||
|
Hash: tc.blockIDHash,
|
||||||
|
PartsHeader: tc.blockIDPartsHeader,
|
||||||
|
}
|
||||||
|
assert.Equal(t, tc.expectErr, blockID.ValidateBasic() != nil, "Validate Basic had an unexpected result")
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -157,3 +157,13 @@ func TestDuplicateVoteEvidenceValidation(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMockGoodEvidenceValidateBasic(t *testing.T) {
|
||||||
|
goodEvidence := NewMockGoodEvidence(int64(1), 1, []byte{1})
|
||||||
|
assert.Nil(t, goodEvidence.ValidateBasic())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestMockBadEvidenceValidateBasic(t *testing.T) {
|
||||||
|
badEvidence := MockBadEvidence{MockGoodEvidence: NewMockGoodEvidence(int64(1), 1, []byte{1})}
|
||||||
|
assert.Nil(t, badEvidence.ValidateBasic())
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user