Adding the ability to pass in a set of initialization blocks to a test ledger_context.
Blocks must all return progress when processed.
This commit is contained in:
parent
6d7e63670c
commit
ce58418bb1
2 changed files with 80 additions and 4 deletions
|
|
@ -1,12 +1,19 @@
|
||||||
#include <nano/node/node.hpp>
|
#include <nano/node/node.hpp>
|
||||||
#include <nano/test_common/ledger.hpp>
|
#include <nano/test_common/ledger.hpp>
|
||||||
|
|
||||||
nano::test::context::ledger_context::ledger_context () :
|
nano::test::context::ledger_context::ledger_context (std::deque<std::shared_ptr<nano::block>> && blocks) :
|
||||||
store_m{ nano::make_store (logger, nano::unique_path (), nano::dev::constants) },
|
store_m{ nano::make_store (logger, nano::unique_path (), nano::dev::constants) },
|
||||||
ledger_m{ *store_m, stats_m, nano::dev::constants }
|
ledger_m{ *store_m, stats_m, nano::dev::constants },
|
||||||
|
blocks_m{ blocks }
|
||||||
{
|
{
|
||||||
debug_assert (!store_m->init_error ());
|
debug_assert (!store_m->init_error ());
|
||||||
store_m->initialize (store_m->tx_begin_write (), ledger_m.cache, ledger_m.constants);
|
auto tx = store_m->tx_begin_write ();
|
||||||
|
store_m->initialize (tx, ledger_m.cache, ledger_m.constants);
|
||||||
|
for (auto const & i : blocks_m)
|
||||||
|
{
|
||||||
|
auto process_result = ledger_m.process (tx, *i);
|
||||||
|
debug_assert (process_result.code == nano::process_result::progress);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
nano::ledger & nano::test::context::ledger_context::ledger ()
|
nano::ledger & nano::test::context::ledger_context::ledger ()
|
||||||
|
|
@ -24,7 +31,67 @@ nano::stat & nano::test::context::ledger_context::stats ()
|
||||||
return stats_m;
|
return stats_m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::deque<std::shared_ptr<nano::block>> const & nano::test::context::ledger_context::blocks () const
|
||||||
|
{
|
||||||
|
return blocks_m;
|
||||||
|
}
|
||||||
|
|
||||||
auto nano::test::context::ledger_empty () -> ledger_context
|
auto nano::test::context::ledger_empty () -> ledger_context
|
||||||
{
|
{
|
||||||
return ledger_context{};
|
return ledger_context{};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto nano::test::context::ledger_send_receive () -> ledger_context
|
||||||
|
{
|
||||||
|
std::deque<std::shared_ptr<nano::block>> blocks;
|
||||||
|
nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits<unsigned>::max () };
|
||||||
|
nano::block_builder builder;
|
||||||
|
auto send = builder.state ()
|
||||||
|
.make_block ()
|
||||||
|
.account (nano::dev::genesis_key.pub)
|
||||||
|
.previous (nano::dev::genesis->hash ())
|
||||||
|
.representative (nano::dev::genesis_key.pub)
|
||||||
|
.balance (nano::dev::constants.genesis_amount - 1)
|
||||||
|
.link (nano::dev::genesis_key.pub)
|
||||||
|
.sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
|
||||||
|
.work (*pool.generate (nano::dev::genesis->hash ()))
|
||||||
|
.build_shared ();
|
||||||
|
blocks.push_back (send);
|
||||||
|
auto receive = builder.state ()
|
||||||
|
.make_block ()
|
||||||
|
.account (nano::dev::genesis_key.pub)
|
||||||
|
.previous (send->hash ())
|
||||||
|
.representative (nano::dev::genesis_key.pub)
|
||||||
|
.balance (nano::dev::constants.genesis_amount)
|
||||||
|
.link (send->hash ())
|
||||||
|
.sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
|
||||||
|
.work (*pool.generate (send->hash ()))
|
||||||
|
.build_shared ();
|
||||||
|
blocks.push_back (receive);
|
||||||
|
return ledger_context{ std::move (blocks) };
|
||||||
|
}
|
||||||
|
|
||||||
|
auto nano::test::context::ledger_send_receive_legacy () -> ledger_context
|
||||||
|
{
|
||||||
|
std::deque<std::shared_ptr<nano::block>> blocks;
|
||||||
|
nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits<unsigned>::max () };
|
||||||
|
nano::block_builder builder;
|
||||||
|
auto send = builder.send ()
|
||||||
|
.make_block ()
|
||||||
|
.previous (nano::dev::genesis->hash ())
|
||||||
|
.destination (nano::dev::genesis_key.pub)
|
||||||
|
.balance (nano::dev::constants.genesis_amount - 1)
|
||||||
|
.sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
|
||||||
|
.work (*pool.generate (nano::dev::genesis->hash ()))
|
||||||
|
.build_shared ();
|
||||||
|
blocks.push_back (send);
|
||||||
|
auto receive = builder.receive ()
|
||||||
|
.make_block ()
|
||||||
|
.previous (send->hash ())
|
||||||
|
.source (send->hash ())
|
||||||
|
.sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
|
||||||
|
.work (*pool.generate (send->hash ()))
|
||||||
|
.build_shared ();
|
||||||
|
blocks.push_back (receive);
|
||||||
|
return ledger_context{ std::move (blocks) };
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,19 +15,28 @@ namespace test
|
||||||
class ledger_context
|
class ledger_context
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ledger_context ();
|
/** 'blocks' initialises the ledger with each block in-order
|
||||||
|
Blocks must all return process_result::progress when processed */
|
||||||
|
ledger_context (std::deque<std::shared_ptr<nano::block>> && blocks = std::deque<std::shared_ptr<nano::block>>{});
|
||||||
nano::ledger & ledger ();
|
nano::ledger & ledger ();
|
||||||
nano::store & store ();
|
nano::store & store ();
|
||||||
nano::stat & stats ();
|
nano::stat & stats ();
|
||||||
|
std::deque<std::shared_ptr<nano::block>> const & blocks () const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
nano::logger_mt logger;
|
nano::logger_mt logger;
|
||||||
std::unique_ptr<nano::store> store_m;
|
std::unique_ptr<nano::store> store_m;
|
||||||
nano::stat stats_m;
|
nano::stat stats_m;
|
||||||
nano::ledger ledger_m;
|
nano::ledger ledger_m;
|
||||||
|
std::deque<std::shared_ptr<nano::block>> blocks_m;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** Only a genesis block */
|
||||||
ledger_context ledger_empty ();
|
ledger_context ledger_empty ();
|
||||||
|
/** Send/receive pair of state blocks on the genesis account*/
|
||||||
|
ledger_context ledger_send_receive ();
|
||||||
|
/** Send/receive pair of legacy blocks on the genesis account*/
|
||||||
|
ledger_context ledger_send_receive_legacy ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue