config: update validation with check committee
ProtocolConfiguration section must include stand by committee and the number of validators or committee/validators history. Close #3247 Signed-off-by: Ekaterina Pavlova <ekt@morphbits.io>
This commit is contained in:
parent
ed73628100
commit
5f745dff72
2 changed files with 39 additions and 2 deletions
|
@ -106,8 +106,12 @@ func (p *ProtocolConfiguration) Validate() error {
|
||||||
shouldBeDisabled = true
|
shouldBeDisabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p.ValidatorsCount != 0 && len(p.ValidatorsHistory) != 0 {
|
if p.ValidatorsCount != 0 && len(p.ValidatorsHistory) != 0 || p.ValidatorsCount == 0 && len(p.ValidatorsHistory) == 0 {
|
||||||
return errors.New("configuration should either have ValidatorsCount or ValidatorsHistory, not both")
|
return errors.New("configuration should either have one of ValidatorsCount or ValidatorsHistory, not both")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(p.StandbyCommittee) == 0 {
|
||||||
|
return errors.New("configuration should include StandbyCommittee")
|
||||||
}
|
}
|
||||||
if len(p.StandbyCommittee) < int(p.ValidatorsCount) {
|
if len(p.StandbyCommittee) < int(p.ValidatorsCount) {
|
||||||
return errors.New("validators count can't exceed the size of StandbyCommittee")
|
return errors.New("validators count can't exceed the size of StandbyCommittee")
|
||||||
|
|
|
@ -135,6 +135,20 @@ func TestProtocolConfigurationValidation(t *testing.T) {
|
||||||
ValidatorsHistory: map[uint32]uint32{0: 1, 100: 4},
|
ValidatorsHistory: map[uint32]uint32{0: 1, 100: 4},
|
||||||
}
|
}
|
||||||
require.NoError(t, p.Validate())
|
require.NoError(t, p.Validate())
|
||||||
|
p = &ProtocolConfiguration{
|
||||||
|
StandbyCommittee: []string{},
|
||||||
|
CommitteeHistory: map[uint32]uint32{0: 1, 100: 4},
|
||||||
|
ValidatorsHistory: map[uint32]uint32{0: 1, 100: 4},
|
||||||
|
}
|
||||||
|
err := p.Validate()
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Contains(t, err.Error(), "configuration should include StandbyCommittee")
|
||||||
|
p = &ProtocolConfiguration{
|
||||||
|
StandbyCommittee: []string{"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2"},
|
||||||
|
}
|
||||||
|
err = p.Validate()
|
||||||
|
require.Error(t, err)
|
||||||
|
require.Contains(t, err.Error(), "configuration should either have one of ValidatorsCount or ValidatorsHistory, not both")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestProtocolConfigurationValidation_Hardforks(t *testing.T) {
|
func TestProtocolConfigurationValidation_Hardforks(t *testing.T) {
|
||||||
|
@ -149,13 +163,20 @@ func TestProtocolConfigurationValidation_Hardforks(t *testing.T) {
|
||||||
"Aspidochelone": 2,
|
"Aspidochelone": 2,
|
||||||
"Basilisk": 1, // Lower height in higher hard-fork.
|
"Basilisk": 1, // Lower height in higher hard-fork.
|
||||||
},
|
},
|
||||||
|
StandbyCommittee: []string{
|
||||||
|
"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2",
|
||||||
|
},
|
||||||
|
ValidatorsCount: 1,
|
||||||
}
|
}
|
||||||
require.Error(t, p.Validate())
|
require.Error(t, p.Validate())
|
||||||
p = &ProtocolConfiguration{
|
p = &ProtocolConfiguration{
|
||||||
Hardforks: map[string]uint32{
|
Hardforks: map[string]uint32{
|
||||||
"Aspidochelone": 2,
|
"Aspidochelone": 2,
|
||||||
"Basilisk": 2, // Same height is OK.
|
"Basilisk": 2, // Same height is OK.
|
||||||
|
}, StandbyCommittee: []string{
|
||||||
|
"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2",
|
||||||
},
|
},
|
||||||
|
ValidatorsCount: 1,
|
||||||
}
|
}
|
||||||
require.NoError(t, p.Validate())
|
require.NoError(t, p.Validate())
|
||||||
p = &ProtocolConfiguration{
|
p = &ProtocolConfiguration{
|
||||||
|
@ -163,18 +184,30 @@ func TestProtocolConfigurationValidation_Hardforks(t *testing.T) {
|
||||||
"Aspidochelone": 2,
|
"Aspidochelone": 2,
|
||||||
"Basilisk": 3, // Larger height is OK.
|
"Basilisk": 3, // Larger height is OK.
|
||||||
},
|
},
|
||||||
|
StandbyCommittee: []string{
|
||||||
|
"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2",
|
||||||
|
},
|
||||||
|
ValidatorsCount: 1,
|
||||||
}
|
}
|
||||||
require.NoError(t, p.Validate())
|
require.NoError(t, p.Validate())
|
||||||
p = &ProtocolConfiguration{
|
p = &ProtocolConfiguration{
|
||||||
Hardforks: map[string]uint32{
|
Hardforks: map[string]uint32{
|
||||||
"Aspidochelone": 2,
|
"Aspidochelone": 2,
|
||||||
},
|
},
|
||||||
|
StandbyCommittee: []string{
|
||||||
|
"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2",
|
||||||
|
},
|
||||||
|
ValidatorsCount: 1,
|
||||||
}
|
}
|
||||||
require.NoError(t, p.Validate())
|
require.NoError(t, p.Validate())
|
||||||
p = &ProtocolConfiguration{
|
p = &ProtocolConfiguration{
|
||||||
Hardforks: map[string]uint32{
|
Hardforks: map[string]uint32{
|
||||||
"Basilisk": 2,
|
"Basilisk": 2,
|
||||||
},
|
},
|
||||||
|
StandbyCommittee: []string{
|
||||||
|
"02b3622bf4017bdfe317c58aed5f4c753f206b7db896046fa7d774bbc4bf7f8dc2",
|
||||||
|
},
|
||||||
|
ValidatorsCount: 1,
|
||||||
}
|
}
|
||||||
require.NoError(t, p.Validate())
|
require.NoError(t, p.Validate())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue