aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorjeffro256 <jeffro256@tutanota.com>2023-06-30 14:52:43 -0500
committerjeffro256 <jeffro256@tutanota.com>2023-07-01 07:12:53 -0500
commitffbf9f4766945f33b80366c414a5721ce90e5a2e (patch)
treead1a816d0dde18062afaad3357e88ef0d062375a /tests
parentAvoid nullptr dereference when constructing Blockchain and tx_memory_pool (diff)
downloadmonero-ffbf9f4766945f33b80366c414a5721ce90e5a2e.tar.xz
blockchain_and_pool: move to crytonote_core and enforce its usage
Diffstat (limited to 'tests')
-rw-r--r--tests/block_weight/block_weight.cpp9
-rw-r--r--tests/core_tests/chaingen.cpp17
-rw-r--r--tests/unit_tests/long_term_block_weight.cpp11
-rw-r--r--tests/unit_tests/output_distribution.cpp12
-rw-r--r--tests/unit_tests/scaling_2021.cpp7
5 files changed, 18 insertions, 38 deletions
diff --git a/tests/block_weight/block_weight.cpp b/tests/block_weight/block_weight.cpp
index 7cd0d572b..4b00fc63f 100644
--- a/tests/block_weight/block_weight.cpp
+++ b/tests/block_weight/block_weight.cpp
@@ -30,8 +30,6 @@
#include <stdio.h>
#include <math.h>
-#include "cryptonote_core/blockchain.h"
-#include "cryptonote_core/tx_pool.h"
#include "cryptonote_core/cryptonote_core.h"
#include "blockchain_db/testdb.h"
@@ -110,9 +108,6 @@ private:
}
#define PREFIX_WINDOW(hf_version,window) \
- std::unique_ptr<cryptonote::Blockchain> bc; \
- cryptonote::tx_memory_pool txpool(*bc); \
- bc.reset(new cryptonote::Blockchain(txpool)); \
struct get_test_options { \
const std::pair<uint8_t, uint64_t> hard_forks[3]; \
const cryptonote::test_options test_options = { \
@@ -121,7 +116,9 @@ private:
}; \
get_test_options(): hard_forks{std::make_pair(1, (uint64_t)0), std::make_pair((uint8_t)hf_version, (uint64_t)LONG_TERM_BLOCK_WEIGHT_WINDOW), std::make_pair((uint8_t)0, (uint64_t)0)} {} \
} opts; \
- cryptonote::Blockchain *blockchain = bc.get(); \
+ cryptonote::BlockchainAndPool bap; \
+ cryptonote::Blockchain *blockchain = &bap.blockchain; \
+ cryptonote::Blockchain *bc = blockchain; \
bool r = blockchain->init(new TestDB(), cryptonote::FAKECHAIN, true, &opts.test_options, 0, NULL); \
if (!r) \
{ \
diff --git a/tests/core_tests/chaingen.cpp b/tests/core_tests/chaingen.cpp
index 9f6fe5387..b66aa7924 100644
--- a/tests/core_tests/chaingen.cpp
+++ b/tests/core_tests/chaingen.cpp
@@ -143,9 +143,8 @@ namespace
}
-static std::unique_ptr<cryptonote::Blockchain> init_blockchain(const std::vector<test_event_entry> & events, cryptonote::network_type nettype)
+static std::unique_ptr<cryptonote::BlockchainAndPool> init_blockchain(const std::vector<test_event_entry> & events, cryptonote::network_type nettype)
{
- std::unique_ptr<cryptonote::Blockchain> bc;
v_hardforks_t hardforks;
cryptonote::test_options test_options_tmp{nullptr, 0};
const cryptonote::test_options * test_options = &test_options_tmp;
@@ -159,10 +158,8 @@ static std::unique_ptr<cryptonote::Blockchain> init_blockchain(const std::vector
test_options_tmp.hard_forks = hardforks.data();
test_options = &test_options_tmp;
- cryptonote::tx_memory_pool txpool(*bc);
- bc.reset(new cryptonote::Blockchain(txpool));
+ std::unique_ptr<cryptonote::BlockchainAndPool> bap(new BlockchainAndPool());
- cryptonote::Blockchain *blockchain = bc.get();
auto bdb = new TestDB();
BOOST_FOREACH(const test_event_entry &ev, events)
@@ -177,9 +174,9 @@ static std::unique_ptr<cryptonote::Blockchain> init_blockchain(const std::vector
bdb->add_block(*blk, 1, 1, 1, 0, 0, blk_hash);
}
- bool r = blockchain->init(bdb, nettype, true, test_options, 2, nullptr);
+ bool r = bap->blockchain.init(bdb, nettype, true, test_options, 2, nullptr);
CHECK_AND_ASSERT_THROW_MES(r, "could not init blockchain from events");
- return bc;
+ return bap;
}
void test_generator::get_block_chain(std::vector<block_info>& blockchain, const crypto::hash& head, size_t n) const
@@ -393,7 +390,7 @@ bool test_generator::construct_block_manually_tx(cryptonote::block& blk, const c
void test_generator::fill_nonce(cryptonote::block& blk, const difficulty_type& diffic, uint64_t height)
{
const cryptonote::Blockchain *blockchain = nullptr;
- std::unique_ptr<cryptonote::Blockchain> bc;
+ std::unique_ptr<cryptonote::BlockchainAndPool> bap;
if (blk.major_version >= RX_BLOCK_VERSION && diffic > 1)
{
@@ -403,8 +400,8 @@ void test_generator::fill_nonce(cryptonote::block& blk, const difficulty_type& d
}
else
{
- bc = init_blockchain(*m_events, m_nettype);
- blockchain = bc.get();
+ bap = init_blockchain(*m_events, m_nettype);
+ blockchain = &bap->blockchain;
}
}
diff --git a/tests/unit_tests/long_term_block_weight.cpp b/tests/unit_tests/long_term_block_weight.cpp
index b9ce2b247..e52bd1955 100644
--- a/tests/unit_tests/long_term_block_weight.cpp
+++ b/tests/unit_tests/long_term_block_weight.cpp
@@ -106,16 +106,9 @@ static uint32_t lcg()
}
-struct BlockchainAndPool
-{
- cryptonote::tx_memory_pool txpool;
- cryptonote::Blockchain bc;
- BlockchainAndPool(): txpool(bc), bc(txpool) {}
-};
-
#define PREFIX_WINDOW(hf_version,window) \
- BlockchainAndPool bap; \
- cryptonote::Blockchain *bc = &bap.bc; \
+ cryptonote::BlockchainAndPool bap; \
+ cryptonote::Blockchain *bc = &bap.blockchain; \
struct get_test_options { \
const std::pair<uint8_t, uint64_t> hard_forks[3]; \
const cryptonote::test_options test_options = { \
diff --git a/tests/unit_tests/output_distribution.cpp b/tests/unit_tests/output_distribution.cpp
index ab474a7d8..038c19874 100644
--- a/tests/unit_tests/output_distribution.cpp
+++ b/tests/unit_tests/output_distribution.cpp
@@ -30,10 +30,7 @@
#include "gtest/gtest.h"
#include "misc_log_ex.h"
#include "rpc/rpc_handler.h"
-#include "blockchain_db/blockchain_db.h"
#include "cryptonote_core/cryptonote_core.h"
-#include "cryptonote_core/tx_pool.h"
-#include "cryptonote_core/blockchain.h"
#include "blockchain_db/testdb.h"
static const uint64_t test_distribution[32] = {
@@ -77,9 +74,6 @@ public:
bool get_output_distribution(uint64_t amount, uint64_t from, uint64_t to, uint64_t &start_height, std::vector<uint64_t> &distribution, uint64_t &base)
{
- std::unique_ptr<cryptonote::Blockchain> bc;
- cryptonote::tx_memory_pool txpool(*bc);
- bc.reset(new cryptonote::Blockchain(txpool));
struct get_test_options {
const std::pair<uint8_t, uint64_t> hard_forks[2];
const cryptonote::test_options test_options = {
@@ -87,9 +81,9 @@ bool get_output_distribution(uint64_t amount, uint64_t from, uint64_t to, uint64
};
get_test_options():hard_forks{std::make_pair((uint8_t)1, (uint64_t)0), std::make_pair((uint8_t)0, (uint64_t)0)}{}
} opts;
- cryptonote::Blockchain *blockchain = bc.get();
- bool r = blockchain->init(new TestDB(test_distribution_size), cryptonote::FAKECHAIN, true, &opts.test_options, 0, NULL);
- return r && bc->get_output_distribution(amount, from, to, start_height, distribution, base);
+ cryptonote::BlockchainAndPool bap;
+ bool r = bap.blockchain.init(new TestDB(test_distribution_size), cryptonote::FAKECHAIN, true, &opts.test_options, 0, NULL);
+ return r && bap.blockchain.get_output_distribution(amount, from, to, start_height, distribution, base);
}
crypto::hash get_block_hash(uint64_t height)
diff --git a/tests/unit_tests/scaling_2021.cpp b/tests/unit_tests/scaling_2021.cpp
index 024a4b4fd..d90f0f9e6 100644
--- a/tests/unit_tests/scaling_2021.cpp
+++ b/tests/unit_tests/scaling_2021.cpp
@@ -50,9 +50,6 @@ public:
}
#define PREFIX_WINDOW(hf_version,window) \
- std::unique_ptr<cryptonote::Blockchain> bc; \
- cryptonote::tx_memory_pool txpool(*bc); \
- bc.reset(new cryptonote::Blockchain(txpool)); \
struct get_test_options { \
const std::pair<uint8_t, uint64_t> hard_forks[3]; \
const cryptonote::test_options test_options = { \
@@ -61,7 +58,9 @@ public:
}; \
get_test_options(): hard_forks{std::make_pair(1, (uint64_t)0), std::make_pair((uint8_t)hf_version, (uint64_t)1), std::make_pair((uint8_t)0, (uint64_t)0)} {} \
} opts; \
- cryptonote::Blockchain *blockchain = bc.get(); \
+ cryptonote::BlockchainAndPool bap; \
+ cryptonote::Blockchain *blockchain = &bap.blockchain; \
+ cryptonote::Blockchain *bc = blockchain; \
bool r = blockchain->init(new TestDB(), cryptonote::FAKECHAIN, true, &opts.test_options, 0, NULL); \
ASSERT_TRUE(r)