x/gov/keeper: fix flaky TestPaginatedVotesQuery (#9223)

When testing with -race, sometimes the random source generate the same
string for consecutive calls, causing duplicated voter address. So the
number of votes in DB is not 20.

To fix this, we ensure unique addresses are generated, by using a map
for tracking which one was produced, and skip the duplicated address and
generated new one. Testing with:

	go test -race -v -count=1000 -run=TestPaginatedVotesQuery

now passes.

Updates #9010
This commit is contained in:
Cuong Manh Le 2021-04-29 00:08:42 +07:00 committed by GitHub
parent a2911d0dc6
commit 6ad84c5065
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -316,13 +316,23 @@ func TestPaginatedVotesQuery(t *testing.T) {
app.GovKeeper.SetProposal(ctx, proposal)
votes := make([]types.Vote, 20)
rand := rand.New(rand.NewSource(time.Now().UnixNano()))
addr := make(sdk.AccAddress, 20)
random := rand.New(rand.NewSource(time.Now().UnixNano()))
addrMap := make(map[string]struct{})
genAddr := func() string {
addr := make(sdk.AccAddress, 20)
for {
random.Read(addr)
addrStr := addr.String()
if _, ok := addrMap[addrStr]; !ok {
addrMap[addrStr] = struct{}{}
return addrStr
}
}
}
for i := range votes {
rand.Read(addr)
vote := types.Vote{
ProposalId: proposal.ProposalId,
Voter: addr.String(),
Voter: genAddr(),
Options: types.NewNonSplitVoteOption(types.OptionYes),
}
votes[i] = vote