Browse Source

Merge branch 'master' into consensus-propogate-error

pull/8171/head
Sam Kleinman 3 years ago
committed by GitHub
parent
commit
7b29c71d32
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 42 deletions
  1. +2
    -2
      internal/consensus/invalid_test.go
  2. +6
    -6
      internal/consensus/reactor_test.go
  3. +6
    -34
      internal/consensus/state_test.go

+ 2
- 2
internal/consensus/invalid_test.go View File

@ -26,13 +26,13 @@ func TestReactorInvalidPrecommit(t *testing.T) {
config := configSetup(t) config := configSetup(t)
n := 4
const n = 2
states, cleanup := makeConsensusState(ctx, t, states, cleanup := makeConsensusState(ctx, t,
config, n, "consensus_reactor_test", config, n, "consensus_reactor_test",
newMockTickerFunc(true)) newMockTickerFunc(true))
t.Cleanup(cleanup) t.Cleanup(cleanup)
for i := 0; i < 4; i++ {
for i := 0; i < n; i++ {
ticker := NewTimeoutTicker(states[i].logger) ticker := NewTimeoutTicker(states[i].logger)
states[i].SetTimeoutTicker(ticker) states[i].SetTimeoutTicker(ticker)
} }


+ 6
- 6
internal/consensus/reactor_test.go View File

@ -355,7 +355,7 @@ func TestReactorBasic(t *testing.T) {
cfg := configSetup(t) cfg := configSetup(t)
n := 4
n := 2
states, cleanup := makeConsensusState(ctx, t, states, cleanup := makeConsensusState(ctx, t,
cfg, n, "consensus_reactor_test", cfg, n, "consensus_reactor_test",
newMockTickerFunc(true)) newMockTickerFunc(true))
@ -445,7 +445,7 @@ func TestReactorWithEvidence(t *testing.T) {
cfg := configSetup(t) cfg := configSetup(t)
n := 4
n := 2
testName := "consensus_reactor_test" testName := "consensus_reactor_test"
tickerFunc := newMockTickerFunc(true) tickerFunc := newMockTickerFunc(true)
@ -551,7 +551,7 @@ func TestReactorCreatesBlockWhenEmptyBlocksFalse(t *testing.T) {
cfg := configSetup(t) cfg := configSetup(t)
n := 4
n := 2
states, cleanup := makeConsensusState(ctx, states, cleanup := makeConsensusState(ctx,
t, t,
cfg, cfg,
@ -574,7 +574,7 @@ func TestReactorCreatesBlockWhenEmptyBlocksFalse(t *testing.T) {
// send a tx // send a tx
require.NoError( require.NoError(
t, t,
assertMempool(t, states[3].txNotifier).CheckTx(
assertMempool(t, states[1].txNotifier).CheckTx(
ctx, ctx,
[]byte{1, 2, 3}, []byte{1, 2, 3},
nil, nil,
@ -605,7 +605,7 @@ func TestReactorRecordsVotesAndBlockParts(t *testing.T) {
cfg := configSetup(t) cfg := configSetup(t)
n := 4
n := 2
states, cleanup := makeConsensusState(ctx, t, states, cleanup := makeConsensusState(ctx, t,
cfg, n, "consensus_reactor_test", cfg, n, "consensus_reactor_test",
newMockTickerFunc(true)) newMockTickerFunc(true))
@ -670,7 +670,7 @@ func TestReactorVotingPowerChange(t *testing.T) {
cfg := configSetup(t) cfg := configSetup(t)
n := 4
n := 2
states, cleanup := makeConsensusState(ctx, states, cleanup := makeConsensusState(ctx,
t, t,
cfg, cfg,


+ 6
- 34
internal/consensus/state_test.go View File

@ -3,7 +3,6 @@ package consensus
import ( import (
"bytes" "bytes"
"context" "context"
"fmt"
"testing" "testing"
"time" "time"
@ -312,8 +311,6 @@ func TestStateOversizedBlock(t *testing.T) {
// start the machine // start the machine
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
t.Log("Block Sizes", "Limit", cs1.state.ConsensusParams.Block.MaxBytes, "Current", totalBytes)
// c1 should log an error with the block part message as it exceeds the consensus params. The // c1 should log an error with the block part message as it exceeds the consensus params. The
// block is not added to cs.ProposalBlock so the node timeouts. // block is not added to cs.ProposalBlock so the node timeouts.
ensureNewTimeout(t, timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) ensureNewTimeout(t, timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds())
@ -490,7 +487,6 @@ func TestStateLock_NoPOL(t *testing.T) {
round++ // moving to the next round round++ // moving to the next round
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("#### ONTO ROUND 1")
/* /*
Round2 (cs1, B) // B B2 Round2 (cs1, B) // B B2
*/ */
@ -533,7 +529,6 @@ func TestStateLock_NoPOL(t *testing.T) {
round++ // entering new round round++ // entering new round
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("#### ONTO ROUND 2")
/* /*
Round3 (vs2, _) // B, B2 Round3 (vs2, _) // B, B2
*/ */
@ -590,7 +585,6 @@ func TestStateLock_NoPOL(t *testing.T) {
round++ // entering new round round++ // entering new round
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("#### ONTO ROUND 3")
/* /*
Round4 (vs2, C) // B C // B C Round4 (vs2, C) // B C // B C
*/ */
@ -662,7 +656,6 @@ func TestStateLock_POLUpdateLock(t *testing.T) {
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
// start round and wait for propose and prevote // start round and wait for propose and prevote
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
@ -700,7 +693,6 @@ func TestStateLock_POLUpdateLock(t *testing.T) {
Check that cs1 is now locked on the new block, D and no longer on the old block. Check that cs1 is now locked on the new block, D and no longer on the old block.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
@ -769,7 +761,6 @@ func TestStateLock_POLRelock(t *testing.T) {
Send a precommit for nil from all of the validators to cs1. Send a precommit for nil from all of the validators to cs1.
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
@ -808,7 +799,6 @@ func TestStateLock_POLRelock(t *testing.T) {
Check that cs1 updates its 'locked round' value to the current round. Check that cs1 updates its 'locked round' value to the current round.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
propR1 := types.NewProposal(height, round, cs1.ValidRound, blockID, theBlock.Header.Time) propR1 := types.NewProposal(height, round, cs1.ValidRound, blockID, theBlock.Header.Time)
@ -868,7 +858,6 @@ func TestStateLock_PrevoteNilWhenLockedAndMissProposal(t *testing.T) {
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
@ -905,7 +894,6 @@ func TestStateLock_PrevoteNilWhenLockedAndMissProposal(t *testing.T) {
Check that cs1 prevotes nil instead of its locked block, but ensure Check that cs1 prevotes nil instead of its locked block, but ensure
that it maintains its locked block. that it maintains its locked block.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
@ -957,7 +945,6 @@ func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) {
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
@ -994,7 +981,6 @@ func TestStateLock_PrevoteNilWhenLockedAndDifferentProposal(t *testing.T) {
Check that cs1 prevotes nil instead of its locked block, but ensure Check that cs1 prevotes nil instead of its locked block, but ensure
that it maintains its locked block. that it maintains its locked block.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
@ -1059,7 +1045,6 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) {
This ensures that cs1 will lock on B in this round. This ensures that cs1 will lock on B in this round.
*/ */
t.Log("#### ONTO ROUND 0")
// start round and wait for propose and prevote // start round and wait for propose and prevote
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
@ -1101,7 +1086,6 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) {
Check that cs1 maintains its lock on B but precommits nil. Check that cs1 maintains its lock on B but precommits nil.
Send a precommit for nil from >2/3 of the validators to `cs1`. Send a precommit for nil from >2/3 of the validators to `cs1`.
*/ */
t.Log("#### ONTO ROUND 1")
round++ round++
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
@ -1136,7 +1120,6 @@ func TestStateLock_POLDoesNotUnlock(t *testing.T) {
Send the validator >2/3 prevotes for nil and ensure that it did not Send the validator >2/3 prevotes for nil and ensure that it did not
unlock its block at the end of the previous round. unlock its block at the end of the previous round.
*/ */
t.Log("#### ONTO ROUND 2")
round++ round++
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
cs3 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs3 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
@ -1193,7 +1176,6 @@ func TestStateLock_MissingProposalWhenPOLSeenDoesNotUpdateLock(t *testing.T) {
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
@ -1225,7 +1207,6 @@ func TestStateLock_MissingProposalWhenPOLSeenDoesNotUpdateLock(t *testing.T) {
Check that cs1 does not update its locked block to this missed block D. Check that cs1 does not update its locked block to this missed block D.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
@ -1281,7 +1262,6 @@ func TestStateLock_DoesNotLockOnOldProposal(t *testing.T) {
This ensures that cs1 will not lock on B. This ensures that cs1 will not lock on B.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
@ -1315,7 +1295,6 @@ func TestStateLock_DoesNotLockOnOldProposal(t *testing.T) {
cs1 saw a POL for the block it saw in round 0. We ensure that it does not cs1 saw a POL for the block it saw in round 0. We ensure that it does not
lock on this block, since it did not see a proposal for it in this round. lock on this block, since it did not see a proposal for it in this round.
*/ */
t.Log("### Starting Round 1")
round++ round++
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
@ -1379,7 +1358,6 @@ func TestStateLock_POLSafety1(t *testing.T) {
ensurePrecommit(t, voteCh, height, round) ensurePrecommit(t, voteCh, height, round)
ensureNewTimeout(t, timeoutWaitCh, height, round, cs1.config.Precommit(round).Nanoseconds()) ensureNewTimeout(t, timeoutWaitCh, height, round, cs1.config.Precommit(round).Nanoseconds())
t.Log("### ONTO ROUND 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ // moving to the next round round++ // moving to the next round
cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
@ -1407,8 +1385,6 @@ func TestStateLock_POLSafety1(t *testing.T) {
require.Nil(t, rs.LockedBlock, "we should not be locked!") require.Nil(t, rs.LockedBlock, "we should not be locked!")
t.Logf("new prop hash %v", fmt.Sprintf("%X", propBlock.Hash()))
// go to prevote, prevote for proposal block // go to prevote, prevote for proposal block
ensurePrevoteMatch(t, voteCh, height, round, r2BlockID.Hash) ensurePrevoteMatch(t, voteCh, height, round, r2BlockID.Hash)
@ -1428,7 +1404,6 @@ func TestStateLock_POLSafety1(t *testing.T) {
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("### ONTO ROUND 2")
/*Round3 /*Round3
we see the polka from round 1 but we shouldn't unlock! we see the polka from round 1 but we shouldn't unlock!
*/ */
@ -1494,7 +1469,7 @@ func TestStateLock_POLSafety2(t *testing.T) {
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ // moving to the next round round++ // moving to the next round
t.Log("### ONTO Round 1")
// jump in at round 1 // jump in at round 1
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
@ -1536,7 +1511,7 @@ func TestStateLock_POLSafety2(t *testing.T) {
addVotes(cs1, prevotes...) addVotes(cs1, prevotes...)
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("### ONTO Round 2")
/*Round2 /*Round2
// now we see the polka from round 1, but we shouldnt unlock // now we see the polka from round 1, but we shouldnt unlock
*/ */
@ -1579,7 +1554,6 @@ func TestState_PrevotePOLFromPreviousRound(t *testing.T) {
This ensures that cs1 will lock on B in this round but not precommit it. This ensures that cs1 will lock on B in this round but not precommit it.
*/ */
t.Log("### Starting Round 0")
startTestRound(ctx, cs1, height, round) startTestRound(ctx, cs1, height, round)
@ -1617,14 +1591,16 @@ func TestState_PrevotePOLFromPreviousRound(t *testing.T) {
cs1 has now seen greater than 2/3 of the voting power prevote D in this round cs1 has now seen greater than 2/3 of the voting power prevote D in this round
but cs1 did not see the proposal for D in this round so it will not prevote or precommit it. but cs1 did not see the proposal for D in this round so it will not prevote or precommit it.
*/ */
t.Log("### Starting Round 1")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
// Generate a new proposal block. // Generate a new proposal block.
cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication()) cs2 := newState(ctx, t, logger, cs1.state, vs2, kvstore.NewApplication())
cs2.ValidRound = 1 cs2.ValidRound = 1
propR1, propBlockR1 := decideProposal(ctx, t, cs2, vs2, vs2.Height, round) propR1, propBlockR1 := decideProposal(ctx, t, cs2, vs2, vs2.Height, round)
t.Log(propR1.POLRound)
assert.EqualValues(t, 1, propR1.POLRound)
propBlockR1Parts, err := propBlockR1.MakePartSet(partSize) propBlockR1Parts, err := propBlockR1.MakePartSet(partSize)
require.NoError(t, err) require.NoError(t, err)
r1BlockID := types.BlockID{ r1BlockID := types.BlockID{
@ -1658,7 +1634,6 @@ func TestState_PrevotePOLFromPreviousRound(t *testing.T) {
Send cs1 prevotes for nil and check that it still prevotes its locked block Send cs1 prevotes for nil and check that it still prevotes its locked block
and not the block that it prevoted. and not the block that it prevoted.
*/ */
t.Log("### Starting Round 2")
incrementRound(vs2, vs3, vs4) incrementRound(vs2, vs3, vs4)
round++ round++
propR2 := types.NewProposal(height, round, 1, r1BlockID, propBlockR1.Header.Time) propR2 := types.NewProposal(height, round, 1, r1BlockID, propBlockR1.Header.Time)
@ -1745,7 +1720,6 @@ func TestProposeValidBlock(t *testing.T) {
round++ // moving to the next round round++ // moving to the next round
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("### ONTO ROUND 1")
// timeout of propose // timeout of propose
ensureNewTimeout(t, timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds()) ensureNewTimeout(t, timeoutProposeCh, height, round, cs1.config.Propose(round).Nanoseconds())
@ -1768,7 +1742,6 @@ func TestProposeValidBlock(t *testing.T) {
round += 2 // increment by multiple rounds round += 2 // increment by multiple rounds
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("### ONTO ROUND 3")
ensureNewTimeout(t, timeoutWaitCh, height, round, cs1.config.Precommit(round).Nanoseconds()) ensureNewTimeout(t, timeoutWaitCh, height, round, cs1.config.Precommit(round).Nanoseconds())
@ -2470,7 +2443,6 @@ func TestStateHalt1(t *testing.T) {
ensureNewRound(t, newRoundCh, height, round) ensureNewRound(t, newRoundCh, height, round)
t.Log("### ONTO ROUND 1")
/*Round2 /*Round2
// we timeout and prevote // we timeout and prevote
// a polka happened but we didn't see it! // a polka happened but we didn't see it!


Loading…
Cancel
Save