2#include <test/jtx/Env.h>
3#include <test/jtx/envconfig.h>
5#include <xrpld/core/Config.h>
7#include <xrpl/basics/LocalValue.h>
8#include <xrpl/beast/unit_test/suite.h>
9#include <xrpl/core/Job.h>
10#include <xrpl/core/JobQueue.h>
33 template <
class Rep,
class Period>
38 auto b =
cv_.wait_for(lk, relTime, [
this] {
return signaled_; });
55 using namespace std::chrono_literals;
61 cfg->forceMultiThread =
true;
67 env.app().getJobQueue().postCoro(
JtClient,
"CoroTest", [&](
auto const& cr) {
73 BEAST_EXPECT(g1.waitFor(5s));
76 BEAST_EXPECT(g2.waitFor(5s));
82 using namespace std::chrono_literals;
88 cfg->forceMultiThread =
true;
93 env.app().getJobQueue().postCoro(
JtClient,
"CoroTest", [&](
auto const& c) {
98 BEAST_EXPECT(g.waitFor(5s));
104 using namespace std::chrono_literals;
107 testcase(
"thread specific storage");
112 static int const kN = 4;
116 BEAST_EXPECT(*lv == -1);
119 jq.addJob(
JtClient,
"LocalValTest", [&]() {
120 this->BEAST_EXPECT(*lv == -1);
122 this->BEAST_EXPECT(*lv == -2);
126 BEAST_EXPECT(*lv == -1);
128 for (
int i = 0; i < kN; ++i)
130 jq.postCoro(
JtClient,
"CoroTest", [&,
id = i](
auto const& c) {
135 this->BEAST_EXPECT(*lv == -1);
137 this->BEAST_EXPECT(*lv ==
id);
141 this->BEAST_EXPECT(*lv ==
id);
146 for (
auto const& c : a)
152 for (
auto const& c : a)
158 jq.addJob(
JtClient,
"LocalValTest", [&]() {
159 this->BEAST_EXPECT(*lv == -2);
163 BEAST_EXPECT(*lv == -1);
TestcaseT testcase
Memberspace for declaring test cases.
virtual JobQueue & getJobQueue()=0
bool waitFor(std::chrono::duration< Rep, Period > const &relTime)
std::condition_variable cv_
void threadSpecificStorage()
void run() override
Runs the suite.
A transaction testing environment.
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.