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:
Jonathan Claudius 2023-05-09 11:45:10 -04:00 committed by GitHub
parent b8b425263b
commit 6ac2444172
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 2 deletions

View File

@ -5,5 +5,8 @@ package vaa
// 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.
func CalculateQuorum(numGuardians int) int {
if numGuardians < 0 {
panic("Invalid numGuardians is less than zero")
}
return ((numGuardians * 2) / 3) + 1
}

View File

@ -10,9 +10,11 @@ func TestCalculateQuorum(t *testing.T) {
type Test struct {
numGuardians int
quorumResult int
shouldPanic bool
}
tests := []Test{
// Positive Test Cases
{numGuardians: 0, quorumResult: 1},
{numGuardians: 1, quorumResult: 1},
{numGuardians: 2, quorumResult: 2},
@ -36,12 +38,20 @@ func TestCalculateQuorum(t *testing.T) {
{numGuardians: 50, quorumResult: 34},
{numGuardians: 100, quorumResult: 67},
{numGuardians: 1000, quorumResult: 667},
// Negative Test Cases
{numGuardians: -1, quorumResult: 1, shouldPanic: true},
{numGuardians: -1000, quorumResult: 1, shouldPanic: true},
}
for _, tc := range tests {
t.Run("", func(t *testing.T) {
num := CalculateQuorum(tc.numGuardians)
assert.Equal(t, tc.quorumResult, num)
if tc.shouldPanic {
assert.Panics(t, func() { CalculateQuorum(tc.numGuardians) }, "The code did not panic")
} else {
num := CalculateQuorum(tc.numGuardians)
assert.Equal(t, tc.quorumResult, num)
}
})
}
}