types: check if nil or empty valset (#5167)

Solves #5138 in the way that if a validatorSet is nil or empty it will not try to transform it to protobug

Co-authored-by: Callum Michael Waters <cmwaters19@gmail.com>
This commit is contained in:
Marko
2020-07-29 20:16:42 +02:00
committed by GitHub
co-authored by Callum Michael Waters
parent b5f030892d
commit dc71f265aa
4 changed files with 12 additions and 11 deletions
+1 -1
View File
@@ -167,7 +167,7 @@ func TestByzantinePrevoteEquivocation(t *testing.T) {
msg := <-blocksSubs[j].Out() msg := <-blocksSubs[j].Out()
block := msg.Data().(types.EventDataNewBlock).Block block := msg.Data().(types.EventDataNewBlock).Block
// assert that we have evidence // assert that we have evidence
assert.True(t, len(block.Evidence.Evidence) == 1) require.True(t, len(block.Evidence.Evidence) == 1)
// and that the evidence is of type DuplicateVoteEvidence // and that the evidence is of type DuplicateVoteEvidence
ev, ok := block.Evidence.Evidence[0].(*types.DuplicateVoteEvidence) ev, ok := block.Evidence.Evidence[0].(*types.DuplicateVoteEvidence)
assert.True(t, ok) assert.True(t, ok)
+7 -6
View File
@@ -1036,24 +1036,25 @@ func TestStateProto(t *testing.T) {
tc := []struct { tc := []struct {
testName string testName string
state *sm.State state *sm.State
expPass bool expPass1 bool
expPass2 bool
}{ }{
{"empty state", &sm.State{}, false}, {"empty state", &sm.State{}, true, false},
{"nil failure state", nil, false}, {"nil failure state", nil, false, false},
{"success state", &state, true}, {"success state", &state, true, true},
} }
for _, tt := range tc { for _, tt := range tc {
tt := tt tt := tt
pbs, err := tt.state.ToProto() pbs, err := tt.state.ToProto()
if !tt.expPass { if !tt.expPass1 {
assert.Error(t, err) assert.Error(t, err)
} else { } else {
assert.NoError(t, err, tt.testName) assert.NoError(t, err, tt.testName)
} }
smt, err := sm.StateFromProto(pbs) smt, err := sm.StateFromProto(pbs)
if tt.expPass { if tt.expPass2 {
require.NoError(t, err, tt.testName) require.NoError(t, err, tt.testName)
require.Equal(t, tt.state, smt, tt.testName) require.Equal(t, tt.state, smt, tt.testName)
} else { } else {
+2 -2
View File
@@ -912,8 +912,8 @@ func (valz ValidatorsByAddress) Swap(i, j int) {
// ToProto converts ValidatorSet to protobuf // ToProto converts ValidatorSet to protobuf
func (vals *ValidatorSet) ToProto() (*tmproto.ValidatorSet, error) { func (vals *ValidatorSet) ToProto() (*tmproto.ValidatorSet, error) {
if vals == nil { if vals.IsNilOrEmpty() {
return nil, errors.New("nil validator set") // validator set should never be nil return &tmproto.ValidatorSet{}, nil // validator set should never be nil
} }
vp := new(tmproto.ValidatorSet) vp := new(tmproto.ValidatorSet)
+2 -2
View File
@@ -1598,8 +1598,8 @@ func TestValidatorSetProtoBuf(t *testing.T) {
{"fail valSet2, pubkey empty", valset2, false, false}, {"fail valSet2, pubkey empty", valset2, false, false},
{"fail nil Proposer", valset3, false, false}, {"fail nil Proposer", valset3, false, false},
{"fail empty Proposer", valset4, false, false}, {"fail empty Proposer", valset4, false, false},
{"fail empty valSet", &ValidatorSet{}, false, false}, {"fail empty valSet", &ValidatorSet{}, true, false},
{"false nil", nil, false, false}, {"false nil", nil, true, false},
} }
for _, tc := range testCases { for _, tc := range testCases {
protoValSet, err := tc.v1.ToProto() protoValSet, err := tc.v1.ToProto()