diff --git a/src/avalanche/test/voterecord_tests.cpp b/src/avalanche/test/voterecord_tests.cpp --- a/src/avalanche/test/voterecord_tests.cpp +++ b/src/avalanche/test/voterecord_tests.cpp @@ -10,25 +10,28 @@ using namespace avalanche; -NodeId nextNodeId(NodeId &nodeid) { - nodeid++; - if (nodeid >= 8) { - nodeid = 0; +struct VoteRecordFixture { + NodeId currentNodeId = -1; + + NodeId nextNodeId() { + currentNodeId++; + if (currentNodeId >= 8) { + currentNodeId = 0; + } + return currentNodeId; } - return nodeid; -} +}; -BOOST_FIXTURE_TEST_SUITE(voterecord_tests, TestingSetup) +BOOST_FIXTURE_TEST_SUITE(voterecord_tests, VoteRecordFixture) #define REGISTER_VOTE_AND_CHECK(vr, vote, state, finalized, stale, confidence) \ - vr.registerVote(nextNodeId(nodeid), vote); \ + vr.registerVote(nextNodeId(), vote); \ BOOST_CHECK_EQUAL(vr.isAccepted(), state); \ BOOST_CHECK_EQUAL(vr.hasFinalized(), finalized); \ BOOST_CHECK_EQUAL(vr.isStale(), stale); \ BOOST_CHECK_EQUAL(vr.getConfidence(), confidence); BOOST_AUTO_TEST_CASE(vote_record) { - NodeId nodeid = -1; VoteRecord vraccepted(true); // Check initial state. @@ -134,7 +137,6 @@ // Test some cases where confidence never advances BOOST_AUTO_TEST_CASE(stale_vote_always_inconclusive) { - NodeId nodeid = -1; // Setup a record that is inconclusive so far VoteRecord vr(false); @@ -156,8 +158,6 @@ // Test all cases where records reach a specific confidence level and then go // stale. BOOST_AUTO_TEST_CASE(stale_vote_at_all_confidence_levels) { - NodeId nodeid = -1; - for (uint32_t vote = 0; vote <= 1; vote++) { for (uint32_t confidence = 0; confidence < AVALANCHE_FINALIZATION_SCORE; confidence++) { @@ -201,22 +201,21 @@ // Test some cases where confidence may flip flop and then goes stale. BOOST_AUTO_TEST_CASE(stale_vote_random_then_inconclusive) { - NodeId nodeid = -1; VoteRecord vr(false); for (uint32_t i = 0; i < AVALANCHE_FINALIZATION_SCORE - 14; i++) { // Vote randomly. Confidence changes are ok. - vr.registerVote(nextNodeId(nodeid), InsecureRand32()); + vr.registerVote(nextNodeId(), InsecureRand32()); BOOST_CHECK_EQUAL(vr.hasFinalized(), false); BOOST_CHECK_EQUAL(vr.isStale(), false); } // Reset confidence, no matter what it is right now for (uint32_t i = 0; i < 7; i++) { - vr.registerVote(nextNodeId(nodeid), 0); + vr.registerVote(nextNodeId(), 0); } for (uint32_t i = 0; i < 7; i++) { - vr.registerVote(nextNodeId(nodeid), 1); + vr.registerVote(nextNodeId(), 1); } BOOST_CHECK_EQUAL(vr.hasFinalized(), false); BOOST_CHECK_EQUAL(vr.isStale(), false); @@ -235,8 +234,6 @@ // Test all cases where confidence flips as much as possible, ending at all // possible confidence levels. BOOST_AUTO_TEST_CASE(stale_vote_with_confidence_flips) { - NodeId nodeid = -1; - // Start testing with yes or no votes for (uint32_t voteInit = 0; voteInit <= 1; voteInit++) { // Test stalling at all confidence levels @@ -313,18 +310,17 @@ BOOST_AUTO_TEST_CASE(duplicate_votes) { VoteRecord vr(true); - NodeId nodeid = -1; // Register some votes, expecting confidence to increase for (auto i = 0; i < 7; i++) { BOOST_CHECK_EQUAL(vr.getConfidence(), 0); - BOOST_CHECK(!vr.registerVote(nextNodeId(nodeid), 0)); + BOOST_CHECK(!vr.registerVote(nextNodeId(), 0)); } BOOST_CHECK_EQUAL(vr.getConfidence(), 1); // Multiple duplicate votes do not advance confidence for (auto i = 0; i < 8; i++) { - BOOST_CHECK(!vr.registerVote(nodeid, 0)); + BOOST_CHECK(!vr.registerVote(currentNodeId, 0)); BOOST_CHECK_EQUAL(vr.getConfidence(), 1); } @@ -332,22 +328,22 @@ // increase when duplicates are not used. auto expectedConfidence = 1; for (auto i = 0; i < 8; i++) { - BOOST_CHECK(!vr.registerVote(nodeid, 0)); + BOOST_CHECK(!vr.registerVote(currentNodeId, 0)); BOOST_CHECK_EQUAL(vr.getConfidence(), expectedConfidence); for (auto j = i; j < 8; j++) { - BOOST_CHECK(!vr.registerVote(nextNodeId(nodeid), 0)); + BOOST_CHECK(!vr.registerVote(nextNodeId(), 0)); BOOST_CHECK_EQUAL(vr.getConfidence(), ++expectedConfidence); } } // Register enough votes to get just before finalization for (auto i = 0; i < 90; i++) { - BOOST_CHECK(!vr.registerVote(nextNodeId(nodeid), 0)); + BOOST_CHECK(!vr.registerVote(nextNodeId(), 0)); BOOST_CHECK_EQUAL(vr.getConfidence(), ++expectedConfidence); } // Sanity check that finalization occurs on the expected vote - BOOST_CHECK(vr.registerVote(nextNodeId(nodeid), 0)); + BOOST_CHECK(vr.registerVote(nextNodeId(), 0)); BOOST_CHECK(vr.hasFinalized()); }