sdk: assert no negative numGuardians in quorum calculation (#2892)
* sdk: assert no negative numGuardians in quorum calculation * sdk: fix formating on quorum tests
This commit is contained in:
parent
b8b425263b
commit
6ac2444172
|
@ -5,5 +5,8 @@ package vaa
|
||||||
// The canonical source is the calculation in the contracts (solana/bridge/src/processor.rs and
|
// The canonical source is the calculation in the contracts (solana/bridge/src/processor.rs and
|
||||||
// ethereum/contracts/Wormhole.sol), and this needs to match the implementation in the contracts.
|
// ethereum/contracts/Wormhole.sol), and this needs to match the implementation in the contracts.
|
||||||
func CalculateQuorum(numGuardians int) int {
|
func CalculateQuorum(numGuardians int) int {
|
||||||
|
if numGuardians < 0 {
|
||||||
|
panic("Invalid numGuardians is less than zero")
|
||||||
|
}
|
||||||
return ((numGuardians * 2) / 3) + 1
|
return ((numGuardians * 2) / 3) + 1
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,9 +10,11 @@ func TestCalculateQuorum(t *testing.T) {
|
||||||
type Test struct {
|
type Test struct {
|
||||||
numGuardians int
|
numGuardians int
|
||||||
quorumResult int
|
quorumResult int
|
||||||
|
shouldPanic bool
|
||||||
}
|
}
|
||||||
|
|
||||||
tests := []Test{
|
tests := []Test{
|
||||||
|
// Positive Test Cases
|
||||||
{numGuardians: 0, quorumResult: 1},
|
{numGuardians: 0, quorumResult: 1},
|
||||||
{numGuardians: 1, quorumResult: 1},
|
{numGuardians: 1, quorumResult: 1},
|
||||||
{numGuardians: 2, quorumResult: 2},
|
{numGuardians: 2, quorumResult: 2},
|
||||||
|
@ -36,12 +38,20 @@ func TestCalculateQuorum(t *testing.T) {
|
||||||
{numGuardians: 50, quorumResult: 34},
|
{numGuardians: 50, quorumResult: 34},
|
||||||
{numGuardians: 100, quorumResult: 67},
|
{numGuardians: 100, quorumResult: 67},
|
||||||
{numGuardians: 1000, quorumResult: 667},
|
{numGuardians: 1000, quorumResult: 667},
|
||||||
|
|
||||||
|
// Negative Test Cases
|
||||||
|
{numGuardians: -1, quorumResult: 1, shouldPanic: true},
|
||||||
|
{numGuardians: -1000, quorumResult: 1, shouldPanic: true},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
t.Run("", func(t *testing.T) {
|
t.Run("", func(t *testing.T) {
|
||||||
|
if tc.shouldPanic {
|
||||||
|
assert.Panics(t, func() { CalculateQuorum(tc.numGuardians) }, "The code did not panic")
|
||||||
|
} else {
|
||||||
num := CalculateQuorum(tc.numGuardians)
|
num := CalculateQuorum(tc.numGuardians)
|
||||||
assert.Equal(t, tc.quorumResult, num)
|
assert.Equal(t, tc.quorumResult, num)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue