diff --git a/types/proposal_test.go b/types/proposal_test.go index dfd3eb712..63875b12c 100644 --- a/types/proposal_test.go +++ b/types/proposal_test.go @@ -197,48 +197,84 @@ func TestIsTimely(t *testing.T) { genesisTime, err := time.Parse(time.RFC3339, "2019-03-13T23:00:00Z") require.NoError(t, err) testCases := []struct { - name string - proposalTime time.Time - recvTime time.Time - precision time.Duration - msgDelay time.Duration - expectTimely bool + name string + genesisHeight int64 + proposalHeight int64 + proposalTime time.Time + recvTime time.Time + precision time.Duration + msgDelay time.Duration + expectTimely bool }{ // proposalTime - precision <= localTime <= proposalTime + msgDelay + precision { // Checking that the following inequality evaluates to true: // 0 - 2 <= 1 <= 0 + 1 + 2 - name: "basic timely", - proposalTime: genesisTime, - recvTime: genesisTime.Add(1 * time.Nanosecond), - precision: time.Nanosecond * 2, - msgDelay: time.Nanosecond, - expectTimely: true, + name: "basic timely", + genesisHeight: 1, + proposalHeight: 2, + proposalTime: genesisTime, + recvTime: genesisTime.Add(1 * time.Nanosecond), + precision: time.Nanosecond * 2, + msgDelay: time.Nanosecond, + expectTimely: true, }, { // Checking that the following inequality evaluates to false: // 0 - 2 <= 4 <= 0 + 1 + 2 - name: "local time too large", - proposalTime: genesisTime, - recvTime: genesisTime.Add(4 * time.Nanosecond), - precision: time.Nanosecond * 2, - msgDelay: time.Nanosecond, - expectTimely: false, + name: "local time too large", + genesisHeight: 1, + proposalHeight: 2, + proposalTime: genesisTime, + recvTime: genesisTime.Add(4 * time.Nanosecond), + precision: time.Nanosecond * 2, + msgDelay: time.Nanosecond, + expectTimely: false, }, { // Checking that the following inequality evaluates to false: // 4 - 2 <= 0 <= 4 + 2 + 1 - name: "proposal time too large", - proposalTime: genesisTime.Add(4 * time.Nanosecond), - recvTime: genesisTime, - precision: time.Nanosecond * 2, - msgDelay: time.Nanosecond, - expectTimely: false, + name: "proposal time too large", + genesisHeight: 1, + proposalHeight: 2, + proposalTime: genesisTime.Add(4 * time.Nanosecond), + recvTime: genesisTime, + precision: time.Nanosecond * 2, + msgDelay: time.Nanosecond, + expectTimely: false, + }, + { + // Checking that the following inequality evaluates to true: + // 0 - 2 <= 4 + // and the following check is skipped + // 4 <= 0 + 1 + 2 + name: "local time too large but proposal is for genesis", + genesisHeight: 1, + proposalHeight: 1, + proposalTime: genesisTime, + recvTime: genesisTime.Add(4 * time.Nanosecond), + precision: time.Nanosecond * 2, + msgDelay: time.Nanosecond, + expectTimely: true, + }, + { + // Checking that the following inequality evaluates to false: + // 4 - 2 <= 0 + name: "proposal time too large for genesis block proposal", + genesisHeight: 1, + proposalHeight: 1, + proposalTime: genesisTime.Add(4 * time.Nanosecond), + recvTime: genesisTime, + precision: time.Nanosecond * 2, + msgDelay: time.Nanosecond, + expectTimely: false, }, } + for _, testCase := range testCases { t.Run(testCase.name, func(t *testing.T) { p := Proposal{ + Height: testCase.proposalHeight, Timestamp: testCase.proposalTime, } @@ -247,7 +283,7 @@ func TestIsTimely(t *testing.T) { MessageDelay: testCase.msgDelay, } - ti := p.IsTimely(testCase.recvTime, tp, 2) + ti := p.IsTimely(testCase.recvTime, tp, testCase.genesisHeight) assert.Equal(t, testCase.expectTimely, ti) }) }