mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-05 16:57:56 +00:00
Remove beast::Journal default constructor
This commit is contained in:
@@ -38,7 +38,7 @@
|
|||||||
namespace ripple {
|
namespace ripple {
|
||||||
|
|
||||||
RCLValidatedLedger::RCLValidatedLedger(MakeGenesis)
|
RCLValidatedLedger::RCLValidatedLedger(MakeGenesis)
|
||||||
: ledgerID_{0}, ledgerSeq_{0}
|
: ledgerID_{0}, ledgerSeq_{0}, j_{beast::Journal::getNullSink()}
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,8 @@ Json::Value fillJsonTx (LedgerFill const& fill,
|
|||||||
if (account != amount.getIssuer())
|
if (account != amount.getIssuer())
|
||||||
{
|
{
|
||||||
auto const ownerFunds = accountFunds(fill.ledger,
|
auto const ownerFunds = accountFunds(fill.ledger,
|
||||||
account, amount, fhIGNORE_FREEZE, beast::Journal());
|
account, amount, fhIGNORE_FREEZE,
|
||||||
|
beast::Journal {beast::Journal::getNullSink()});
|
||||||
txJson[jss::owner_funds] = ownerFunds.getText ();
|
txJson[jss::owner_funds] = ownerFunds.getText ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ struct Fees;
|
|||||||
class LoadFeeTrack final
|
class LoadFeeTrack final
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit LoadFeeTrack (beast::Journal journal = beast::Journal())
|
explicit LoadFeeTrack (beast::Journal journal =
|
||||||
|
beast::Journal(beast::Journal::getNullSink()))
|
||||||
: j_ (journal)
|
: j_ (journal)
|
||||||
, localTxnLoadFee_ (lftNormalFee)
|
, localTxnLoadFee_ (lftNormalFee)
|
||||||
, remoteTxnLoadFee_ (lftNormalFee)
|
, remoteTxnLoadFee_ (lftNormalFee)
|
||||||
|
|||||||
@@ -189,7 +189,8 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit
|
explicit
|
||||||
ManifestCache (beast::Journal j = beast::Journal())
|
ManifestCache (beast::Journal j =
|
||||||
|
beast::Journal(beast::Journal::getNullSink()))
|
||||||
: j_ (j)
|
: j_ (j)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,9 @@ private:
|
|||||||
|
|
||||||
// Just instantiate without any logic in case online delete is not
|
// Just instantiate without any logic in case online delete is not
|
||||||
// configured
|
// configured
|
||||||
explicit SavedStateDB() = default;
|
explicit SavedStateDB()
|
||||||
|
: journal_ {beast::Journal::getNullSink()}
|
||||||
|
{ }
|
||||||
|
|
||||||
// opens database and, if necessary, creates & initializes its tables.
|
// opens database and, if necessary, creates & initializes its tables.
|
||||||
void init (BasicConfig const& config, std::string const& dbName);
|
void init (BasicConfig const& config, std::string const& dbName);
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public:
|
|||||||
ApplyContext (Application& app, OpenView& base,
|
ApplyContext (Application& app, OpenView& base,
|
||||||
STTx const& tx, TER preclaimResult,
|
STTx const& tx, TER preclaimResult,
|
||||||
std::uint64_t baseFee, ApplyFlags flags,
|
std::uint64_t baseFee, ApplyFlags flags,
|
||||||
beast::Journal = {});
|
beast::Journal = beast::Journal{beast::Journal::getNullSink()});
|
||||||
|
|
||||||
Application& app;
|
Application& app;
|
||||||
STTx const& tx;
|
STTx const& tx;
|
||||||
|
|||||||
@@ -139,7 +139,8 @@ public:
|
|||||||
BasicTaker (
|
BasicTaker (
|
||||||
CrossType cross_type, AccountID const& account, Amounts const& amount,
|
CrossType cross_type, AccountID const& account, Amounts const& amount,
|
||||||
Quality const& quality, std::uint32_t flags, Rate const& rate_in,
|
Quality const& quality, std::uint32_t flags, Rate const& rate_in,
|
||||||
Rate const& rate_out, beast::Journal journal = beast::Journal ());
|
Rate const& rate_out,
|
||||||
|
beast::Journal journal = beast::Journal{beast::Journal::getNullSink()});
|
||||||
|
|
||||||
virtual ~BasicTaker () = default;
|
virtual ~BasicTaker () = default;
|
||||||
|
|
||||||
|
|||||||
@@ -58,7 +58,8 @@ public:
|
|||||||
|
|
||||||
PreclaimContext(Application& app_, ReadView const& view_,
|
PreclaimContext(Application& app_, ReadView const& view_,
|
||||||
TER preflightResult_, STTx const& tx_,
|
TER preflightResult_, STTx const& tx_,
|
||||||
ApplyFlags flags_, beast::Journal j_ = {})
|
ApplyFlags flags_,
|
||||||
|
beast::Journal j_ = beast::Journal{beast::Journal::getNullSink()})
|
||||||
: app(app_)
|
: app(app_)
|
||||||
, view(view_)
|
, view(view_)
|
||||||
, preflightResult(preflightResult_)
|
, preflightResult(preflightResult_)
|
||||||
|
|||||||
@@ -253,10 +253,8 @@ static_assert(std::is_nothrow_destructible<Stream>::value == true, "");
|
|||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
/** Create a journal that writes to the null sink. */
|
/** Journal has no default constructor. */
|
||||||
Journal ()
|
Journal () = delete;
|
||||||
: Journal (getNullSink())
|
|
||||||
{ }
|
|
||||||
|
|
||||||
/** Create a journal that writes to the specified sink. */
|
/** Create a journal that writes to the specified sink. */
|
||||||
explicit Journal (Sink& sink)
|
explicit Journal (Sink& sink)
|
||||||
@@ -319,7 +317,7 @@ static_assert(std::is_nothrow_destructible<Stream>::value == true, "");
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifndef __INTELLISENSE__
|
#ifndef __INTELLISENSE__
|
||||||
static_assert(std::is_default_constructible<Journal>::value == true, "");
|
static_assert(std::is_default_constructible<Journal>::value == false, "");
|
||||||
static_assert(std::is_copy_constructible<Journal>::value == true, "");
|
static_assert(std::is_copy_constructible<Journal>::value == true, "");
|
||||||
static_assert(std::is_move_constructible<Journal>::value == true, "");
|
static_assert(std::is_move_constructible<Journal>::value == true, "");
|
||||||
static_assert(std::is_copy_assignable<Journal>::value == true, "");
|
static_assert(std::is_copy_assignable<Journal>::value == true, "");
|
||||||
|
|||||||
@@ -184,7 +184,9 @@ public:
|
|||||||
std::unordered_set<uint256, beast::uhash<>> features;
|
std::unordered_set<uint256, beast::uhash<>> features;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Config() = default;
|
Config()
|
||||||
|
: j_ {beast::Journal::getNullSink()}
|
||||||
|
{ }
|
||||||
|
|
||||||
int getSize (SizedItemName) const;
|
int getSize (SizedItemName) const;
|
||||||
/* Be very careful to make sure these bool params
|
/* Be very careful to make sure these bool params
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ BookDirs::BookDirs(ReadView const& view, Book const& book)
|
|||||||
if (key_ != beast::zero)
|
if (key_ != beast::zero)
|
||||||
{
|
{
|
||||||
if (! cdirFirst(*view_, key_, sle_, entry_, index_,
|
if (! cdirFirst(*view_, key_, sle_, entry_, index_,
|
||||||
beast::Journal()))
|
beast::Journal {beast::Journal::getNullSink()}))
|
||||||
{
|
{
|
||||||
assert(false);
|
assert(false);
|
||||||
}
|
}
|
||||||
@@ -63,7 +63,8 @@ BookDirs::end() const ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
beast::Journal BookDirs::const_iterator::j_ = beast::Journal();
|
beast::Journal BookDirs::const_iterator::j_ =
|
||||||
|
beast::Journal{beast::Journal::getNullSink()};
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BookDirs::const_iterator::operator==
|
BookDirs::const_iterator::operator==
|
||||||
|
|||||||
@@ -241,7 +241,7 @@ static
|
|||||||
std::uint32_t
|
std::uint32_t
|
||||||
confineOwnerCount (std::uint32_t current, std::int32_t adjustment,
|
confineOwnerCount (std::uint32_t current, std::int32_t adjustment,
|
||||||
boost::optional<AccountID> const& id = boost::none,
|
boost::optional<AccountID> const& id = boost::none,
|
||||||
beast::Journal j = beast::Journal{})
|
beast::Journal j = beast::Journal {beast::Journal::getNullSink()})
|
||||||
{
|
{
|
||||||
std::uint32_t adjusted {current + adjustment};
|
std::uint32_t adjusted {current + adjustment};
|
||||||
if (adjustment > 0)
|
if (adjustment > 0)
|
||||||
@@ -456,7 +456,7 @@ areCompatible (ReadView const& validLedger, ReadView const& testLedger,
|
|||||||
{
|
{
|
||||||
// valid -> ... -> test
|
// valid -> ... -> test
|
||||||
auto hash = hashOfSeq (testLedger, validLedger.info().seq,
|
auto hash = hashOfSeq (testLedger, validLedger.info().seq,
|
||||||
beast::Journal());
|
beast::Journal {beast::Journal::getNullSink()});
|
||||||
if (hash && (*hash != validLedger.info().hash))
|
if (hash && (*hash != validLedger.info().hash))
|
||||||
{
|
{
|
||||||
JLOG(s) << reason << " incompatible with valid ledger";
|
JLOG(s) << reason << " incompatible with valid ledger";
|
||||||
@@ -470,7 +470,7 @@ areCompatible (ReadView const& validLedger, ReadView const& testLedger,
|
|||||||
{
|
{
|
||||||
// test -> ... -> valid
|
// test -> ... -> valid
|
||||||
auto hash = hashOfSeq (validLedger, testLedger.info().seq,
|
auto hash = hashOfSeq (validLedger, testLedger.info().seq,
|
||||||
beast::Journal());
|
beast::Journal {beast::Journal::getNullSink()});
|
||||||
if (hash && (*hash != testLedger.info().hash))
|
if (hash && (*hash != testLedger.info().hash))
|
||||||
{
|
{
|
||||||
JLOG(s) << reason << " incompatible preceding ledger";
|
JLOG(s) << reason << " incompatible preceding ledger";
|
||||||
@@ -510,7 +510,7 @@ bool areCompatible (uint256 const& validHash, LedgerIndex validIndex,
|
|||||||
{
|
{
|
||||||
// Ledger we are testing follows last valid ledger
|
// Ledger we are testing follows last valid ledger
|
||||||
auto hash = hashOfSeq (testLedger, validIndex,
|
auto hash = hashOfSeq (testLedger, validIndex,
|
||||||
beast::Journal());
|
beast::Journal {beast::Journal::getNullSink()});
|
||||||
if (hash && (*hash != validHash))
|
if (hash && (*hash != validHash))
|
||||||
{
|
{
|
||||||
JLOG(s) << reason << " incompatible following ledger";
|
JLOG(s) << reason << " incompatible following ledger";
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ public:
|
|||||||
bool plainOnly)
|
bool plainOnly)
|
||||||
: mSecure (secureOnly)
|
: mSecure (secureOnly)
|
||||||
, mBuffer ((plainOnly || secureOnly) ? 0 : 4)
|
, mBuffer ((plainOnly || secureOnly) ? 0 : 4)
|
||||||
|
, j_ {beast::Journal::getNullSink()}
|
||||||
{
|
{
|
||||||
mSocket = std::make_unique<ssl_socket> (s, c);
|
mSocket = std::make_unique<ssl_socket> (s, c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <ripple/nodestore/Factory.h>
|
#include <ripple/nodestore/Factory.h>
|
||||||
#include <ripple/nodestore/Manager.h>
|
#include <ripple/nodestore/Manager.h>
|
||||||
#include <boost/beast/core/string.hpp>
|
#include <boost/beast/core/string.hpp>
|
||||||
|
#include <boost/core/ignore_unused.hpp>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
@@ -89,6 +90,7 @@ public:
|
|||||||
: name_ (get<std::string>(keyValues, "path"))
|
: name_ (get<std::string>(keyValues, "path"))
|
||||||
, journal_ (journal)
|
, journal_ (journal)
|
||||||
{
|
{
|
||||||
|
boost::ignore_unused (journal_); // Keep unused journal_ just in case.
|
||||||
if (name_.empty())
|
if (name_.empty())
|
||||||
Throw<std::runtime_error> ("Missing path in Memory backend");
|
Throw<std::runtime_error> ("Missing path in Memory backend");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,8 @@ public:
|
|||||||
currentSchemaVersion = 4
|
currentSchemaVersion = 4
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit StoreSqdb (beast::Journal journal = beast::Journal())
|
explicit StoreSqdb (beast::Journal journal =
|
||||||
|
beast::Journal {beast::Journal::getNullSink()})
|
||||||
: m_journal (journal)
|
: m_journal (journal)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <ripple/basics/chrono.h>
|
#include <ripple/basics/chrono.h>
|
||||||
#include <ripple/basics/Log.h>
|
#include <ripple/basics/Log.h>
|
||||||
#include <ripple/beast/core/CurrentThreadName.h>
|
#include <ripple/beast/core/CurrentThreadName.h>
|
||||||
|
#include <boost/core/ignore_unused.hpp>
|
||||||
#include <condition_variable>
|
#include <condition_variable>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <mutex>
|
#include <mutex>
|
||||||
@@ -45,6 +46,7 @@ public:
|
|||||||
: journal_ (journal)
|
: journal_ (journal)
|
||||||
, logic_ (collector, stopwatch(), journal)
|
, logic_ (collector, stopwatch(), journal)
|
||||||
{
|
{
|
||||||
|
boost::ignore_unused (journal_); // Keep unused journal_ just in case.
|
||||||
thread_ = std::thread {&ManagerImp::run, this};
|
thread_ = std::thread {&ManagerImp::run, this};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,13 +22,14 @@
|
|||||||
#include <ripple/basics/BasicConfig.h>
|
#include <ripple/basics/BasicConfig.h>
|
||||||
#include <ripple/basics/chrono.h>
|
#include <ripple/basics/chrono.h>
|
||||||
#include <ripple/basics/Log.h>
|
#include <ripple/basics/Log.h>
|
||||||
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/core/ConfigSections.h>
|
#include <ripple/core/ConfigSections.h>
|
||||||
#include <ripple/protocol/Feature.h>
|
#include <ripple/protocol/Feature.h>
|
||||||
#include <ripple/protocol/PublicKey.h>
|
#include <ripple/protocol/PublicKey.h>
|
||||||
#include <ripple/protocol/SecretKey.h>
|
#include <ripple/protocol/SecretKey.h>
|
||||||
#include <ripple/protocol/digest.h>
|
#include <ripple/protocol/digest.h>
|
||||||
#include <ripple/protocol/TxFlags.h>
|
#include <ripple/protocol/TxFlags.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple
|
namespace ripple
|
||||||
{
|
{
|
||||||
@@ -89,12 +90,15 @@ private:
|
|||||||
|
|
||||||
Section const emptySection;
|
Section const emptySection;
|
||||||
|
|
||||||
|
test::SuiteJournal journal;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AmendmentTable_test ()
|
AmendmentTable_test ()
|
||||||
: m_set1 (createSet (1, 12))
|
: m_set1 (createSet (1, 12))
|
||||||
, m_set2 (createSet (2, 12))
|
, m_set2 (createSet (2, 12))
|
||||||
, m_set3 (createSet (3, 12))
|
, m_set3 (createSet (3, 12))
|
||||||
, m_set4 (createSet (4, 12))
|
, m_set4 (createSet (4, 12))
|
||||||
|
, journal ("AmendmentTable_test", *this)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +115,7 @@ public:
|
|||||||
supported,
|
supported,
|
||||||
enabled,
|
enabled,
|
||||||
vetoed,
|
vetoed,
|
||||||
beast::Journal{});
|
journal);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<AmendmentTable>
|
std::unique_ptr<AmendmentTable>
|
||||||
|
|||||||
@@ -218,10 +218,9 @@ public:
|
|||||||
std::vector<Manifest const*> const inManifests (
|
std::vector<Manifest const*> const inManifests (
|
||||||
sort (getPopulatedManifests (m)));
|
sort (getPopulatedManifests (m)));
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
jtx::Env env (*this);
|
jtx::Env env (*this);
|
||||||
auto unl = std::make_unique<ValidatorList> (
|
auto unl = std::make_unique<ValidatorList> (
|
||||||
m, m, env.timeKeeper(), journal);
|
m, m, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
{
|
{
|
||||||
// save should not store untrusted master keys to db
|
// save should not store untrusted master keys to db
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ public:
|
|||||||
auto& app = env.app();
|
auto& app = env.app();
|
||||||
Resource::Charge loadType = Resource::feeReferenceRPC;
|
Resource::Charge loadType = Resource::feeReferenceRPC;
|
||||||
Resource::Consumer c;
|
Resource::Consumer c;
|
||||||
RPC::Context context {beast::Journal(), {}, app, loadType,
|
RPC::Context context {env.journal, {}, app, loadType,
|
||||||
app.getOPs(), app.getLedgerMaster(), c, Role::USER, {}};
|
app.getOPs(), app.getLedgerMaster(), c, Role::USER, {}};
|
||||||
|
|
||||||
Json::Value params = Json::objectValue;
|
Json::Value params = Json::objectValue;
|
||||||
@@ -328,7 +328,7 @@ public:
|
|||||||
auto& app = env.app();
|
auto& app = env.app();
|
||||||
Resource::Charge loadType = Resource::feeReferenceRPC;
|
Resource::Charge loadType = Resource::feeReferenceRPC;
|
||||||
Resource::Consumer c;
|
Resource::Consumer c;
|
||||||
RPC::Context context {beast::Journal(), {}, app, loadType,
|
RPC::Context context {env.journal, {}, app, loadType,
|
||||||
app.getOPs(), app.getLedgerMaster(), c, Role::USER, {}};
|
app.getOPs(), app.getLedgerMaster(), c, Role::USER, {}};
|
||||||
Json::Value result;
|
Json::Value result;
|
||||||
gate g;
|
gate g;
|
||||||
|
|||||||
@@ -21,8 +21,8 @@
|
|||||||
#include <ripple/app/ledger/Ledger.h>
|
#include <ripple/app/ledger/Ledger.h>
|
||||||
#include <ripple/basics/Log.h>
|
#include <ripple/basics/Log.h>
|
||||||
#include <ripple/ledger/View.h>
|
#include <ripple/ledger/View.h>
|
||||||
#include <test/jtx.h>
|
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/jtx.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace test {
|
namespace test {
|
||||||
@@ -63,7 +63,6 @@ class RCLValidations_test : public beast::unit_test::suite
|
|||||||
testRCLValidatedLedger()
|
testRCLValidatedLedger()
|
||||||
{
|
{
|
||||||
testcase("RCLValidatedLedger ancestry");
|
testcase("RCLValidatedLedger ancestry");
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
using Seq = RCLValidatedLedger::Seq;
|
using Seq = RCLValidatedLedger::Seq;
|
||||||
using ID = RCLValidatedLedger::ID;
|
using ID = RCLValidatedLedger::ID;
|
||||||
@@ -136,7 +135,7 @@ class RCLValidations_test : public beast::unit_test::suite
|
|||||||
// Full history ledgers
|
// Full history ledgers
|
||||||
{
|
{
|
||||||
std::shared_ptr<Ledger const> ledger = history.back();
|
std::shared_ptr<Ledger const> ledger = history.back();
|
||||||
RCLValidatedLedger a{ledger, j};
|
RCLValidatedLedger a{ledger, env.journal};
|
||||||
BEAST_EXPECT(a.seq() == ledger->info().seq);
|
BEAST_EXPECT(a.seq() == ledger->info().seq);
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
a.minSeq() == a.seq() - maxAncestors);
|
a.minSeq() == a.seq() - maxAncestors);
|
||||||
@@ -159,17 +158,17 @@ class RCLValidations_test : public beast::unit_test::suite
|
|||||||
for (auto ledger : {history.back(),
|
for (auto ledger : {history.back(),
|
||||||
history[maxAncestors - 1]})
|
history[maxAncestors - 1]})
|
||||||
{
|
{
|
||||||
RCLValidatedLedger b{ledger, j};
|
RCLValidatedLedger b{ledger, env.journal};
|
||||||
BEAST_EXPECT(mismatch(a, b) == 1);
|
BEAST_EXPECT(mismatch(a, b) == 1);
|
||||||
BEAST_EXPECT(mismatch(b, a) == 1);
|
BEAST_EXPECT(mismatch(b, a) == 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Same chains, different seqs
|
// Same chains, different seqs
|
||||||
{
|
{
|
||||||
RCLValidatedLedger a{history.back(), j};
|
RCLValidatedLedger a{history.back(), env.journal};
|
||||||
for(Seq s = a.seq(); s > 0; s--)
|
for(Seq s = a.seq(); s > 0; s--)
|
||||||
{
|
{
|
||||||
RCLValidatedLedger b{history[s-1], j};
|
RCLValidatedLedger b{history[s-1], env.journal};
|
||||||
if(s >= a.minSeq())
|
if(s >= a.minSeq())
|
||||||
{
|
{
|
||||||
BEAST_EXPECT(mismatch(a, b) == b.seq() + 1);
|
BEAST_EXPECT(mismatch(a, b) == b.seq() + 1);
|
||||||
@@ -188,8 +187,8 @@ class RCLValidations_test : public beast::unit_test::suite
|
|||||||
// Alt history diverged at history.size()/2
|
// Alt history diverged at history.size()/2
|
||||||
for(Seq s = 1; s < history.size(); ++s)
|
for(Seq s = 1; s < history.size(); ++s)
|
||||||
{
|
{
|
||||||
RCLValidatedLedger a{history[s-1], j};
|
RCLValidatedLedger a{history[s-1], env.journal};
|
||||||
RCLValidatedLedger b{altHistory[s-1], j};
|
RCLValidatedLedger b{altHistory[s-1], env.journal};
|
||||||
|
|
||||||
BEAST_EXPECT(a.seq() == b.seq());
|
BEAST_EXPECT(a.seq() == b.seq());
|
||||||
if(s <= diverge)
|
if(s <= diverge)
|
||||||
@@ -209,10 +208,10 @@ class RCLValidations_test : public beast::unit_test::suite
|
|||||||
// Different chains, different seqs
|
// Different chains, different seqs
|
||||||
{
|
{
|
||||||
// Compare around the divergence point
|
// Compare around the divergence point
|
||||||
RCLValidatedLedger a{history[diverge], j};
|
RCLValidatedLedger a{history[diverge], env.journal};
|
||||||
for(Seq offset = diverge/2; offset < 3*diverge/2; ++offset)
|
for(Seq offset = diverge/2; offset < 3*diverge/2; ++offset)
|
||||||
{
|
{
|
||||||
RCLValidatedLedger b{altHistory[offset-1], j};
|
RCLValidatedLedger b{altHistory[offset-1], env.journal};
|
||||||
if(offset <= diverge)
|
if(offset <= diverge)
|
||||||
{
|
{
|
||||||
BEAST_EXPECT(mismatch(a,b) == b.seq() + 1);
|
BEAST_EXPECT(mismatch(a,b) == b.seq() + 1);
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/core/Config.h>
|
#include <ripple/core/Config.h>
|
||||||
#include <ripple/core/ConfigSections.h>
|
#include <ripple/core/ConfigSections.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
@@ -74,7 +75,7 @@ public:
|
|||||||
void
|
void
|
||||||
run() override
|
run() override
|
||||||
{
|
{
|
||||||
beast::Journal j;
|
SuiteJournal journal ("ValidatorKeys_test", *this);
|
||||||
|
|
||||||
// Keys/ID when using [validation_seed]
|
// Keys/ID when using [validation_seed]
|
||||||
SecretKey const seedSecretKey =
|
SecretKey const seedSecretKey =
|
||||||
@@ -98,7 +99,7 @@ public:
|
|||||||
{
|
{
|
||||||
// No config -> no key but valid
|
// No config -> no key but valid
|
||||||
Config c;
|
Config c;
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
BEAST_EXPECT(k.publicKey.size() == 0);
|
BEAST_EXPECT(k.publicKey.size() == 0);
|
||||||
BEAST_EXPECT(k.manifest.empty());
|
BEAST_EXPECT(k.manifest.empty());
|
||||||
BEAST_EXPECT(!k.configInvalid());
|
BEAST_EXPECT(!k.configInvalid());
|
||||||
@@ -109,7 +110,7 @@ public:
|
|||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATION_SEED).append(seed);
|
c.section(SECTION_VALIDATION_SEED).append(seed);
|
||||||
|
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
BEAST_EXPECT(k.publicKey == seedPublicKey);
|
BEAST_EXPECT(k.publicKey == seedPublicKey);
|
||||||
BEAST_EXPECT(k.secretKey == seedSecretKey);
|
BEAST_EXPECT(k.secretKey == seedSecretKey);
|
||||||
BEAST_EXPECT(k.nodeID == seedNodeID);
|
BEAST_EXPECT(k.nodeID == seedNodeID);
|
||||||
@@ -122,7 +123,7 @@ public:
|
|||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATION_SEED).append("badseed");
|
c.section(SECTION_VALIDATION_SEED).append("badseed");
|
||||||
|
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
BEAST_EXPECT(k.configInvalid());
|
BEAST_EXPECT(k.configInvalid());
|
||||||
BEAST_EXPECT(k.publicKey.size() == 0);
|
BEAST_EXPECT(k.publicKey.size() == 0);
|
||||||
BEAST_EXPECT(k.manifest.empty());
|
BEAST_EXPECT(k.manifest.empty());
|
||||||
@@ -132,7 +133,7 @@ public:
|
|||||||
// validator token
|
// validator token
|
||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATOR_TOKEN).append(tokenBlob);
|
c.section(SECTION_VALIDATOR_TOKEN).append(tokenBlob);
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
|
|
||||||
BEAST_EXPECT(k.publicKey == tokenPublicKey);
|
BEAST_EXPECT(k.publicKey == tokenPublicKey);
|
||||||
BEAST_EXPECT(k.secretKey == tokenSecretKey);
|
BEAST_EXPECT(k.secretKey == tokenSecretKey);
|
||||||
@@ -144,7 +145,7 @@ public:
|
|||||||
// invalid validator token
|
// invalid validator token
|
||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATOR_TOKEN).append("badtoken");
|
c.section(SECTION_VALIDATOR_TOKEN).append("badtoken");
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
BEAST_EXPECT(k.configInvalid());
|
BEAST_EXPECT(k.configInvalid());
|
||||||
BEAST_EXPECT(k.publicKey.size() == 0);
|
BEAST_EXPECT(k.publicKey.size() == 0);
|
||||||
BEAST_EXPECT(k.manifest.empty());
|
BEAST_EXPECT(k.manifest.empty());
|
||||||
@@ -155,7 +156,7 @@ public:
|
|||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATION_SEED).append(seed);
|
c.section(SECTION_VALIDATION_SEED).append(seed);
|
||||||
c.section(SECTION_VALIDATOR_TOKEN).append(tokenBlob);
|
c.section(SECTION_VALIDATOR_TOKEN).append(tokenBlob);
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
|
|
||||||
BEAST_EXPECT(k.configInvalid());
|
BEAST_EXPECT(k.configInvalid());
|
||||||
BEAST_EXPECT(k.publicKey.size() == 0);
|
BEAST_EXPECT(k.publicKey.size() == 0);
|
||||||
@@ -166,7 +167,7 @@ public:
|
|||||||
// Token manifest and private key must match
|
// Token manifest and private key must match
|
||||||
Config c;
|
Config c;
|
||||||
c.section(SECTION_VALIDATOR_TOKEN).append(invalidTokenBlob);
|
c.section(SECTION_VALIDATOR_TOKEN).append(invalidTokenBlob);
|
||||||
ValidatorKeys k{c, j};
|
ValidatorKeys k{c, journal};
|
||||||
|
|
||||||
BEAST_EXPECT(k.configInvalid());
|
BEAST_EXPECT(k.configInvalid());
|
||||||
BEAST_EXPECT(k.publicKey.size() == 0);
|
BEAST_EXPECT(k.publicKey.size() == 0);
|
||||||
|
|||||||
@@ -140,18 +140,17 @@ private:
|
|||||||
{
|
{
|
||||||
testcase ("Genesis Quorum");
|
testcase ("Genesis Quorum");
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
jtx::Env env (*this);
|
jtx::Env env (*this);
|
||||||
{
|
{
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
BEAST_EXPECT(trustedKeys->quorum () == 1);
|
BEAST_EXPECT(trustedKeys->quorum () == 1);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::size_t minQuorum = 0;
|
std::size_t minQuorum = 0;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal, minQuorum);
|
manifests, manifests, env.timeKeeper(), env.journal, minQuorum);
|
||||||
BEAST_EXPECT(trustedKeys->quorum () == minQuorum);
|
BEAST_EXPECT(trustedKeys->quorum () == minQuorum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -161,7 +160,6 @@ private:
|
|||||||
{
|
{
|
||||||
testcase ("Config Load");
|
testcase ("Config Load");
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
jtx::Env env (*this);
|
jtx::Env env (*this);
|
||||||
PublicKey emptyLocalKey;
|
PublicKey emptyLocalKey;
|
||||||
std::vector<std::string> emptyCfgKeys;
|
std::vector<std::string> emptyCfgKeys;
|
||||||
@@ -211,7 +209,7 @@ private:
|
|||||||
{
|
{
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
// Correct (empty) configuration
|
// Correct (empty) configuration
|
||||||
BEAST_EXPECT(trustedKeys->load (
|
BEAST_EXPECT(trustedKeys->load (
|
||||||
@@ -233,7 +231,7 @@ private:
|
|||||||
// load should add validator keys from config
|
// load should add validator keys from config
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
BEAST_EXPECT(trustedKeys->load (
|
BEAST_EXPECT(trustedKeys->load (
|
||||||
emptyLocalKey, cfgKeys, emptyCfgPublishers));
|
emptyLocalKey, cfgKeys, emptyCfgPublishers));
|
||||||
@@ -278,7 +276,7 @@ private:
|
|||||||
// local validator key on config list
|
// local validator key on config list
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
auto const localSigningPublic = parseBase58<PublicKey> (
|
auto const localSigningPublic = parseBase58<PublicKey> (
|
||||||
TokenType::NodePublic, cfgKeys.front());
|
TokenType::NodePublic, cfgKeys.front());
|
||||||
@@ -295,7 +293,7 @@ private:
|
|||||||
// local validator key not on config list
|
// local validator key not on config list
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
auto const localSigningPublic = randomNode();
|
auto const localSigningPublic = randomNode();
|
||||||
BEAST_EXPECT(trustedKeys->load (
|
BEAST_EXPECT(trustedKeys->load (
|
||||||
@@ -310,7 +308,7 @@ private:
|
|||||||
// local validator key (with manifest) not on config list
|
// local validator key (with manifest) not on config list
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
manifests.applyManifest (*Manifest::make_Manifest(cfgManifest));
|
manifests.applyManifest (*Manifest::make_Manifest(cfgManifest));
|
||||||
|
|
||||||
@@ -326,7 +324,7 @@ private:
|
|||||||
{
|
{
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
// load should reject invalid validator list signing keys
|
// load should reject invalid validator list signing keys
|
||||||
std::vector<std::string> badPublishers(
|
std::vector<std::string> badPublishers(
|
||||||
@@ -364,11 +362,10 @@ private:
|
|||||||
{
|
{
|
||||||
testcase ("Apply list");
|
testcase ("Apply list");
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
jtx::Env env (*this);
|
jtx::Env env (*this);
|
||||||
auto trustedKeys = std::make_unique<ValidatorList> (
|
auto trustedKeys = std::make_unique<ValidatorList> (
|
||||||
manifests, manifests, env.app().timeKeeper(), journal);
|
manifests, manifests, env.app().timeKeeper(), env.journal);
|
||||||
|
|
||||||
auto const publisherSecret = randomSecretKey();
|
auto const publisherSecret = randomSecretKey();
|
||||||
auto const publisherPublic =
|
auto const publisherPublic =
|
||||||
@@ -528,7 +525,7 @@ private:
|
|||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
jtx::Env env (*this);
|
jtx::Env env (*this);
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal ());
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
std::vector<std::string> cfgPublishers;
|
std::vector<std::string> cfgPublishers;
|
||||||
hash_set<NodeID> activeValidators;
|
hash_set<NodeID> activeValidators;
|
||||||
@@ -677,7 +674,7 @@ private:
|
|||||||
{
|
{
|
||||||
// Make quorum unattainable if lists from any publishers are unavailable
|
// Make quorum unattainable if lists from any publishers are unavailable
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal ());
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
auto const publisherSecret = randomSecretKey();
|
auto const publisherSecret = randomSecretKey();
|
||||||
auto const publisherPublic =
|
auto const publisherPublic =
|
||||||
derivePublicKey(KeyType::ed25519, publisherSecret);
|
derivePublicKey(KeyType::ed25519, publisherSecret);
|
||||||
@@ -701,7 +698,7 @@ private:
|
|||||||
std::size_t const minQuorum = 1;
|
std::size_t const minQuorum = 1;
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal (), minQuorum);
|
manifests, manifests, env.timeKeeper(), env.journal, minQuorum);
|
||||||
|
|
||||||
std::size_t n = 10;
|
std::size_t n = 10;
|
||||||
std::vector<std::string> cfgKeys;
|
std::vector<std::string> cfgKeys;
|
||||||
@@ -741,7 +738,7 @@ private:
|
|||||||
{
|
{
|
||||||
// Remove expired published list
|
// Remove expired published list
|
||||||
auto trustedKeys = std::make_unique<ValidatorList> (
|
auto trustedKeys = std::make_unique<ValidatorList> (
|
||||||
manifests, manifests, env.app().timeKeeper(), beast::Journal ());
|
manifests, manifests, env.app().timeKeeper(), env.journal);
|
||||||
|
|
||||||
PublicKey emptyLocalKey;
|
PublicKey emptyLocalKey;
|
||||||
std::vector<std::string> emptyCfgKeys;
|
std::vector<std::string> emptyCfgKeys;
|
||||||
@@ -827,7 +824,7 @@ private:
|
|||||||
{
|
{
|
||||||
// Test 1-9 configured validators
|
// Test 1-9 configured validators
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal ());
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
std::vector<std::string> cfgPublishers;
|
std::vector<std::string> cfgPublishers;
|
||||||
hash_set<NodeID> activeValidators;
|
hash_set<NodeID> activeValidators;
|
||||||
@@ -858,7 +855,7 @@ private:
|
|||||||
{
|
{
|
||||||
// Test 2-9 configured validators as validator
|
// Test 2-9 configured validators as validator
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal ());
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
auto const localKey = randomNode();
|
auto const localKey = randomNode();
|
||||||
std::vector<std::string> cfgPublishers;
|
std::vector<std::string> cfgPublishers;
|
||||||
@@ -898,7 +895,7 @@ private:
|
|||||||
// Trusted set should include all validators from multiple lists
|
// Trusted set should include all validators from multiple lists
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique <ValidatorList> (
|
auto trustedKeys = std::make_unique <ValidatorList> (
|
||||||
manifests, manifests, env.timeKeeper(), beast::Journal ());
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
hash_set<NodeID> activeValidators;
|
hash_set<NodeID> activeValidators;
|
||||||
std::vector<Validator> valKeys;
|
std::vector<Validator> valKeys;
|
||||||
@@ -968,7 +965,6 @@ private:
|
|||||||
{
|
{
|
||||||
testcase("Expires");
|
testcase("Expires");
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
jtx::Env env(*this);
|
jtx::Env env(*this);
|
||||||
|
|
||||||
auto toStr = [](PublicKey const& publicKey) {
|
auto toStr = [](PublicKey const& publicKey) {
|
||||||
@@ -979,7 +975,7 @@ private:
|
|||||||
{
|
{
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique<ValidatorList>(
|
auto trustedKeys = std::make_unique<ValidatorList>(
|
||||||
manifests, manifests, env.timeKeeper(), journal);
|
manifests, manifests, env.timeKeeper(), env.journal);
|
||||||
|
|
||||||
// Empty list has no expiration
|
// Empty list has no expiration
|
||||||
BEAST_EXPECT(trustedKeys->expires() == boost::none);
|
BEAST_EXPECT(trustedKeys->expires() == boost::none);
|
||||||
@@ -998,7 +994,7 @@ private:
|
|||||||
{
|
{
|
||||||
ManifestCache manifests;
|
ManifestCache manifests;
|
||||||
auto trustedKeys = std::make_unique<ValidatorList>(
|
auto trustedKeys = std::make_unique<ValidatorList>(
|
||||||
manifests, manifests, env.app().timeKeeper(), journal);
|
manifests, manifests, env.app().timeKeeper(), env.journal);
|
||||||
|
|
||||||
std::vector<Validator> validators = {randomValidator()};
|
std::vector<Validator> validators = {randomValidator()};
|
||||||
hash_set<NodeID> activeValidators;
|
hash_set<NodeID> activeValidators;
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ private:
|
|||||||
|
|
||||||
Env env (*this);
|
Env env (*this);
|
||||||
auto trustedSites = std::make_unique<ValidatorSite> (
|
auto trustedSites = std::make_unique<ValidatorSite> (
|
||||||
env.app().getIOService(), env.app().validators(), beast::Journal());
|
env.app().getIOService(), env.app().validators(), env.journal);
|
||||||
|
|
||||||
// load should accept empty sites list
|
// load should accept empty sites list
|
||||||
std::vector<std::string> emptyCfgSites;
|
std::vector<std::string> emptyCfgSites;
|
||||||
@@ -131,8 +131,6 @@ private:
|
|||||||
Env env (*this);
|
Env env (*this);
|
||||||
auto& trustedKeys = env.app ().validators ();
|
auto& trustedKeys = env.app ().validators ();
|
||||||
|
|
||||||
beast::Journal journal;
|
|
||||||
|
|
||||||
PublicKey emptyLocalKey;
|
PublicKey emptyLocalKey;
|
||||||
std::vector<std::string> emptyCfgKeys;
|
std::vector<std::string> emptyCfgKeys;
|
||||||
|
|
||||||
@@ -205,7 +203,7 @@ private:
|
|||||||
std::vector<std::string> cfgSites({ url1.str() });
|
std::vector<std::string> cfgSites({ url1.str() });
|
||||||
|
|
||||||
auto sites = std::make_unique<ValidatorSite> (
|
auto sites = std::make_unique<ValidatorSite> (
|
||||||
env.app().getIOService(), env.app().validators(), journal);
|
env.app().getIOService(), env.app().validators(), env.journal);
|
||||||
|
|
||||||
sites->load (cfgSites);
|
sites->load (cfgSites);
|
||||||
sites->start();
|
sites->start();
|
||||||
@@ -222,7 +220,7 @@ private:
|
|||||||
std::vector<std::string> cfgSites({ url1.str(), url2.str() });
|
std::vector<std::string> cfgSites({ url1.str(), url2.str() });
|
||||||
|
|
||||||
auto sites = std::make_unique<ValidatorSite> (
|
auto sites = std::make_unique<ValidatorSite> (
|
||||||
env.app().getIOService(), env.app().validators(), journal);
|
env.app().getIOService(), env.app().validators(), env.journal);
|
||||||
|
|
||||||
sites->load (cfgSites);
|
sites->load (cfgSites);
|
||||||
sites->start();
|
sites->start();
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <ripple/basics/TaggedCache.h>
|
#include <ripple/basics/TaggedCache.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/beast/clock/manual_clock.h>
|
#include <ripple/beast/clock/manual_clock.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
|
|
||||||
@@ -40,7 +41,8 @@ public:
|
|||||||
void run () override
|
void run () override
|
||||||
{
|
{
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
beast::Journal const j;
|
using namespace beast::severities;
|
||||||
|
test::SuiteJournal journal ("TaggedCache_test", *this);
|
||||||
|
|
||||||
TestStopwatch clock;
|
TestStopwatch clock;
|
||||||
clock.set (0);
|
clock.set (0);
|
||||||
@@ -49,7 +51,7 @@ public:
|
|||||||
using Value = std::string;
|
using Value = std::string;
|
||||||
using Cache = TaggedCache <Key, Value>;
|
using Cache = TaggedCache <Key, Value>;
|
||||||
|
|
||||||
Cache c ("test", 1, 1s, clock, j);
|
Cache c ("test", 1, 1s, clock, journal);
|
||||||
|
|
||||||
// Insert an item, retrieve it, and age it so it gets purged.
|
// Insert an item, retrieve it, and age it so it gets purged.
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <ripple/consensus/Consensus.h>
|
#include <ripple/consensus/Consensus.h>
|
||||||
#include <ripple/consensus/ConsensusProposal.h>
|
#include <ripple/consensus/ConsensusProposal.h>
|
||||||
#include <test/csf.h>
|
#include <test/csf.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
@@ -28,7 +29,13 @@ namespace test {
|
|||||||
|
|
||||||
class Consensus_test : public beast::unit_test::suite
|
class Consensus_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
|
SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Consensus_test ()
|
||||||
|
: journal_ ("Consensus_test", *this)
|
||||||
|
{ }
|
||||||
|
|
||||||
void
|
void
|
||||||
testShouldCloseLedger()
|
testShouldCloseLedger()
|
||||||
{
|
{
|
||||||
@@ -36,36 +43,35 @@ public:
|
|||||||
|
|
||||||
// Use default parameters
|
// Use default parameters
|
||||||
ConsensusParms const p{};
|
ConsensusParms const p{};
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
// Bizarre times forcibly close
|
// Bizarre times forcibly close
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(true, 10, 10, 10, -10s, 10s, 1s, 1s, p, j));
|
shouldCloseLedger(true, 10, 10, 10, -10s, 10s, 1s, 1s, p, journal_));
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(true, 10, 10, 10, 100h, 10s, 1s, 1s, p, j));
|
shouldCloseLedger(true, 10, 10, 10, 100h, 10s, 1s, 1s, p, journal_));
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(true, 10, 10, 10, 10s, 100h, 1s, 1s, p, j));
|
shouldCloseLedger(true, 10, 10, 10, 10s, 100h, 1s, 1s, p, journal_));
|
||||||
|
|
||||||
// Rest of network has closed
|
// Rest of network has closed
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(true, 10, 3, 5, 10s, 10s, 10s, 10s, p, j));
|
shouldCloseLedger(true, 10, 3, 5, 10s, 10s, 10s, 10s, p, journal_));
|
||||||
|
|
||||||
// No transactions means wait until end of internval
|
// No transactions means wait until end of internval
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
!shouldCloseLedger(false, 10, 0, 0, 1s, 1s, 1s, 10s, p, j));
|
!shouldCloseLedger(false, 10, 0, 0, 1s, 1s, 1s, 10s, p, journal_));
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(false, 10, 0, 0, 1s, 10s, 1s, 10s, p, j));
|
shouldCloseLedger(false, 10, 0, 0, 1s, 10s, 1s, 10s, p, journal_));
|
||||||
|
|
||||||
// Enforce minimum ledger open time
|
// Enforce minimum ledger open time
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
!shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 1s, 10s, p, j));
|
!shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 1s, 10s, p, journal_));
|
||||||
|
|
||||||
// Don't go too much faster than last time
|
// Don't go too much faster than last time
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
!shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 3s, 10s, p, j));
|
!shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 3s, 10s, p, journal_));
|
||||||
|
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 10s, 10s, p, j));
|
shouldCloseLedger(true, 10, 0, 0, 10s, 10s, 10s, 10s, p, journal_));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -75,39 +81,38 @@ public:
|
|||||||
|
|
||||||
// Use default parameterss
|
// Use default parameterss
|
||||||
ConsensusParms const p{};
|
ConsensusParms const p{};
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
// Not enough time has elapsed
|
// Not enough time has elapsed
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::No ==
|
ConsensusState::No ==
|
||||||
checkConsensus(10, 2, 2, 0, 3s, 2s, p, true, j));
|
checkConsensus(10, 2, 2, 0, 3s, 2s, p, true, journal_));
|
||||||
|
|
||||||
// If not enough peers have propsed, ensure
|
// If not enough peers have propsed, ensure
|
||||||
// more time for proposals
|
// more time for proposals
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::No ==
|
ConsensusState::No ==
|
||||||
checkConsensus(10, 2, 2, 0, 3s, 4s, p, true, j));
|
checkConsensus(10, 2, 2, 0, 3s, 4s, p, true, journal_));
|
||||||
|
|
||||||
// Enough time has elapsed and we all agree
|
// Enough time has elapsed and we all agree
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::Yes ==
|
ConsensusState::Yes ==
|
||||||
checkConsensus(10, 2, 2, 0, 3s, 10s, p, true, j));
|
checkConsensus(10, 2, 2, 0, 3s, 10s, p, true, journal_));
|
||||||
|
|
||||||
// Enough time has elapsed and we don't yet agree
|
// Enough time has elapsed and we don't yet agree
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::No ==
|
ConsensusState::No ==
|
||||||
checkConsensus(10, 2, 1, 0, 3s, 10s, p, true, j));
|
checkConsensus(10, 2, 1, 0, 3s, 10s, p, true, journal_));
|
||||||
|
|
||||||
// Our peers have moved on
|
// Our peers have moved on
|
||||||
// Enough time has elapsed and we all agree
|
// Enough time has elapsed and we all agree
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::MovedOn ==
|
ConsensusState::MovedOn ==
|
||||||
checkConsensus(10, 2, 1, 8, 3s, 10s, p, true, j));
|
checkConsensus(10, 2, 1, 8, 3s, 10s, p, true, journal_));
|
||||||
|
|
||||||
// No peers makes it easy to agree
|
// No peers makes it easy to agree
|
||||||
BEAST_EXPECT(
|
BEAST_EXPECT(
|
||||||
ConsensusState::Yes ==
|
ConsensusState::Yes ==
|
||||||
checkConsensus(0, 0, 0, 0, 3s, 10s, p, true, j));
|
checkConsensus(0, 0, 0, 0, 3s, 10s, p, true, journal_));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ namespace test {
|
|||||||
|
|
||||||
class LedgerTiming_test : public beast::unit_test::suite
|
class LedgerTiming_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
void testGetNextLedgerTimeResolution()
|
void testGetNextLedgerTimeResolution()
|
||||||
{
|
{
|
||||||
// helper to iteratively call into getNextLedgerTimeResolution
|
// helper to iteratively call into getNextLedgerTimeResolution
|
||||||
|
|||||||
@@ -27,9 +27,6 @@ namespace test {
|
|||||||
|
|
||||||
class LedgerTrie_test : public beast::unit_test::suite
|
class LedgerTrie_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
testInsert()
|
testInsert()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <ripple/core/Stoppable.h>
|
#include <ripple/core/Stoppable.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
@@ -399,6 +400,8 @@ class Stoppable_test
|
|||||||
B b_;
|
B b_;
|
||||||
C c_;
|
C c_;
|
||||||
Stoppable_test& test_;
|
Stoppable_test& test_;
|
||||||
|
SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Root(Stoppable_test& test)
|
explicit Root(Stoppable_test& test)
|
||||||
: RootStoppable("R")
|
: RootStoppable("R")
|
||||||
@@ -406,13 +409,14 @@ class Stoppable_test
|
|||||||
, b_(*this, test)
|
, b_(*this, test)
|
||||||
, c_(*this, test)
|
, c_(*this, test)
|
||||||
, test_(test)
|
, test_(test)
|
||||||
|
, journal_("Stoppable_test", test)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
void run()
|
void run()
|
||||||
{
|
{
|
||||||
prepare();
|
prepare();
|
||||||
start();
|
start();
|
||||||
stop({});
|
stop (journal_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void onPrepare() override
|
void onPrepare() override
|
||||||
@@ -441,7 +445,7 @@ class Stoppable_test
|
|||||||
{
|
{
|
||||||
// Calling stop() a second time should have no negative
|
// Calling stop() a second time should have no negative
|
||||||
// consequences.
|
// consequences.
|
||||||
stop({});
|
stop (journal_);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -28,6 +28,7 @@
|
|||||||
#include <test/jtx/tags.h>
|
#include <test/jtx/tags.h>
|
||||||
#include <test/jtx/AbstractClient.h>
|
#include <test/jtx/AbstractClient.h>
|
||||||
#include <test/jtx/ManualTimeKeeper.h>
|
#include <test/jtx/ManualTimeKeeper.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <ripple/app/main/Application.h>
|
#include <ripple/app/main/Application.h>
|
||||||
#include <ripple/app/ledger/Ledger.h>
|
#include <ripple/app/ledger/Ledger.h>
|
||||||
#include <ripple/app/ledger/OpenLedger.h>
|
#include <ripple/app/ledger/OpenLedger.h>
|
||||||
@@ -45,7 +46,6 @@
|
|||||||
#include <ripple/protocol/STObject.h>
|
#include <ripple/protocol/STObject.h>
|
||||||
#include <ripple/protocol/STTx.h>
|
#include <ripple/protocol/STTx.h>
|
||||||
#include <boost/beast/core/detail/type_traits.hpp>
|
#include <boost/beast/core/detail/type_traits.hpp>
|
||||||
#include <ripple/beast/unit_test.h>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
@@ -87,30 +87,7 @@ supported_amendments()
|
|||||||
return ids;
|
return ids;
|
||||||
}
|
}
|
||||||
|
|
||||||
class SuiteSink : public beast::Journal::Sink
|
//------------------------------------------------------------------------------
|
||||||
{
|
|
||||||
std::string partition_;
|
|
||||||
beast::unit_test::suite& suite_;
|
|
||||||
|
|
||||||
public:
|
|
||||||
SuiteSink(std::string const& partition,
|
|
||||||
beast::severities::Severity threshold,
|
|
||||||
beast::unit_test::suite& suite)
|
|
||||||
: Sink (threshold, false)
|
|
||||||
, partition_(partition + " ")
|
|
||||||
, suite_ (suite)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
// For unit testing, always generate logging text.
|
|
||||||
inline bool active(beast::severities::Severity level) const override
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
write(beast::severities::Severity level, std::string const& text) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class SuiteLogs : public Logs
|
class SuiteLogs : public Logs
|
||||||
{
|
{
|
||||||
@@ -130,7 +107,8 @@ public:
|
|||||||
makeSink(std::string const& partition,
|
makeSink(std::string const& partition,
|
||||||
beast::severities::Severity threshold) override
|
beast::severities::Severity threshold) override
|
||||||
{
|
{
|
||||||
return std::make_unique<SuiteSink>(partition, threshold, suite_);
|
return std::make_unique<SuiteJournalSink>(
|
||||||
|
partition, threshold, suite_);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -142,15 +120,12 @@ class Env
|
|||||||
public:
|
public:
|
||||||
beast::unit_test::suite& test;
|
beast::unit_test::suite& test;
|
||||||
|
|
||||||
beast::Journal const journal;
|
|
||||||
|
|
||||||
Account const& master = Account::master;
|
Account const& master = Account::master;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct AppBundle
|
struct AppBundle
|
||||||
{
|
{
|
||||||
Application* app;
|
Application* app;
|
||||||
std::unique_ptr<Logs> logs;
|
|
||||||
std::unique_ptr<Application> owned;
|
std::unique_ptr<Application> owned;
|
||||||
ManualTimeKeeper* timeKeeper;
|
ManualTimeKeeper* timeKeeper;
|
||||||
std::thread thread;
|
std::thread thread;
|
||||||
@@ -165,6 +140,8 @@ private:
|
|||||||
AppBundle bundle_;
|
AppBundle bundle_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
beast::Journal const journal;
|
||||||
|
|
||||||
Env() = delete;
|
Env() = delete;
|
||||||
Env& operator= (Env const&) = delete;
|
Env& operator= (Env const&) = delete;
|
||||||
Env (Env const&) = delete;
|
Env (Env const&) = delete;
|
||||||
@@ -192,6 +169,7 @@ public:
|
|||||||
suite_,
|
suite_,
|
||||||
std::move(config),
|
std::move(config),
|
||||||
logs ? std::move(logs) : std::make_unique<SuiteLogs>(suite_))
|
logs ? std::move(logs) : std::make_unique<SuiteLogs>(suite_))
|
||||||
|
, journal {bundle_.app->journal ("Env")}
|
||||||
{
|
{
|
||||||
memoize(Account::master);
|
memoize(Account::master);
|
||||||
Pathfinder::initPathTable();
|
Pathfinder::initPathTable();
|
||||||
|
|||||||
@@ -54,27 +54,6 @@ namespace ripple {
|
|||||||
namespace test {
|
namespace test {
|
||||||
namespace jtx {
|
namespace jtx {
|
||||||
|
|
||||||
void
|
|
||||||
SuiteSink::write(beast::severities::Severity level, std::string const& text)
|
|
||||||
{
|
|
||||||
using namespace beast::severities;
|
|
||||||
std::string s;
|
|
||||||
switch(level)
|
|
||||||
{
|
|
||||||
case kTrace: s = "TRC:"; break;
|
|
||||||
case kDebug: s = "DBG:"; break;
|
|
||||||
case kInfo: s = "INF:"; break;
|
|
||||||
case kWarning: s = "WRN:"; break;
|
|
||||||
case kError: s = "ERR:"; break;
|
|
||||||
default:
|
|
||||||
case kFatal: s = "FTL:"; break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Only write the string if the level at least equals the threshold.
|
|
||||||
if (level >= threshold())
|
|
||||||
suite_.log << s << partition_ << text << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
Env::AppBundle::AppBundle(beast::unit_test::suite& suite,
|
Env::AppBundle::AppBundle(beast::unit_test::suite& suite,
|
||||||
@@ -83,7 +62,8 @@ Env::AppBundle::AppBundle(beast::unit_test::suite& suite,
|
|||||||
{
|
{
|
||||||
using namespace beast::severities;
|
using namespace beast::severities;
|
||||||
// Use kFatal threshold to reduce noise from STObject.
|
// Use kFatal threshold to reduce noise from STObject.
|
||||||
setDebugLogSink (std::make_unique<SuiteSink>("Debug", kFatal, suite));
|
setDebugLogSink (std::make_unique<SuiteJournalSink>(
|
||||||
|
"Debug", kFatal, suite));
|
||||||
auto timeKeeper_ =
|
auto timeKeeper_ =
|
||||||
std::make_unique<ManualTimeKeeper>();
|
std::make_unique<ManualTimeKeeper>();
|
||||||
timeKeeper = timeKeeper_.get();
|
timeKeeper = timeKeeper_.get();
|
||||||
|
|||||||
@@ -297,13 +297,11 @@ class PaymentSandbox_test : public beast::unit_test::suite
|
|||||||
testcase ("Reserve");
|
testcase ("Reserve");
|
||||||
using namespace jtx;
|
using namespace jtx;
|
||||||
|
|
||||||
beast::Journal dj;
|
auto accountFundsXRP = [](ReadView const& view,
|
||||||
|
AccountID const& id, beast::Journal j) -> XRPAmount
|
||||||
auto accountFundsXRP = [&dj](
|
|
||||||
ReadView const& view, AccountID const& id) -> XRPAmount
|
|
||||||
{
|
{
|
||||||
return toAmount<XRPAmount> (accountHolds (
|
return toAmount<XRPAmount> (accountHolds (
|
||||||
view, id, xrpCurrency (), xrpAccount (), fhZERO_IF_FROZEN, dj));
|
view, id, xrpCurrency (), xrpAccount (), fhZERO_IF_FROZEN, j));
|
||||||
};
|
};
|
||||||
|
|
||||||
auto reserve = [](jtx::Env& env, std::uint32_t count) -> XRPAmount
|
auto reserve = [](jtx::Env& env, std::uint32_t count) -> XRPAmount
|
||||||
@@ -326,9 +324,10 @@ class PaymentSandbox_test : public beast::unit_test::suite
|
|||||||
// to drop below the reserve. Make sure her funds are zero (there was a bug that
|
// to drop below the reserve. Make sure her funds are zero (there was a bug that
|
||||||
// caused her funds to become negative).
|
// caused her funds to become negative).
|
||||||
|
|
||||||
accountSend (sb, xrpAccount (), alice, XRP(100), dj);
|
accountSend (sb, xrpAccount (), alice, XRP(100), env.journal);
|
||||||
accountSend (sb, alice, xrpAccount (), XRP(100), dj);
|
accountSend (sb, alice, xrpAccount (), XRP(100), env.journal);
|
||||||
BEAST_EXPECT(accountFundsXRP (sb, alice) == beast::zero);
|
BEAST_EXPECT(
|
||||||
|
accountFundsXRP (sb, alice, env.journal) == beast::zero);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@
|
|||||||
#include <ripple/app/ledger/Ledger.h>
|
#include <ripple/app/ledger/Ledger.h>
|
||||||
#include <ripple/basics/Log.h>
|
#include <ripple/basics/Log.h>
|
||||||
#include <ripple/ledger/View.h>
|
#include <ripple/ledger/View.h>
|
||||||
#include <test/jtx.h>
|
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/jtx.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace test {
|
namespace test {
|
||||||
@@ -31,10 +31,9 @@ class SkipList_test : public beast::unit_test::suite
|
|||||||
void
|
void
|
||||||
testSkipList()
|
testSkipList()
|
||||||
{
|
{
|
||||||
beast::Journal const j;
|
jtx::Env env(*this);
|
||||||
std::vector<std::shared_ptr<Ledger>> history;
|
std::vector<std::shared_ptr<Ledger>> history;
|
||||||
{
|
{
|
||||||
jtx::Env env(*this);
|
|
||||||
Config config;
|
Config config;
|
||||||
auto prev = std::make_shared<Ledger>(
|
auto prev = std::make_shared<Ledger>(
|
||||||
create_genesis, config,
|
create_genesis, config,
|
||||||
@@ -56,13 +55,13 @@ class SkipList_test : public beast::unit_test::suite
|
|||||||
BEAST_EXPECT((*std::begin(history))->info().seq <
|
BEAST_EXPECT((*std::begin(history))->info().seq <
|
||||||
l->info().seq);
|
l->info().seq);
|
||||||
BEAST_EXPECT(hashOfSeq(*l, l->info().seq + 1,
|
BEAST_EXPECT(hashOfSeq(*l, l->info().seq + 1,
|
||||||
j) == boost::none);
|
env.journal) == boost::none);
|
||||||
BEAST_EXPECT(hashOfSeq(*l, l->info().seq,
|
BEAST_EXPECT(hashOfSeq(*l, l->info().seq,
|
||||||
j) == l->info().hash);
|
env.journal) == l->info().hash);
|
||||||
BEAST_EXPECT(hashOfSeq(*l, l->info().seq - 1,
|
BEAST_EXPECT(hashOfSeq(*l, l->info().seq - 1,
|
||||||
j) == l->info().parentHash);
|
env.journal) == l->info().parentHash);
|
||||||
BEAST_EXPECT(hashOfSeq(*history.back(),
|
BEAST_EXPECT(hashOfSeq(*history.back(),
|
||||||
l->info().seq, j) == boost::none);
|
l->info().seq, env.journal) == boost::none);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ledger skip lists store up to the previous 256 hashes
|
// ledger skip lists store up to the previous 256 hashes
|
||||||
@@ -75,13 +74,13 @@ class SkipList_test : public beast::unit_test::suite
|
|||||||
++n)
|
++n)
|
||||||
{
|
{
|
||||||
BEAST_EXPECT(hashOfSeq(**i,
|
BEAST_EXPECT(hashOfSeq(**i,
|
||||||
(*n)->info().seq, j) ==
|
(*n)->info().seq, env.journal) ==
|
||||||
(*n)->info().hash);
|
(*n)->info().hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
// edge case accessing beyond 256
|
// edge case accessing beyond 256
|
||||||
BEAST_EXPECT(hashOfSeq(**i,
|
BEAST_EXPECT(hashOfSeq(**i,
|
||||||
(*i)->info().seq - 258, j) ==
|
(*i)->info().seq - 258, env.journal) ==
|
||||||
boost::none);
|
boost::none);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +94,7 @@ class SkipList_test : public beast::unit_test::suite
|
|||||||
n += 256)
|
n += 256)
|
||||||
{
|
{
|
||||||
BEAST_EXPECT(hashOfSeq(**i,
|
BEAST_EXPECT(hashOfSeq(**i,
|
||||||
(*n)->info().seq, j) ==
|
(*n)->info().seq, env.journal) ==
|
||||||
(*n)->info().hash);
|
(*n)->info().hash);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,11 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include <ripple/unity/rocksdb.h>
|
#include <ripple/unity/rocksdb.h>
|
||||||
#include <test/nodestore/TestBase.h>
|
|
||||||
#include <ripple/nodestore/DummyScheduler.h>
|
#include <ripple/nodestore/DummyScheduler.h>
|
||||||
#include <ripple/nodestore/Manager.h>
|
#include <ripple/nodestore/Manager.h>
|
||||||
#include <ripple/beast/utility/temp_dir.h>
|
#include <ripple/beast/utility/temp_dir.h>
|
||||||
|
#include <test/nodestore/TestBase.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
@@ -52,12 +53,14 @@ public:
|
|||||||
auto batch = createPredictableBatch (
|
auto batch = createPredictableBatch (
|
||||||
numObjectsToTest, rng());
|
numObjectsToTest, rng());
|
||||||
|
|
||||||
beast::Journal j;
|
using namespace beast::severities;
|
||||||
|
test::SuiteJournal journal ("Backend_test", *this);
|
||||||
|
|
||||||
{
|
{
|
||||||
// Open the backend
|
// Open the backend
|
||||||
std::unique_ptr <Backend> backend =
|
std::unique_ptr <Backend> backend =
|
||||||
Manager::instance().make_Backend (params, scheduler, j);
|
Manager::instance().make_Backend (
|
||||||
|
params, scheduler, journal);
|
||||||
backend->open();
|
backend->open();
|
||||||
|
|
||||||
// Write the batch
|
// Write the batch
|
||||||
@@ -85,7 +88,7 @@ public:
|
|||||||
{
|
{
|
||||||
// Re-open the backend
|
// Re-open the backend
|
||||||
std::unique_ptr <Backend> backend = Manager::instance().make_Backend (
|
std::unique_ptr <Backend> backend = Manager::instance().make_Backend (
|
||||||
params, scheduler, j);
|
params, scheduler, journal);
|
||||||
backend->open();
|
backend->open();
|
||||||
|
|
||||||
// Read it back in
|
// Read it back in
|
||||||
|
|||||||
@@ -21,13 +21,20 @@
|
|||||||
#include <ripple/nodestore/DummyScheduler.h>
|
#include <ripple/nodestore/DummyScheduler.h>
|
||||||
#include <ripple/nodestore/Manager.h>
|
#include <ripple/nodestore/Manager.h>
|
||||||
#include <ripple/beast/utility/temp_dir.h>
|
#include <ripple/beast/utility/temp_dir.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace NodeStore {
|
namespace NodeStore {
|
||||||
|
|
||||||
class Database_test : public TestBase
|
class Database_test : public TestBase
|
||||||
{
|
{
|
||||||
|
test::SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Database_test ()
|
||||||
|
: journal_ ("Database_test", *this)
|
||||||
|
{ }
|
||||||
|
|
||||||
void testImport (std::string const& destBackendType,
|
void testImport (std::string const& destBackendType,
|
||||||
std::string const& srcBackendType, std::int64_t seedValue)
|
std::string const& srcBackendType, std::int64_t seedValue)
|
||||||
{
|
{
|
||||||
@@ -43,12 +50,10 @@ public:
|
|||||||
auto batch = createPredictableBatch (
|
auto batch = createPredictableBatch (
|
||||||
numObjectsToTest, seedValue);
|
numObjectsToTest, seedValue);
|
||||||
|
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
// Write to source db
|
// Write to source db
|
||||||
{
|
{
|
||||||
std::unique_ptr <Database> src = Manager::instance().make_Database (
|
std::unique_ptr <Database> src = Manager::instance().make_Database (
|
||||||
"test", scheduler, 2, parent, srcParams, j);
|
"test", scheduler, 2, parent, srcParams, journal_);
|
||||||
storeBatch (*src, batch);
|
storeBatch (*src, batch);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -57,7 +62,7 @@ public:
|
|||||||
{
|
{
|
||||||
// Re-open the db
|
// Re-open the db
|
||||||
std::unique_ptr <Database> src = Manager::instance().make_Database (
|
std::unique_ptr <Database> src = Manager::instance().make_Database (
|
||||||
"test", scheduler, 2, parent, srcParams, j);
|
"test", scheduler, 2, parent, srcParams, journal_);
|
||||||
|
|
||||||
// Set up the destination database
|
// Set up the destination database
|
||||||
beast::temp_dir dest_db;
|
beast::temp_dir dest_db;
|
||||||
@@ -66,7 +71,7 @@ public:
|
|||||||
destParams.set ("path", dest_db.path());
|
destParams.set ("path", dest_db.path());
|
||||||
|
|
||||||
std::unique_ptr <Database> dest = Manager::instance().make_Database (
|
std::unique_ptr <Database> dest = Manager::instance().make_Database (
|
||||||
"test", scheduler, 2, parent, destParams, j);
|
"test", scheduler, 2, parent, destParams, journal_);
|
||||||
|
|
||||||
testcase ("import into '" + destBackendType +
|
testcase ("import into '" + destBackendType +
|
||||||
"' from '" + srcBackendType + "'");
|
"' from '" + srcBackendType + "'");
|
||||||
@@ -109,12 +114,10 @@ public:
|
|||||||
auto batch = createPredictableBatch (
|
auto batch = createPredictableBatch (
|
||||||
numObjectsToTest, rng());
|
numObjectsToTest, rng());
|
||||||
|
|
||||||
beast::Journal j;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
// Open the database
|
// Open the database
|
||||||
std::unique_ptr <Database> db = Manager::instance().make_Database (
|
std::unique_ptr <Database> db = Manager::instance().make_Database (
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
|
|
||||||
// Write the batch
|
// Write the batch
|
||||||
storeBatch (*db, batch);
|
storeBatch (*db, batch);
|
||||||
@@ -142,7 +145,7 @@ public:
|
|||||||
{
|
{
|
||||||
// Re-open the database without the ephemeral DB
|
// Re-open the database without the ephemeral DB
|
||||||
std::unique_ptr <Database> db = Manager::instance().make_Database (
|
std::unique_ptr <Database> db = Manager::instance().make_Database (
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
|
|
||||||
// Read it back in
|
// Read it back in
|
||||||
Batch copy;
|
Batch copy;
|
||||||
@@ -161,7 +164,7 @@ public:
|
|||||||
// Verify default earliest ledger sequence
|
// Verify default earliest ledger sequence
|
||||||
std::unique_ptr<Database> db =
|
std::unique_ptr<Database> db =
|
||||||
Manager::instance().make_Database(
|
Manager::instance().make_Database(
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
BEAST_EXPECT(db->earliestSeq() == XRP_LEDGER_EARLIEST_SEQ);
|
BEAST_EXPECT(db->earliestSeq() == XRP_LEDGER_EARLIEST_SEQ);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +174,7 @@ public:
|
|||||||
nodeParams.set("earliest_seq", "0");
|
nodeParams.set("earliest_seq", "0");
|
||||||
std::unique_ptr<Database> db =
|
std::unique_ptr<Database> db =
|
||||||
Manager::instance().make_Database(
|
Manager::instance().make_Database(
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
}
|
}
|
||||||
catch (std::runtime_error const& e)
|
catch (std::runtime_error const& e)
|
||||||
{
|
{
|
||||||
@@ -184,7 +187,7 @@ public:
|
|||||||
nodeParams.set("earliest_seq", "1");
|
nodeParams.set("earliest_seq", "1");
|
||||||
std::unique_ptr<Database> db =
|
std::unique_ptr<Database> db =
|
||||||
Manager::instance().make_Database(
|
Manager::instance().make_Database(
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
|
|
||||||
// Verify database uses the earliest ledger sequence setting
|
// Verify database uses the earliest ledger sequence setting
|
||||||
BEAST_EXPECT(db->earliestSeq() == 1);
|
BEAST_EXPECT(db->earliestSeq() == 1);
|
||||||
@@ -199,7 +202,7 @@ public:
|
|||||||
std::to_string(XRP_LEDGER_EARLIEST_SEQ));
|
std::to_string(XRP_LEDGER_EARLIEST_SEQ));
|
||||||
std::unique_ptr<Database> db2 =
|
std::unique_ptr<Database> db2 =
|
||||||
Manager::instance().make_Database(
|
Manager::instance().make_Database(
|
||||||
"test", scheduler, 2, parent, nodeParams, j);
|
"test", scheduler, 2, parent, nodeParams, journal_);
|
||||||
}
|
}
|
||||||
catch (std::runtime_error const& e)
|
catch (std::runtime_error const& e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <ripple/beast/utility/temp_dir.h>
|
#include <ripple/beast/utility/temp_dir.h>
|
||||||
#include <ripple/beast/xor_shift_engine.h>
|
#include <ripple/beast/xor_shift_engine.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <beast/unit_test/thread.hpp>
|
#include <beast/unit_test/thread.hpp>
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
@@ -271,9 +272,9 @@ public:
|
|||||||
|
|
||||||
// Insert only
|
// Insert only
|
||||||
void
|
void
|
||||||
do_insert (Section const& config, Params const& params)
|
do_insert (Section const& config,
|
||||||
|
Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
beast::Journal journal;
|
|
||||||
DummyScheduler scheduler;
|
DummyScheduler scheduler;
|
||||||
auto backend = make_Backend (config, scheduler, journal);
|
auto backend = make_Backend (config, scheduler, journal);
|
||||||
BEAST_EXPECT(backend != nullptr);
|
BEAST_EXPECT(backend != nullptr);
|
||||||
@@ -326,9 +327,9 @@ public:
|
|||||||
|
|
||||||
// Fetch existing keys
|
// Fetch existing keys
|
||||||
void
|
void
|
||||||
do_fetch (Section const& config, Params const& params)
|
do_fetch (Section const& config,
|
||||||
|
Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
beast::Journal journal;
|
|
||||||
DummyScheduler scheduler;
|
DummyScheduler scheduler;
|
||||||
auto backend = make_Backend (config, scheduler, journal);
|
auto backend = make_Backend (config, scheduler, journal);
|
||||||
BEAST_EXPECT(backend != nullptr);
|
BEAST_EXPECT(backend != nullptr);
|
||||||
@@ -388,9 +389,9 @@ public:
|
|||||||
|
|
||||||
// Perform lookups of non-existent keys
|
// Perform lookups of non-existent keys
|
||||||
void
|
void
|
||||||
do_missing (Section const& config, Params const& params)
|
do_missing (Section const& config,
|
||||||
|
Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
beast::Journal journal;
|
|
||||||
DummyScheduler scheduler;
|
DummyScheduler scheduler;
|
||||||
auto backend = make_Backend (config, scheduler, journal);
|
auto backend = make_Backend (config, scheduler, journal);
|
||||||
BEAST_EXPECT(backend != nullptr);
|
BEAST_EXPECT(backend != nullptr);
|
||||||
@@ -452,9 +453,9 @@ public:
|
|||||||
|
|
||||||
// Fetch with present and missing keys
|
// Fetch with present and missing keys
|
||||||
void
|
void
|
||||||
do_mixed (Section const& config, Params const& params)
|
do_mixed (Section const& config,
|
||||||
|
Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
beast::Journal journal;
|
|
||||||
DummyScheduler scheduler;
|
DummyScheduler scheduler;
|
||||||
auto backend = make_Backend (config, scheduler, journal);
|
auto backend = make_Backend (config, scheduler, journal);
|
||||||
BEAST_EXPECT(backend != nullptr);
|
BEAST_EXPECT(backend != nullptr);
|
||||||
@@ -535,9 +536,9 @@ public:
|
|||||||
// fetches an old key
|
// fetches an old key
|
||||||
// fetches recent, possibly non existent data
|
// fetches recent, possibly non existent data
|
||||||
void
|
void
|
||||||
do_work (Section const& config, Params const& params)
|
do_work (Section const& config,
|
||||||
|
Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
beast::Journal journal;
|
|
||||||
DummyScheduler scheduler;
|
DummyScheduler scheduler;
|
||||||
auto backend = make_Backend (config, scheduler, journal);
|
auto backend = make_Backend (config, scheduler, journal);
|
||||||
BEAST_EXPECT(backend != nullptr);
|
BEAST_EXPECT(backend != nullptr);
|
||||||
@@ -642,15 +643,16 @@ public:
|
|||||||
|
|
||||||
//--------------------------------------------------------------------------
|
//--------------------------------------------------------------------------
|
||||||
|
|
||||||
using test_func = void (Timing_test::*)(Section const&, Params const&);
|
using test_func = void (Timing_test::*)(
|
||||||
|
Section const&, Params const&, beast::Journal);
|
||||||
using test_list = std::vector <std::pair<std::string, test_func>>;
|
using test_list = std::vector <std::pair<std::string, test_func>>;
|
||||||
|
|
||||||
duration_type
|
duration_type
|
||||||
do_test (test_func f,
|
do_test (test_func f,
|
||||||
Section const& config, Params const& params)
|
Section const& config, Params const& params, beast::Journal journal)
|
||||||
{
|
{
|
||||||
auto const start = clock_type::now();
|
auto const start = clock_type::now();
|
||||||
(this->*f)(config, params);
|
(this->*f)(config, params, journal);
|
||||||
return std::chrono::duration_cast<duration_type> (
|
return std::chrono::duration_cast<duration_type> (
|
||||||
clock_type::now() - start);
|
clock_type::now() - start);
|
||||||
}
|
}
|
||||||
@@ -675,6 +677,9 @@ public:
|
|||||||
log << ss.str() << std::endl;
|
log << ss.str() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using namespace beast::severities;
|
||||||
|
test::SuiteJournal journal ("Timing_test", *this);
|
||||||
|
|
||||||
for (auto const& config_string : config_strings)
|
for (auto const& config_string : config_strings)
|
||||||
{
|
{
|
||||||
Params params;
|
Params params;
|
||||||
@@ -690,7 +695,7 @@ public:
|
|||||||
get(config, "type", std::string()) << std::right;
|
get(config, "type", std::string()) << std::right;
|
||||||
for (auto const& test : tests)
|
for (auto const& test : tests)
|
||||||
ss << " " << setw(w) << to_string(
|
ss << " " << setw(w) << to_string(
|
||||||
do_test (test.second, config, params));
|
do_test (test.second, config, params, journal));
|
||||||
ss << " " << to_string(config);
|
ss << " " << to_string(config);
|
||||||
log << ss.str() << std::endl;
|
log << ss.str() << std::endl;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,21 +18,28 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include <ripple/basics/BasicConfig.h>
|
#include <ripple/basics/BasicConfig.h>
|
||||||
#include <test/jtx/TestSuite.h>
|
|
||||||
#include <ripple/overlay/Cluster.h>
|
#include <ripple/overlay/Cluster.h>
|
||||||
#include <ripple/overlay/ClusterNode.h>
|
#include <ripple/overlay/ClusterNode.h>
|
||||||
#include <ripple/protocol/SecretKey.h>
|
#include <ripple/protocol/SecretKey.h>
|
||||||
|
#include <test/jtx/TestSuite.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace tests {
|
namespace tests {
|
||||||
|
|
||||||
class cluster_test : public ripple::TestSuite
|
class cluster_test : public ripple::TestSuite
|
||||||
{
|
{
|
||||||
|
test::SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
cluster_test ()
|
||||||
|
: journal_ ("cluster_test", *this)
|
||||||
|
{ }
|
||||||
|
|
||||||
std::unique_ptr<Cluster>
|
std::unique_ptr<Cluster>
|
||||||
create (std::vector<PublicKey> const& nodes)
|
create (std::vector<PublicKey> const& nodes)
|
||||||
{
|
{
|
||||||
auto cluster = std::make_unique <Cluster> (beast::Journal ());
|
auto cluster = std::make_unique <Cluster> (journal_);
|
||||||
|
|
||||||
for (auto const& n : nodes)
|
for (auto const& n : nodes)
|
||||||
cluster->update (n, "Test");
|
cluster->update (n, "Test");
|
||||||
@@ -188,7 +195,7 @@ public:
|
|||||||
{
|
{
|
||||||
testcase ("Config Load");
|
testcase ("Config Load");
|
||||||
|
|
||||||
auto c = std::make_unique <Cluster> (beast::Journal ());
|
auto c = std::make_unique <Cluster> (journal_);
|
||||||
|
|
||||||
// The servers on the network
|
// The servers on the network
|
||||||
std::vector<PublicKey> network;
|
std::vector<PublicKey> network;
|
||||||
|
|||||||
@@ -17,11 +17,12 @@
|
|||||||
*/
|
*/
|
||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include <ripple/basics/chrono.h>
|
|
||||||
#include <ripple/peerfinder/impl/Livecache.h>
|
#include <ripple/peerfinder/impl/Livecache.h>
|
||||||
|
#include <ripple/basics/chrono.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/beast/clock/manual_clock.h>
|
#include <ripple/beast/clock/manual_clock.h>
|
||||||
#include <test/beast/IPEndpointCommon.h>
|
#include <test/beast/IPEndpointCommon.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <boost/algorithm/string.hpp>
|
#include <boost/algorithm/string.hpp>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
@@ -35,8 +36,13 @@ bool operator== (Endpoint const& a, Endpoint const& b)
|
|||||||
|
|
||||||
class Livecache_test : public beast::unit_test::suite
|
class Livecache_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
|
TestStopwatch clock_;
|
||||||
|
test::SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TestStopwatch m_clock;
|
Livecache_test()
|
||||||
|
: journal_ ("Livecache_test", *this)
|
||||||
|
{ }
|
||||||
|
|
||||||
// Add the address as an endpoint
|
// Add the address as an endpoint
|
||||||
template <class C>
|
template <class C>
|
||||||
@@ -49,7 +55,7 @@ public:
|
|||||||
void testBasicInsert ()
|
void testBasicInsert ()
|
||||||
{
|
{
|
||||||
testcase ("Basic Insert");
|
testcase ("Basic Insert");
|
||||||
Livecache <> c (m_clock, beast::Journal());
|
Livecache <> c (clock_, journal_);
|
||||||
BEAST_EXPECT(c.empty());
|
BEAST_EXPECT(c.empty());
|
||||||
|
|
||||||
for (auto i = 0; i < 10; ++i)
|
for (auto i = 0; i < 10; ++i)
|
||||||
@@ -68,7 +74,7 @@ public:
|
|||||||
void testInsertUpdate ()
|
void testInsertUpdate ()
|
||||||
{
|
{
|
||||||
testcase ("Insert/Update");
|
testcase ("Insert/Update");
|
||||||
Livecache <> c (m_clock, beast::Journal());
|
Livecache <> c (clock_, journal_);
|
||||||
|
|
||||||
auto ep1 = Endpoint {beast::IP::randomEP(), 2};
|
auto ep1 = Endpoint {beast::IP::randomEP(), 2};
|
||||||
c.insert(ep1);
|
c.insert(ep1);
|
||||||
@@ -101,7 +107,7 @@ public:
|
|||||||
{
|
{
|
||||||
testcase ("Expire");
|
testcase ("Expire");
|
||||||
using namespace std::chrono_literals;
|
using namespace std::chrono_literals;
|
||||||
Livecache <> c (m_clock, beast::Journal());
|
Livecache <> c (clock_, journal_);
|
||||||
|
|
||||||
auto ep1 = Endpoint {beast::IP::randomEP(), 1};
|
auto ep1 = Endpoint {beast::IP::randomEP(), 1};
|
||||||
c.insert(ep1);
|
c.insert(ep1);
|
||||||
@@ -110,11 +116,11 @@ public:
|
|||||||
BEAST_EXPECT(c.size() == 1);
|
BEAST_EXPECT(c.size() == 1);
|
||||||
// verify that advancing to 1 sec before expiration
|
// verify that advancing to 1 sec before expiration
|
||||||
// leaves our entry intact
|
// leaves our entry intact
|
||||||
m_clock.advance(Tuning::liveCacheSecondsToLive - 1s);
|
clock_.advance(Tuning::liveCacheSecondsToLive - 1s);
|
||||||
c.expire();
|
c.expire();
|
||||||
BEAST_EXPECT(c.size() == 1);
|
BEAST_EXPECT(c.size() == 1);
|
||||||
// now advance to the point of expiration
|
// now advance to the point of expiration
|
||||||
m_clock.advance(1s);
|
clock_.advance(1s);
|
||||||
c.expire();
|
c.expire();
|
||||||
BEAST_EXPECT(c.empty());
|
BEAST_EXPECT(c.empty());
|
||||||
}
|
}
|
||||||
@@ -123,7 +129,7 @@ public:
|
|||||||
{
|
{
|
||||||
testcase ("Histogram");
|
testcase ("Histogram");
|
||||||
constexpr auto num_eps = 40;
|
constexpr auto num_eps = 40;
|
||||||
Livecache <> c (m_clock, beast::Journal());
|
Livecache <> c (clock_, journal_);
|
||||||
for (auto i = 0; i < num_eps; ++i)
|
for (auto i = 0; i < num_eps; ++i)
|
||||||
add(
|
add(
|
||||||
beast::IP::randomEP(true),
|
beast::IP::randomEP(true),
|
||||||
@@ -148,7 +154,7 @@ public:
|
|||||||
void testShuffle ()
|
void testShuffle ()
|
||||||
{
|
{
|
||||||
testcase ("Shuffle");
|
testcase ("Shuffle");
|
||||||
Livecache <> c (m_clock, beast::Journal());
|
Livecache <> c (clock_, journal_);
|
||||||
for (auto i = 0; i < 100; ++i)
|
for (auto i = 0; i < 100; ++i)
|
||||||
add(
|
add(
|
||||||
beast::IP::randomEP(true),
|
beast::IP::randomEP(true),
|
||||||
|
|||||||
@@ -23,13 +23,20 @@
|
|||||||
#include <ripple/protocol/SecretKey.h>
|
#include <ripple/protocol/SecretKey.h>
|
||||||
#include <ripple/peerfinder/impl/Logic.h>
|
#include <ripple/peerfinder/impl/Logic.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace PeerFinder {
|
namespace PeerFinder {
|
||||||
|
|
||||||
class Logic_test : public beast::unit_test::suite
|
class PeerFinder_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
|
test::SuiteJournal journal_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
PeerFinder_test()
|
||||||
|
: journal_ ("PeerFinder_test", *this)
|
||||||
|
{ }
|
||||||
|
|
||||||
struct TestStore : Store
|
struct TestStore : Store
|
||||||
{
|
{
|
||||||
std::size_t
|
std::size_t
|
||||||
@@ -74,7 +81,7 @@ public:
|
|||||||
TestStore store;
|
TestStore store;
|
||||||
TestChecker checker;
|
TestChecker checker;
|
||||||
TestStopwatch clock;
|
TestStopwatch clock;
|
||||||
Logic<TestChecker> logic (clock, store, checker, beast::Journal{});
|
Logic<TestChecker> logic (clock, store, checker, journal_);
|
||||||
logic.addFixedPeer ("test",
|
logic.addFixedPeer ("test",
|
||||||
beast::IP::Endpoint::from_string("65.0.0.1:5"));
|
beast::IP::Endpoint::from_string("65.0.0.1:5"));
|
||||||
{
|
{
|
||||||
@@ -112,7 +119,7 @@ public:
|
|||||||
TestStore store;
|
TestStore store;
|
||||||
TestChecker checker;
|
TestChecker checker;
|
||||||
TestStopwatch clock;
|
TestStopwatch clock;
|
||||||
Logic<TestChecker> logic (clock, store, checker, beast::Journal{});
|
Logic<TestChecker> logic (clock, store, checker, journal_);
|
||||||
logic.addFixedPeer ("test",
|
logic.addFixedPeer ("test",
|
||||||
beast::IP::Endpoint::from_string("65.0.0.1:5"));
|
beast::IP::Endpoint::from_string("65.0.0.1:5"));
|
||||||
{
|
{
|
||||||
@@ -156,7 +163,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
BEAST_DEFINE_TESTSUITE(Logic,PeerFinder,ripple);
|
BEAST_DEFINE_TESTSUITE(PeerFinder,PeerFinder,ripple);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,17 +20,18 @@
|
|||||||
#include <ripple/basics/chrono.h>
|
#include <ripple/basics/chrono.h>
|
||||||
#include <ripple/basics/random.h>
|
#include <ripple/basics/random.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <boost/utility/base_from_member.hpp>
|
|
||||||
#include <ripple/resource/Consumer.h>
|
#include <ripple/resource/Consumer.h>
|
||||||
#include <ripple/resource/impl/Entry.h>
|
#include <ripple/resource/impl/Entry.h>
|
||||||
#include <ripple/resource/impl/Logic.h>
|
#include <ripple/resource/impl/Logic.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
|
#include <boost/utility/base_from_member.hpp>
|
||||||
|
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace Resource {
|
namespace Resource {
|
||||||
|
|
||||||
class Manager_test : public beast::unit_test::suite
|
class ResourceManager_test : public beast::unit_test::suite
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
class TestLogic
|
class TestLogic
|
||||||
@@ -246,16 +247,17 @@ public:
|
|||||||
|
|
||||||
void run() override
|
void run() override
|
||||||
{
|
{
|
||||||
beast::Journal j;
|
using namespace beast::severities;
|
||||||
|
test::SuiteJournal journal ("ResourceManager_test", *this);
|
||||||
|
|
||||||
testDrop (j);
|
testDrop (journal);
|
||||||
testCharges (j);
|
testCharges (journal);
|
||||||
testImports (j);
|
testImports (journal);
|
||||||
testImport (j);
|
testImport (journal);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
BEAST_DEFINE_TESTSUITE(Manager,resource,ripple);
|
BEAST_DEFINE_TESTSUITE(ResourceManager,resource,ripple);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <ripple/core/ConfigSections.h>
|
#include <ripple/core/ConfigSections.h>
|
||||||
#include <test/jtx.h>
|
#include <test/jtx.h>
|
||||||
#include <test/jtx/envconfig.h>
|
#include <test/jtx/envconfig.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
#include <boost/utility/in_place_factory.hpp>
|
#include <boost/utility/in_place_factory.hpp>
|
||||||
@@ -345,12 +346,15 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using namespace beast::severities;
|
||||||
|
SuiteJournal journal ("Server_test", *this);
|
||||||
|
|
||||||
NullHandler h;
|
NullHandler h;
|
||||||
for(int i = 0; i < 1000; ++i)
|
for(int i = 0; i < 1000; ++i)
|
||||||
{
|
{
|
||||||
TestThread thread;
|
TestThread thread;
|
||||||
auto s = make_Server(h,
|
auto s = make_Server(h,
|
||||||
thread.get_io_service(), {});
|
thread.get_io_service(), journal);
|
||||||
std::vector<Port> serverPort(1);
|
std::vector<Port> serverPort(1);
|
||||||
serverPort.back().ip =
|
serverPort.back().ip =
|
||||||
beast::IP::Address::from_string (getEnvLocalhostAddr()),
|
beast::IP::Address::from_string (getEnvLocalhostAddr()),
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include <ripple/shamap/SHAMap.h>
|
#include <ripple/shamap/SHAMap.h>
|
||||||
#include <test/shamap/common.h>
|
|
||||||
#include <ripple/protocol/digest.h>
|
#include <ripple/protocol/digest.h>
|
||||||
#include <ripple/basics/contract.h>
|
#include <ripple/basics/contract.h>
|
||||||
#include <ripple/basics/random.h>
|
#include <ripple/basics/random.h>
|
||||||
@@ -26,6 +25,8 @@
|
|||||||
#include <ripple/basics/UnorderedContainers.h>
|
#include <ripple/basics/UnorderedContainers.h>
|
||||||
#include <ripple/beast/xor_shift_engine.h>
|
#include <ripple/beast/xor_shift_engine.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <test/shamap/common.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <stdexcept>
|
#include <stdexcept>
|
||||||
|
|
||||||
@@ -116,8 +117,10 @@ public:
|
|||||||
|
|
||||||
void run () override
|
void run () override
|
||||||
{
|
{
|
||||||
beast::Journal const j; // debug journal
|
using namespace beast::severities;
|
||||||
TestFamily f(j);
|
test::SuiteJournal journal ("FetchPack_test", *this);
|
||||||
|
|
||||||
|
TestFamily f(journal);
|
||||||
std::shared_ptr <Table> t1 (std::make_shared <Table> (
|
std::shared_ptr <Table> t1 (std::make_shared <Table> (
|
||||||
SHAMapType::FREE, f, SHAMap::version{2}));
|
SHAMapType::FREE, f, SHAMap::version{2}));
|
||||||
|
|
||||||
|
|||||||
@@ -19,11 +19,12 @@
|
|||||||
|
|
||||||
#include <ripple/shamap/SHAMap.h>
|
#include <ripple/shamap/SHAMap.h>
|
||||||
#include <ripple/shamap/SHAMapItem.h>
|
#include <ripple/shamap/SHAMapItem.h>
|
||||||
#include <test/shamap/common.h>
|
|
||||||
#include <ripple/basics/random.h>
|
#include <ripple/basics/random.h>
|
||||||
#include <ripple/basics/StringUtilities.h>
|
#include <ripple/basics/StringUtilities.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/beast/xor_shift_engine.h>
|
#include <ripple/beast/xor_shift_engine.h>
|
||||||
|
#include <test/shamap/common.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace tests {
|
namespace tests {
|
||||||
@@ -86,17 +87,19 @@ public:
|
|||||||
|
|
||||||
void run() override
|
void run() override
|
||||||
{
|
{
|
||||||
|
using namespace beast::severities;
|
||||||
|
test::SuiteJournal journal ("SHAMapSync_test", *this);
|
||||||
|
|
||||||
log << "Run, version 1\n" << std::endl;
|
log << "Run, version 1\n" << std::endl;
|
||||||
run(SHAMap::version{1});
|
run(SHAMap::version{1}, journal);
|
||||||
|
|
||||||
log << "Run, version 2\n" << std::endl;
|
log << "Run, version 2\n" << std::endl;
|
||||||
run(SHAMap::version{2});
|
run(SHAMap::version{2}, journal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void run(SHAMap::version v)
|
void run(SHAMap::version v, beast::Journal const& journal)
|
||||||
{
|
{
|
||||||
beast::Journal const j; // debug journal
|
TestFamily f(journal), f2(journal);
|
||||||
TestFamily f(j), f2(j);
|
|
||||||
SHAMap source (SHAMapType::FREE, f, v);
|
SHAMap source (SHAMapType::FREE, f, v);
|
||||||
SHAMap destination (SHAMapType::FREE, f2, v);
|
SHAMap destination (SHAMapType::FREE, f2, v);
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,12 @@
|
|||||||
//==============================================================================
|
//==============================================================================
|
||||||
|
|
||||||
#include <ripple/shamap/SHAMap.h>
|
#include <ripple/shamap/SHAMap.h>
|
||||||
#include <test/shamap/common.h>
|
|
||||||
#include <ripple/basics/Blob.h>
|
#include <ripple/basics/Blob.h>
|
||||||
#include <ripple/basics/StringUtilities.h>
|
#include <ripple/basics/StringUtilities.h>
|
||||||
#include <ripple/beast/unit_test.h>
|
#include <ripple/beast/unit_test.h>
|
||||||
#include <ripple/beast/utility/Journal.h>
|
#include <ripple/beast/utility/Journal.h>
|
||||||
|
#include <test/shamap/common.h>
|
||||||
|
#include <test/unit_test/SuiteJournal.h>
|
||||||
|
|
||||||
namespace ripple {
|
namespace ripple {
|
||||||
namespace tests {
|
namespace tests {
|
||||||
@@ -119,21 +120,23 @@ public:
|
|||||||
|
|
||||||
void run () override
|
void run () override
|
||||||
{
|
{
|
||||||
run (true, SHAMap::version{1});
|
using namespace beast::severities;
|
||||||
run (false, SHAMap::version{1});
|
test::SuiteJournal journal ("SHAMap_test", *this);
|
||||||
run (true, SHAMap::version{2});
|
|
||||||
run (false, SHAMap::version{2});
|
run (true, SHAMap::version{1}, journal);
|
||||||
|
run (false, SHAMap::version{1}, journal);
|
||||||
|
run (true, SHAMap::version{2}, journal);
|
||||||
|
run (false, SHAMap::version{2}, journal);
|
||||||
}
|
}
|
||||||
|
|
||||||
void run (bool backed, SHAMap::version v)
|
void run (bool backed, SHAMap::version v, beast::Journal const& journal)
|
||||||
{
|
{
|
||||||
if (backed)
|
if (backed)
|
||||||
testcase ("add/traverse backed");
|
testcase ("add/traverse backed");
|
||||||
else
|
else
|
||||||
testcase ("add/traverse unbacked");
|
testcase ("add/traverse unbacked");
|
||||||
|
|
||||||
beast::Journal const j; // debug journal
|
tests::TestFamily f(journal);
|
||||||
tests::TestFamily f(j);
|
|
||||||
|
|
||||||
// h3 and h4 differ only in the leaf, same terminal node (level 19)
|
// h3 and h4 differ only in the leaf, same terminal node (level 19)
|
||||||
uint256 h1, h2, h3, h4, h5;
|
uint256 h1, h2, h3, h4, h5;
|
||||||
@@ -301,7 +304,7 @@ public:
|
|||||||
keys[6].SetHex ("b91891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e5a772c6ca8");
|
keys[6].SetHex ("b91891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e5a772c6ca8");
|
||||||
keys[7].SetHex ("292891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e5a772c6ca8");
|
keys[7].SetHex ("292891fe4ef6cee585fdc6fda1e09eb4d386363158ec3321b8123e5a772c6ca8");
|
||||||
|
|
||||||
tests::TestFamily tf{beast::Journal{}};
|
tests::TestFamily tf{journal};
|
||||||
SHAMap map{SHAMapType::FREE, tf, v};
|
SHAMap map{SHAMapType::FREE, tf, v};
|
||||||
if (! backed)
|
if (! backed)
|
||||||
map.setUnbacked ();
|
map.setUnbacked ();
|
||||||
|
|||||||
100
src/test/unit_test/SuiteJournal.h
Normal file
100
src/test/unit_test/SuiteJournal.h
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
/*
|
||||||
|
This file is part of rippled: https://github.com/ripple/rippled
|
||||||
|
Copyright (c) 2018 Ripple Labs Inc.
|
||||||
|
|
||||||
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
purpose with or without fee is hereby granted, provided that the above
|
||||||
|
copyright notice and this permission notice appear in all copies.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
//==============================================================================
|
||||||
|
|
||||||
|
#ifndef TEST_UNIT_TEST_SUITE_JOURNAL_H
|
||||||
|
#define TEST_UNIT_TEST_SUITE_JOURNAL_H
|
||||||
|
|
||||||
|
#include <ripple/beast/unit_test.h>
|
||||||
|
#include <ripple/beast/utility/Journal.h>
|
||||||
|
|
||||||
|
namespace ripple {
|
||||||
|
namespace test {
|
||||||
|
|
||||||
|
// A Journal::Sink intended for use with the beast unit test framework.
|
||||||
|
class SuiteJournalSink : public beast::Journal::Sink
|
||||||
|
{
|
||||||
|
std::string partition_;
|
||||||
|
beast::unit_test::suite& suite_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SuiteJournalSink(std::string const& partition,
|
||||||
|
beast::severities::Severity threshold,
|
||||||
|
beast::unit_test::suite& suite)
|
||||||
|
: Sink (threshold, false)
|
||||||
|
, partition_(partition + " ")
|
||||||
|
, suite_ (suite)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// For unit testing, always generate logging text.
|
||||||
|
inline bool active(beast::severities::Severity level) const override
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
write(beast::severities::Severity level, std::string const& text) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
inline void
|
||||||
|
SuiteJournalSink::write (
|
||||||
|
beast::severities::Severity level, std::string const& text)
|
||||||
|
{
|
||||||
|
using namespace beast::severities;
|
||||||
|
|
||||||
|
char const* const s = [level]()
|
||||||
|
{
|
||||||
|
switch(level)
|
||||||
|
{
|
||||||
|
case kTrace: return "TRC:";
|
||||||
|
case kDebug: return "DBG:";
|
||||||
|
case kInfo: return "INF:";
|
||||||
|
case kWarning: return "WRN:";
|
||||||
|
case kError: return "ERR:";
|
||||||
|
default: break;
|
||||||
|
case kFatal: break;
|
||||||
|
}
|
||||||
|
return "FTL:";
|
||||||
|
}();
|
||||||
|
|
||||||
|
// Only write the string if the level at least equals the threshold.
|
||||||
|
if (level >= threshold())
|
||||||
|
suite_.log << s << partition_ << text << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
class SuiteJournal
|
||||||
|
{
|
||||||
|
SuiteJournalSink sink_;
|
||||||
|
beast::Journal journal_;
|
||||||
|
|
||||||
|
public:
|
||||||
|
SuiteJournal(std::string const& partition,
|
||||||
|
beast::unit_test::suite& suite,
|
||||||
|
beast::severities::Severity threshold = beast::severities::kFatal)
|
||||||
|
: sink_ (partition, threshold, suite)
|
||||||
|
, journal_ (sink_)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
operator beast::Journal&() { return journal_; }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // test
|
||||||
|
} // ripple
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user