mirror of
https://github.com/tendermint/tendermint.git
synced 2026-09-19 06:31:57 +00:00
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:
co-authored by
Callum Michael Waters
parent
b5f030892d
commit
dc71f265aa
@@ -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
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user