mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 14:53:43 +01:00
test: refactor: Give unit test functions access to test state
Add unit test subclasses as needed so unit test functions that need to access members like m_rng can reference it directly.
This commit is contained in:
@@ -15,10 +15,23 @@
|
||||
|
||||
#include <boost/test/unit_test.hpp>
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(txrequest_tests, BasicTestingSetup)
|
||||
|
||||
namespace {
|
||||
|
||||
class Scenario;
|
||||
|
||||
struct TxRequestTest : BasicTestingSetup {
|
||||
std::chrono::microseconds RandomTime8s();
|
||||
std::chrono::microseconds RandomTime1y();
|
||||
void BuildSingleTest(Scenario& scenario, int config);
|
||||
void BuildPriorityTest(Scenario& scenario, int config);
|
||||
void BuildBigPriorityTest(Scenario& scenario, int peers);
|
||||
void BuildRequestOrderTest(Scenario& scenario, int config);
|
||||
void BuildWtxidTest(Scenario& scenario, int config);
|
||||
void BuildTimeBackwardsTest(Scenario& scenario);
|
||||
void BuildWeirdRequestsTest(Scenario& scenario);
|
||||
void TestInterleavedScenarios();
|
||||
};
|
||||
|
||||
constexpr std::chrono::microseconds MIN_TIME = std::chrono::microseconds::min();
|
||||
constexpr std::chrono::microseconds MAX_TIME = std::chrono::microseconds::max();
|
||||
constexpr std::chrono::microseconds MICROSECOND = std::chrono::microseconds{1};
|
||||
@@ -51,8 +64,8 @@ struct Runner
|
||||
std::multiset<std::pair<NodeId, GenTxid>> expired;
|
||||
};
|
||||
|
||||
std::chrono::microseconds RandomTime8s() { return std::chrono::microseconds{1 + InsecureRandBits(23)}; }
|
||||
std::chrono::microseconds RandomTime1y() { return std::chrono::microseconds{1 + InsecureRandBits(45)}; }
|
||||
std::chrono::microseconds TxRequestTest::RandomTime8s() { return std::chrono::microseconds{1 + InsecureRandBits(23)}; }
|
||||
std::chrono::microseconds TxRequestTest::RandomTime1y() { return std::chrono::microseconds{1 + InsecureRandBits(45)}; }
|
||||
|
||||
/** A proxy for a Runner that helps build a sequence of consecutive test actions on a TxRequestTracker.
|
||||
*
|
||||
@@ -245,7 +258,7 @@ public:
|
||||
*
|
||||
* config is an integer in [0, 32), which controls which variant of the test is used.
|
||||
*/
|
||||
void BuildSingleTest(Scenario& scenario, int config)
|
||||
void TxRequestTest::BuildSingleTest(Scenario& scenario, int config)
|
||||
{
|
||||
auto peer = scenario.NewPeer();
|
||||
auto gtxid = scenario.NewGTxid();
|
||||
@@ -305,7 +318,7 @@ void BuildSingleTest(Scenario& scenario, int config)
|
||||
*
|
||||
* config is an integer in [0, 32), which controls which variant of the test is used.
|
||||
*/
|
||||
void BuildPriorityTest(Scenario& scenario, int config)
|
||||
void TxRequestTest::BuildPriorityTest(Scenario& scenario, int config)
|
||||
{
|
||||
scenario.SetTestName(strprintf("Priority(config=%i)", config));
|
||||
|
||||
@@ -367,7 +380,7 @@ void BuildPriorityTest(Scenario& scenario, int config)
|
||||
|
||||
/** Add to scenario a randomized test in which N peers announce the same transaction, to verify
|
||||
* the order in which they are requested. */
|
||||
void BuildBigPriorityTest(Scenario& scenario, int peers)
|
||||
void TxRequestTest::BuildBigPriorityTest(Scenario& scenario, int peers)
|
||||
{
|
||||
scenario.SetTestName(strprintf("BigPriority(peers=%i)", peers));
|
||||
|
||||
@@ -454,7 +467,7 @@ void BuildBigPriorityTest(Scenario& scenario, int peers)
|
||||
*
|
||||
* config is an integer in [0, 4) inclusive, and selects the variant of the test.
|
||||
*/
|
||||
void BuildRequestOrderTest(Scenario& scenario, int config)
|
||||
void TxRequestTest::BuildRequestOrderTest(Scenario& scenario, int config)
|
||||
{
|
||||
scenario.SetTestName(strprintf("RequestOrder(config=%i)", config));
|
||||
|
||||
@@ -489,7 +502,7 @@ void BuildRequestOrderTest(Scenario& scenario, int config)
|
||||
*
|
||||
* config is an integer in [0, 4) inclusive, and selects the variant of the test used.
|
||||
*/
|
||||
void BuildWtxidTest(Scenario& scenario, int config)
|
||||
void TxRequestTest::BuildWtxidTest(Scenario& scenario, int config)
|
||||
{
|
||||
scenario.SetTestName(strprintf("Wtxid(config=%i)", config));
|
||||
|
||||
@@ -559,7 +572,7 @@ void BuildWtxidTest(Scenario& scenario, int config)
|
||||
}
|
||||
|
||||
/** Add to scenario a test that exercises clocks that go backwards. */
|
||||
void BuildTimeBackwardsTest(Scenario& scenario)
|
||||
void TxRequestTest::BuildTimeBackwardsTest(Scenario& scenario)
|
||||
{
|
||||
auto peer1 = scenario.NewPeer();
|
||||
auto peer2 = scenario.NewPeer();
|
||||
@@ -605,7 +618,7 @@ void BuildTimeBackwardsTest(Scenario& scenario)
|
||||
}
|
||||
|
||||
/** Add to scenario a test that involves RequestedTx() calls for txhashes not returned by GetRequestable. */
|
||||
void BuildWeirdRequestsTest(Scenario& scenario)
|
||||
void TxRequestTest::BuildWeirdRequestsTest(Scenario& scenario)
|
||||
{
|
||||
auto peer1 = scenario.NewPeer();
|
||||
auto peer2 = scenario.NewPeer();
|
||||
@@ -682,19 +695,19 @@ void BuildWeirdRequestsTest(Scenario& scenario)
|
||||
scenario.Check(peer2, {}, 0, 0, 0, "q23");
|
||||
}
|
||||
|
||||
void TestInterleavedScenarios()
|
||||
void TxRequestTest::TestInterleavedScenarios()
|
||||
{
|
||||
// Create a list of functions which add tests to scenarios.
|
||||
std::vector<std::function<void(Scenario&)>> builders;
|
||||
// Add instances of every test, for every configuration.
|
||||
for (int n = 0; n < 64; ++n) {
|
||||
builders.emplace_back([n](Scenario& scenario){ BuildWtxidTest(scenario, n); });
|
||||
builders.emplace_back([n](Scenario& scenario){ BuildRequestOrderTest(scenario, n & 3); });
|
||||
builders.emplace_back([n](Scenario& scenario){ BuildSingleTest(scenario, n & 31); });
|
||||
builders.emplace_back([n](Scenario& scenario){ BuildPriorityTest(scenario, n & 31); });
|
||||
builders.emplace_back([n](Scenario& scenario){ BuildBigPriorityTest(scenario, (n & 7) + 1); });
|
||||
builders.emplace_back([](Scenario& scenario){ BuildTimeBackwardsTest(scenario); });
|
||||
builders.emplace_back([](Scenario& scenario){ BuildWeirdRequestsTest(scenario); });
|
||||
builders.emplace_back([this, n](Scenario& scenario) { BuildWtxidTest(scenario, n); });
|
||||
builders.emplace_back([this, n](Scenario& scenario) { BuildRequestOrderTest(scenario, n & 3); });
|
||||
builders.emplace_back([this, n](Scenario& scenario) { BuildSingleTest(scenario, n & 31); });
|
||||
builders.emplace_back([this, n](Scenario& scenario) { BuildPriorityTest(scenario, n & 31); });
|
||||
builders.emplace_back([this, n](Scenario& scenario) { BuildBigPriorityTest(scenario, (n & 7) + 1); });
|
||||
builders.emplace_back([this](Scenario& scenario) { BuildTimeBackwardsTest(scenario); });
|
||||
builders.emplace_back([this](Scenario& scenario) { BuildWeirdRequestsTest(scenario); });
|
||||
}
|
||||
// Randomly shuffle all those functions.
|
||||
std::shuffle(builders.begin(), builders.end(), g_insecure_rand_ctx);
|
||||
@@ -730,6 +743,8 @@ void TestInterleavedScenarios()
|
||||
|
||||
} // namespace
|
||||
|
||||
BOOST_FIXTURE_TEST_SUITE(txrequest_tests, TxRequestTest)
|
||||
|
||||
BOOST_AUTO_TEST_CASE(TxRequestTest)
|
||||
{
|
||||
for (int i = 0; i < 5; ++i) {
|
||||
|
||||
Reference in New Issue
Block a user