Skip to content

Commit

Permalink
test: add test case for no successful vote (#2057)
Browse files Browse the repository at this point in the history
* add test case for no successful vote

* add test case for no successful vote

* update test to mark missing votes

* update dependencies

* add back test case for when no voters vote and voter is not a chain mainter, and update test descriptions

* fix missed rename

* plural
fahimahmedx authored Dec 14, 2023
1 parent 18c0eeb commit b5aacc5
Showing 3 changed files with 69 additions and 4 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ require (
golang.org/x/mod v0.14.0
golang.org/x/sync v0.5.0
golang.org/x/text v0.14.0
golang.org/x/tools v0.16.0
golang.org/x/tools v0.16.1
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2
google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a
google.golang.org/grpc v1.55.0
2 changes: 2 additions & 0 deletions go.sum

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

69 changes: 66 additions & 3 deletions x/evm/keeper/vote_handler_test.go
Original file line number Diff line number Diff line change
@@ -78,7 +78,7 @@ func TestHandleExpiredPoll(t *testing.T) {
HasVotedFunc: func(address sdk.ValAddress) bool { return !address.Equals(missingVoter) },
}
}).
When("maintainer state can be found", func() {
When("the voter is a chain maintainer", func() {
maintainerState = &nexusmock.MaintainerStateMock{}
n.GetChainMaintainerStateFunc = func(sdk.Context, nexus.Chain, sdk.ValAddress) (nexus.MaintainerState, bool) {
return maintainerState, true
@@ -114,7 +114,7 @@ func TestHandleExpiredPoll(t *testing.T) {
HasVotedFunc: func(address sdk.ValAddress) bool { return !address.Equals(missingVoter) },
}
}).
When("maintainer state can not be found", func() {
When("the voter is not a chain maintainer", func() {
maintainerState = &nexusmock.MaintainerStateMock{}
n.GetChainMaintainerStateFunc = func(sdk.Context, nexus.Chain, sdk.ValAddress) (nexus.MaintainerState, bool) {
return nil, false
@@ -131,6 +131,69 @@ func TestHandleExpiredPoll(t *testing.T) {
}).
Run(t)

givenVoteHandler.
When("all voters failed to vote for poll", func() {
poll = &votemock.PollMock{
GetIDFunc: func() vote.PollID { return vote.PollID(rand.I64Between(10, 100)) },
GetRewardPoolNameFunc: func() (string, bool) { return rand.NormalizedStr(3), true },
GetMetaDataFunc: func() (codec.ProtoMarshaler, bool) { return &types.PollMetadata{Chain: exported.Ethereum.Name}, true },
GetVotersFunc: func() []sdk.ValAddress {
return slices.Expand(func(int) sdk.ValAddress { return rand.ValAddr() }, 10)
},
HasVotedFunc: func(address sdk.ValAddress) bool { return false },
}
}).
When("the voters are a chain maintainer", func() {
maintainerState = &nexusmock.MaintainerStateMock{}
n.GetChainMaintainerStateFunc = func(sdk.Context, nexus.Chain, sdk.ValAddress) (nexus.MaintainerState, bool) {
return maintainerState, true
}
}).
Then("should clear rewards and mark voters missing vote", func(t *testing.T) {
maintainerState.MarkMissingVoteFunc = func(bool) {}
n.SetChainMaintainerStateFunc = func(ctx sdk.Context, maintainerState nexus.MaintainerState) error { return nil }
rewardPool.ClearRewardsFunc = func(sdk.ValAddress) {}

err := handler.HandleExpiredPoll(ctx, poll)

assert.NoError(t, err)
assert.Len(t, maintainerState.MarkMissingVoteCalls(), 10)
for _, call := range maintainerState.MarkMissingVoteCalls() {
assert.True(t, call.MissingVote)
}
assert.Len(t, n.SetChainMaintainerStateCalls(), 10)
assert.Len(t, rewardPool.ClearRewardsCalls(), 10)
}).
Run(t)

givenVoteHandler.
When("all voters failed to vote for poll", func() {
poll = &votemock.PollMock{
GetIDFunc: func() vote.PollID { return vote.PollID(rand.I64Between(10, 100)) },
GetRewardPoolNameFunc: func() (string, bool) { return rand.NormalizedStr(3), true },
GetMetaDataFunc: func() (codec.ProtoMarshaler, bool) { return &types.PollMetadata{Chain: exported.Ethereum.Name}, true },
GetVotersFunc: func() []sdk.ValAddress {
return slices.Expand(func(int) sdk.ValAddress { return rand.ValAddr() }, 10)
},
HasVotedFunc: func(address sdk.ValAddress) bool { return false },
}
}).
When("the voters are not a chain maintainer", func() {
maintainerState = &nexusmock.MaintainerStateMock{}
n.GetChainMaintainerStateFunc = func(sdk.Context, nexus.Chain, sdk.ValAddress) (nexus.MaintainerState, bool) {
return nil, false
}
}).
Then("should clear rewards and not mark voters missing vote", func(t *testing.T) {
rewardPool.ClearRewardsFunc = func(sdk.ValAddress) {}

err := handler.HandleExpiredPoll(ctx, poll)

assert.NoError(t, err)
assert.Len(t, rewardPool.ClearRewardsCalls(), 10)
}).
Run(t)

givenVoteHandler.
When("no voter failed to vote for poll", func() {
poll = &votemock.PollMock{
@@ -143,7 +206,7 @@ func TestHandleExpiredPoll(t *testing.T) {
HasVotedFunc: func(address sdk.ValAddress) bool { return true },
}
}).
When("maintainer state can be found", func() {
When("the voter is a chain maintainer", func() {
maintainerState = &nexusmock.MaintainerStateMock{}
n.GetChainMaintainerStateFunc = func(sdk.Context, nexus.Chain, sdk.ValAddress) (nexus.MaintainerState, bool) {
return maintainerState, true

0 comments on commit b5aacc5

Please sign in to comment.