3#include <xrpl/beast/unit_test/global_suites.h>
4#include <xrpl/beast/unit_test/runner.h>
6#include <boost/beast/core/static_string.hpp>
7#include <boost/container/static_vector.hpp>
8#include <boost/interprocess/ipc/message_queue.hpp>
9#include <boost/interprocess/mapped_region.hpp>
10#include <boost/interprocess/shared_memory_object.hpp>
11#include <boost/interprocess/sync/interprocess_mutex.hpp>
68 boost::container::static_vector<run_time, kMaxTop>
top;
82template <
bool IsParent>
99 mutable boost::interprocess::interprocess_mutex
m;
266 template <
class Pred>
300 auto const numTests = suite.size();
305 if (curTestIndex >= numTests)
307 auto iter = suite.begin();
311 while (
auto t = getTest())
317 failed =
run(*t) || failed;
326 s <<
jobIndex_ <<
"> failed Unhandled exception in test.\n";
Unit test runner interface.
bool run(SuiteInfo const &s)
Run the specified suite.
Associates a unit test type with metadata.
std::unique_ptr< boost::interprocess::message_queue > messageQueue_
std::size_t checkoutTestIndex()
static constexpr char const * kSharedMemName
void addFailures(std::size_t failures)
void add(Results const &r)
boost::interprocess::shared_memory_object sharedMem_
static constexpr char const * kMessageQueueName
std::size_t checkoutJobIndex()
std::size_t suites() const
std::size_t getKeepAliveCount()
boost::interprocess::mapped_region region_
void messageQueueSend(MessageType mt, std::string const &s)
std::size_t tests() const
void onSuiteEnd() override
Called when a suite ends.
MultiRunnerChild & operator=(MultiRunnerChild const &)=delete
void onFail(std::string const &reason) override
Called for each failing condition.
~MultiRunnerChild() override
void onPass() override
Called for each passing condition.
void onSuiteBegin(beast::unit_test::SuiteInfo const &info) override
Called when a new suite starts.
void onLog(std::string const &s) override
Called when a test logs output.
detail::SuiteResults suiteResults_
std::thread keepAliveThread_
void addFailures(std::size_t failures)
detail::CaseResults caseResults_
void onCaseEnd() override
Called when a new case ends.
std::atomic< bool > continueKeepAlive_
std::size_t suites() const
void onCaseBegin(std::string const &name) override
Called when a new case starts.
MultiRunnerChild(MultiRunnerChild const &)=delete
std::size_t tests() const
MultiRunnerParent & operator=(MultiRunnerParent const &)=delete
void addFailures(std::size_t failures)
std::set< std::string > runningSuites_
std::atomic< bool > continueMessageQueue_
MultiRunnerParent(MultiRunnerParent const &)=delete
std::size_t suites() const
std::thread messageQueueThread_
std::size_t tests() const
SuiteList const & globalSuites()
Holds test suites registered during static initialization.
std::chrono::steady_clock clock_type
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
CaseResults(std::string name="")
std::size_t getKeepAliveCount()
std::size_t checkoutJobIndex()
std::atomic< std::size_t > keepAlive
boost::interprocess::interprocess_mutex m
std::atomic< std::size_t > jobIndex
std::atomic< bool > anyFailedFlag
void add(Results const &r)
std::size_t suites() const
std::size_t checkoutTestIndex()
std::atomic< std::size_t > testIndex
std::size_t tests() const
static constexpr auto kMaxTop
std::pair< static_string, clock_type::duration > run_time
boost::container::static_vector< run_time, kMaxTop > top
boost::beast::static_string< 256 > static_string
clock_type::time_point start
void merge(Results const &r)
void add(SuiteResults const &r)
clock_type::time_point start
SuiteResults(std::string name="")
void add(CaseResults const &r)