From 1766a73a4c247e4ddc7bfbc985d193747ef24430 Mon Sep 17 00:00:00 2001 From: Juan Leni Date: Wed, 6 Feb 2019 02:52:18 +0100 Subject: [PATCH] Merge PR #3502: Fixing bug in genesis Equal --- PENDING.md | 1 + x/gov/genesis.go | 4 ++-- x/gov/genesis_test.go | 47 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/PENDING.md b/PENDING.md index 296d30d1cd..00c16cdb36 100644 --- a/PENDING.md +++ b/PENDING.md @@ -22,6 +22,7 @@ BREAKING CHANGES * SDK * [\#3487](https://github.com/cosmos/cosmos-sdk/pull/3487) Move HTTP/REST utilities out of client/utils into a new dedicated client/rest package. * [\#3490](https://github.com/cosmos/cosmos-sdk/issues/3490) ReadRESTReq() returns bool to avoid callers to write error responses twice. + * [\#3502](https://github.com/cosmos/cosmos-sdk/pull/3502) Fixes issue when comparing genesis states * Tendermint diff --git a/x/gov/genesis.go b/x/gov/genesis.go index 9c44b2f007..a86085b228 100644 --- a/x/gov/genesis.go +++ b/x/gov/genesis.go @@ -62,7 +62,7 @@ func DefaultGenesisState() GenesisState { // Checks whether 2 GenesisState structs are equivalent. func (data GenesisState) Equal(data2 GenesisState) bool { - if data.StartingProposalID != data.StartingProposalID || + if data.StartingProposalID != data2.StartingProposalID || !data.DepositParams.Equal(data2.DepositParams) || data.VotingParams != data2.VotingParams || data.TallyParams != data2.TallyParams { @@ -97,7 +97,7 @@ func (data GenesisState) Equal(data2 GenesisState) bool { return false } for i := range data.Proposals { - if data.Proposals[i] != data.Proposals[i] { + if !ProposalEqual(data.Proposals[i], data2.Proposals[i]) { return false } } diff --git a/x/gov/genesis_test.go b/x/gov/genesis_test.go index 87d466b5f1..61f2c299ac 100644 --- a/x/gov/genesis_test.go +++ b/x/gov/genesis_test.go @@ -10,6 +10,53 @@ import ( abci "github.com/tendermint/tendermint/abci/types" ) +func TestEqualProposalID(t *testing.T) { + state1 := GenesisState{} + state2 := GenesisState{} + require.Equal(t, state1, state2) + + // Proposals + state1.StartingProposalID = 1 + require.NotEqual(t, state1, state2) + require.False(t, state1.Equal(state2)) + + state2.StartingProposalID = 1 + require.Equal(t, state1, state2) + require.True(t, state1.Equal(state2)) +} + +func TestEqualProposals(t *testing.T) { + // Generate mock app and keepers + mapp, keeper, _, addrs, _, _ := getMockApp(t, 2, GenesisState{}, nil) + SortAddresses(addrs) + mapp.BeginBlock(abci.RequestBeginBlock{}) + ctx := mapp.BaseApp.NewContext(false, abci.Header{}) + + // Create two proposals + proposal1 := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) + proposal2 := keeper.NewTextProposal(ctx, "Test", "description", ProposalTypeText) + + // They are similar but their IDs should be different + require.NotEqual(t, proposal1, proposal2) + require.False(t, ProposalEqual(proposal1, proposal2)) + + // Now create two genesis blocks + state1 := GenesisState{Proposals: []Proposal{proposal1}} + state2 := GenesisState{Proposals: []Proposal{proposal2}} + require.NotEqual(t, state1, state2) + require.False(t, state1.Equal(state2)) + + // Now make proposals identical by setting both IDs to 55 + proposal1.SetProposalID(55) + proposal2.SetProposalID(55) + require.Equal(t, proposal1, proposal1) + require.True(t, ProposalEqual(proposal1, proposal2)) + + // State should be identical now.. + require.Equal(t, state1, state2) + require.True(t, state1.Equal(state2)) +} + func TestImportExportQueues(t *testing.T) { // Generate mock app and keepers