rippled
Env.h
1 //------------------------------------------------------------------------------
2 /*
3  This file is part of rippled: https://github.com/ripple/rippled
4  Copyright (c) 2012, 2013 Ripple Labs Inc.
5 
6  Permission to use, copy, modify, and/or distribute this software for any
7  purpose with or without fee is hereby granted, provided that the above
8  copyright notice and this permission notice appear in all copies.
9 
10  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  ANY SPECIAL , DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18 //==============================================================================
19 
20 #ifndef RIPPLE_TEST_JTX_ENV_H_INCLUDED
21 #define RIPPLE_TEST_JTX_ENV_H_INCLUDED
22 
23 #include <ripple/app/ledger/Ledger.h>
24 #include <ripple/app/ledger/OpenLedger.h>
25 #include <ripple/app/main/Application.h>
26 #include <ripple/app/paths/Pathfinder.h>
27 #include <ripple/basics/Log.h>
28 #include <ripple/basics/chrono.h>
29 #include <ripple/beast/utility/Journal.h>
30 #include <ripple/core/Config.h>
31 #include <ripple/json/json_value.h>
32 #include <ripple/json/to_string.h>
33 #include <ripple/ledger/CachedSLEs.h>
34 #include <ripple/protocol/Feature.h>
35 #include <ripple/protocol/Indexes.h>
36 #include <ripple/protocol/Issue.h>
37 #include <ripple/protocol/STAmount.h>
38 #include <ripple/protocol/STObject.h>
39 #include <ripple/protocol/STTx.h>
40 #include <functional>
41 #include <string>
42 #include <test/jtx/AbstractClient.h>
43 #include <test/jtx/Account.h>
44 #include <test/jtx/JTx.h>
45 #include <test/jtx/ManualTimeKeeper.h>
46 #include <test/jtx/amount.h>
47 #include <test/jtx/envconfig.h>
48 #include <test/jtx/require.h>
49 #include <test/jtx/tags.h>
50 #include <test/unit_test/SuiteJournal.h>
51 #include <tuple>
52 #include <type_traits>
53 #include <unordered_map>
54 #include <utility>
55 #include <vector>
56 
57 namespace ripple {
58 namespace test {
59 namespace jtx {
60 
62 template <class... Args>
63 std::array<Account, 1 + sizeof...(Args)>
64 noripple(Account const& account, Args const&... args)
65 {
66  return {{account, args...}};
67 }
68 
69 inline FeatureBitset
71 {
72  static const FeatureBitset ids = [] {
73  auto const& sa = ripple::detail::supportedAmendments();
75  feats.reserve(sa.size());
76  for (auto const& [s, vote] : sa)
77  {
78  (void)vote;
79  if (auto const f = getRegisteredFeature(s))
80  feats.push_back(*f);
81  else
82  Throw<std::runtime_error>(
83  "Unknown feature: " + s + " in supportedAmendments.");
84  }
85  return FeatureBitset(feats);
86  }();
87  return ids;
88 }
89 
90 //------------------------------------------------------------------------------
91 
92 class SuiteLogs : public Logs
93 {
94  beast::unit_test::suite& suite_;
95 
96 public:
97  explicit SuiteLogs(beast::unit_test::suite& suite)
98  : Logs(beast::severities::kError), suite_(suite)
99  {
100  }
101 
102  ~SuiteLogs() override = default;
103 
106  std::string const& partition,
108  {
109  return std::make_unique<SuiteJournalSink>(partition, threshold, suite_);
110  }
111 };
112 
113 //------------------------------------------------------------------------------
114 
116 class Env
117 {
118 public:
119  beast::unit_test::suite& test;
120 
122 
123 private:
124  struct AppBundle
125  {
126  Application* app = nullptr;
131 
132  AppBundle() = default;
133  AppBundle(
134  beast::unit_test::suite& suite,
138  ~AppBundle();
139  };
140 
142 
143 public:
145 
146  Env() = delete;
147  Env&
148  operator=(Env const&) = delete;
149  Env(Env const&) = delete;
150 
165  // VFALCO Could wrap the suite::log in a Journal here
166  Env(beast::unit_test::suite& suite_,
168  FeatureBitset features,
169  std::unique_ptr<Logs> logs = nullptr,
171  : test(suite_)
172  , bundle_(suite_, std::move(config), std::move(logs), thresh)
173  , journal{bundle_.app->journal("Env")}
174  {
178  features, [&appFeats = app().config().features](uint256 const& f) {
179  appFeats.insert(f);
180  });
181  }
182 
196  Env(beast::unit_test::suite& suite_, FeatureBitset features)
197  : Env(suite_, envconfig(), features)
198  {
199  }
200 
213  Env(beast::unit_test::suite& suite_,
215  std::unique_ptr<Logs> logs = nullptr,
217  : Env(suite_,
218  std::move(config),
220  std::move(logs),
221  thresh)
222  {
223  }
224 
234  Env(beast::unit_test::suite& suite_) : Env(suite_, envconfig())
235  {
236  }
237 
238  virtual ~Env() = default;
239 
240  Application&
241  app()
242  {
243  return *bundle_.app;
244  }
245 
246  Application const&
247  app() const
248  {
249  return *bundle_.app;
250  }
251 
254  {
255  return *bundle_.timeKeeper;
256  }
257 
264  now()
265  {
266  return timeKeeper().now();
267  }
268 
272  {
273  return *bundle_.client;
274  }
275 
281  template <class... Args>
284  std::string const& cmd,
285  Args&&... args);
286 
287  template <class... Args>
289  rpc(std::string const& cmd, Args&&... args);
290 
300  current() const
301  {
302  return app().openLedger().current();
303  }
304 
313  closed();
314 
334  bool
335  close(
336  NetClock::time_point closeTime,
337  std::optional<std::chrono::milliseconds> consensusDelay = std::nullopt);
338 
346  template <class Rep, class Period>
347  bool
349  {
350  // VFALCO Is this the correct time?
351  return close(now() + elapsed);
352  }
353 
361  bool
363  {
364  // VFALCO Is this the correct time?
365  return close(std::chrono::seconds(5));
366  }
367 
371  void
372  trace(int howMany = -1)
373  {
374  trace_ = howMany;
375  }
376 
378  void
380  {
381  trace_ = 0;
382  }
383 
385  void
387  {
388  app().checkSigs(false);
389  }
390 
392  void
393  memoize(Account const& account);
394 
397  Account const&
398  lookup(AccountID const& id) const;
399 
400  Account const&
401  lookup(std::string const& base58ID) const;
408  balance(Account const& account) const;
409 
415  seq(Account const& account) const;
416 
420  // VFALCO NOTE This should return a unit-less amount
422  balance(Account const& account, Issue const& issue) const;
423 
428  le(Account const& account) const;
429 
434  le(Keylet const& k) const;
435 
437  template <class JsonValue, class... FN>
438  JTx
439  jt(JsonValue&& jv, FN const&... fN)
440  {
441  JTx jt(std::forward<JsonValue>(jv));
442  invoke(jt, fN...);
443  autofill(jt);
444  jt.stx = st(jt);
445  return jt;
446  }
447 
449  template <class JsonValue, class... FN>
450  JTx
451  jtnofill(JsonValue&& jv, FN const&... fN)
452  {
453  JTx jt(std::forward<JsonValue>(jv));
454  invoke(jt, fN...);
455  autofill_sig(jt);
456  jt.stx = st(jt);
457  return jt;
458  }
459 
463  template <class JsonValue, class... FN>
465  json(JsonValue&& jv, FN const&... fN)
466  {
467  auto tj = jt(std::forward<JsonValue>(jv), fN...);
468  return std::move(tj.jv);
469  }
470 
476  template <class... Args>
477  void
478  require(Args const&... args)
479  {
480  jtx::required(args...)(*this);
481  }
482 
485  static std::pair<TER, bool>
486  parseResult(Json::Value const& jr);
487 
491  virtual void
492  submit(JTx const& jt);
493 
497  void
499 
503  void
504  postconditions(JTx const& jt, TER ter, bool didApply);
505 
508  template <class JsonValue, class... FN>
509  void
510  apply(JsonValue&& jv, FN const&... fN)
511  {
512  submit(jt(std::forward<JsonValue>(jv), fN...));
513  }
514 
515  template <class JsonValue, class... FN>
516  void
517  operator()(JsonValue&& jv, FN const&... fN)
518  {
519  apply(std::forward<JsonValue>(jv), fN...);
520  }
524  TER
525  ter() const
526  {
527  return ter_;
528  }
529 
539  meta();
540 
553  tx() const;
554 
555  void
556  enableFeature(uint256 const feature);
557 
558  void
559  disableFeature(uint256 const feature);
560 
561 private:
562  void
563  fund(bool setDefaultRipple, STAmount const& amount, Account const& account);
564 
565  void
566  fund_arg(STAmount const& amount, Account const& account)
567  {
568  fund(true, amount, account);
569  }
570 
571  template <std::size_t N>
572  void
573  fund_arg(STAmount const& amount, std::array<Account, N> const& list)
574  {
575  for (auto const& account : list)
576  fund(false, amount, account);
577  }
578 
579 public:
606  template <class Arg, class... Args>
607  void
608  fund(STAmount const& amount, Arg const& arg, Args const&... args)
609  {
610  fund_arg(amount, arg);
611  if constexpr (sizeof...(args) > 0)
612  fund(amount, args...);
613  }
614 
633  void
634  trust(STAmount const& amount, Account const& account);
635 
636  template <class... Accounts>
637  void
639  STAmount const& amount,
640  Account const& to0,
641  Account const& to1,
642  Accounts const&... toN)
643  {
644  trust(amount, to0);
645  trust(amount, to1, toN...);
646  }
649 protected:
650  int trace_ = 0;
654 
656  do_rpc(
657  std::vector<std::string> const& args,
659 
660  void
661  autofill_sig(JTx& jt);
662 
663  virtual void
664  autofill(JTx& jt);
665 
674  st(JTx const& jt);
675 
676  // Invoke funclets on stx
677  // Note: The STTx may not be modified
678  template <class... FN>
679  void
680  invoke(STTx& stx, FN const&... fN)
681  {
682  (fN(*this, stx), ...);
683  }
684 
685  // Invoke funclets on jt
686  template <class... FN>
687  void
688  invoke(JTx& jt, FN const&... fN)
689  {
690  (fN(*this, jt), ...);
691  }
692 
693  // Map of account IDs to Account
695 };
696 
697 template <class... Args>
701  std::string const& cmd,
702  Args&&... args)
703 {
704  return do_rpc(
705  std::vector<std::string>{cmd, std::forward<Args>(args)...}, headers);
706 }
707 
708 template <class... Args>
710 Env::rpc(std::string const& cmd, Args&&... args)
711 {
712  return rpc(
714  cmd,
715  std::forward<Args>(args)...);
716 }
717 
718 } // namespace jtx
719 } // namespace test
720 } // namespace ripple
721 
722 #endif
ripple::test::jtx::Env::AppBundle::app
Application * app
Definition: Env.h:126
ripple::test::jtx::Env::invoke
void invoke(STTx &stx, FN const &... fN)
Definition: Env.h:680
ripple::Application
Definition: Application.h:116
ripple::Application::checkSigs
virtual bool checkSigs() const =0
ripple::test::jtx::Env::Env
Env(beast::unit_test::suite &suite_, FeatureBitset features)
Create Env with default config and specified features.
Definition: Env.h:196
ripple::test::jtx::Env::autofill_sig
void autofill_sig(JTx &jt)
Definition: Env.cpp:388
ripple::test::jtx::SuiteLogs::suite_
beast::unit_test::suite & suite_
Definition: Env.h:94
ripple::test::jtx::Env::fund
void fund(STAmount const &amount, Arg const &arg, Args const &... args)
Create a new account with some XRP.
Definition: Env.h:608
ripple::Keylet
A pair of SHAMap key and LedgerEntryType.
Definition: Keylet.h:38
ripple::OpenLedger::current
std::shared_ptr< OpenView const > current() const
Returns a view to the current open ledger.
Definition: OpenLedger.cpp:50
ripple::Issue
A currency issued by an account.
Definition: Issue.h:35
std::string
STL class.
std::shared_ptr
STL class.
utility
ripple::Logs
Manages partitions for logging.
Definition: Log.h:48
ripple::test::jtx::Env::map_
std::unordered_map< AccountID, Account > map_
Definition: Env.h:694
ripple::test::jtx::Env::ter_
TER ter_
Definition: Env.h:653
ripple::test::AbstractClient
Definition: AbstractClient.h:33
ripple::test::jtx::Env::AppBundle::client
std::unique_ptr< AbstractClient > client
Definition: Env.h:130
ripple::test::jtx::Env::tx
std::shared_ptr< STTx const > tx() const
Return the tx data for the last JTx.
Definition: Env.cpp:382
ripple::test::jtx::ter
Set the expected result code for a JTx The test will fail if the code doesn't match.
Definition: ter.h:33
functional
ripple::test::jtx::Env::require
void require(Args const &... args)
Check a set of requirements.
Definition: Env.h:478
ripple::test::jtx::Env::apply
void apply(JsonValue &&jv, FN const &... fN)
Apply funclets and submit.
Definition: Env.h:510
ripple::test::jtx::Env::closed
std::shared_ptr< ReadView const > closed()
Returns the last closed ledger.
Definition: Env.cpp:115
std::pair
std::vector::reserve
T reserve(T... args)
ripple::test::jtx::Env::fund_arg
void fund_arg(STAmount const &amount, std::array< Account, N > const &list)
Definition: Env.h:573
ripple::test::jtx::Env::AppBundle::AppBundle
AppBundle()=default
vector
ripple::test::jtx::Env::enableFeature
void enableFeature(uint256 const feature)
Definition: Env.cpp:470
ripple::test::jtx::Env::AppBundle::timeKeeper
ManualTimeKeeper * timeKeeper
Definition: Env.h:128
ripple::test::jtx::Env::txid_
uint256 txid_
Definition: Env.h:652
ripple::test::jtx::Env::AppBundle::~AppBundle
~AppBundle()
Definition: Env.cpp:95
ripple::test::jtx::JTx::stx
std::shared_ptr< STTx const > stx
Definition: JTx.h:50
ripple::test::jtx::Env::jt
JTx jt(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
Definition: Env.h:439
std::chrono::duration
ripple::test::jtx::Env::journal
const beast::Journal journal
Definition: Env.h:144
ripple::test::jtx::Env::notrace
void notrace()
Turn off JSON tracing.
Definition: Env.h:379
ripple::test::jtx::Env::disable_sigs
void disable_sigs()
Turn off signature checks.
Definition: Env.h:386
ripple::test::jtx::Env::timeKeeper
ManualTimeKeeper & timeKeeper()
Definition: Env.h:253
ripple::test::jtx::SuiteLogs::~SuiteLogs
~SuiteLogs() override=default
ripple::test::jtx::Env::sign_and_submit
void sign_and_submit(JTx const &jt, Json::Value params=Json::nullValue)
Use the submit RPC command with a provided JTx object.
Definition: Env.cpp:311
tuple
ripple::test::jtx::Env::AppBundle::thread
std::thread thread
Definition: Env.h:129
ripple::Pathfinder::initPathTable
static void initPathTable()
Definition: Pathfinder.cpp:1300
ripple::test::jtx::Env::balance
PrettyAmount balance(Account const &account) const
Returns the XRP balance on an account.
Definition: Env.cpp:183
ripple::test::jtx::Env::app
Application & app()
Definition: Env.h:241
ripple::test::jtx::envconfig
std::unique_ptr< Config > envconfig()
creates and initializes a default configuration for jtx::Env
Definition: envconfig.h:49
ripple::Application::openLedger
virtual OpenLedger & openLedger()=0
ripple::test::jtx::Env::bundle_
AppBundle bundle_
Definition: Env.h:141
ripple::test::jtx::Env::ter
TER ter() const
Return the TER for the last JTx.
Definition: Env.h:525
ripple::test::jtx::Env::trust
void trust(STAmount const &amount, Account const &account)
Establish trust lines.
Definition: Env.cpp:259
ripple::test::jtx::Env::st
std::shared_ptr< STTx const > st(JTx const &jt)
Create a STTx from a JTx The framework requires that JSON is valid.
Definition: Env.cpp:436
ripple::test::jtx::Env::Env
Env(beast::unit_test::suite &suite_, std::unique_ptr< Config > config, FeatureBitset features, std::unique_ptr< Logs > logs=nullptr, beast::severities::Severity thresh=beast::severities::kError)
Create Env using suite, Config pointer, and explicit features.
Definition: Env.h:166
ripple::test::jtx::Env::parseResult
static std::pair< TER, bool > parseResult(Json::Value const &jr)
Gets the TER result and didApply flag from a RPC Json result object.
Definition: Env.cpp:276
std::vector::push_back
T push_back(T... args)
ripple::test::ManualTimeKeeper
Definition: ManualTimeKeeper.h:29
ripple::base_uint< 256 >
ripple::test::jtx::SuiteLogs::SuiteLogs
SuiteLogs(beast::unit_test::suite &suite)
Definition: Env.h:97
ripple::test::jtx::Env::stopwatch_
TestStopwatch stopwatch_
Definition: Env.h:651
ripple::test::jtx::Env::meta
std::shared_ptr< STObject const > meta()
Return metadata for the last JTx.
Definition: Env.cpp:374
ripple::foreachFeature
void foreachFeature(FeatureBitset bs, F &&f)
Definition: Feature.h:298
ripple::test::jtx::Env::close
bool close(std::chrono::duration< Rep, Period > const &elapsed)
Close and advance the ledger.
Definition: Env.h:348
ripple::test::jtx::Env::operator()
void operator()(JsonValue &&jv, FN const &... fN)
Definition: Env.h:517
std::thread
STL class.
ripple::test::jtx::Env::trace
void trace(int howMany=-1)
Turn on JSON tracing.
Definition: Env.h:372
ripple::test::jtx::Env::postconditions
void postconditions(JTx const &jt, TER ter, bool didApply)
Check expected postconditions of JTx submission.
Definition: Env.cpp:349
ripple::TERSubset< CanCvtToTER >
ripple::test::jtx::SuiteLogs
Definition: Env.h:92
ripple::test::jtx::JTx
Execution context for applying a JSON transaction.
Definition: JTx.h:42
std::array
STL class.
ripple::test::jtx::Env::submit
virtual void submit(JTx const &jt)
Submit an existing JTx.
Definition: Env.cpp:288
ripple::STAmount
Definition: STAmount.h:45
std::chrono::time_point
ripple::STTx
Definition: STTx.h:45
ripple::test::jtx::Env::lookup
Account const & lookup(AccountID const &id) const
Returns the Account given the AccountID.
Definition: Env.cpp:162
beast::Journal
A generic endpoint for log messages.
Definition: Journal.h:58
ripple::test::jtx::supported_amendments
FeatureBitset supported_amendments()
Definition: Env.h:70
std::uint32_t
ripple::test::jtx::Account::master
static const Account master
The master account.
Definition: Account.h:47
ripple::test::jtx::Env::seq
std::uint32_t seq(Account const &account) const
Returns the next sequence number on account.
Definition: Env.cpp:207
ripple::test::jtx::Env::app
Application const & app() const
Definition: Env.h:247
ripple::test::jtx::Env::test
beast::unit_test::suite & test
Definition: Env.h:119
ripple::test::jtx::Env::invoke
void invoke(JTx &jt, FN const &... fN)
Definition: Env.h:688
ripple::test::jtx::required
require_t required(Args const &... args)
Compose many condition functors into one.
Definition: require.h:47
ripple::test::jtx::Env::client
AbstractClient & client()
Returns the connected client.
Definition: Env.h:271
beast::severities::kError
@ kError
Definition: Journal.h:38
ripple::Logs::threshold
beast::severities::Severity threshold() const
Definition: Log.cpp:150
ripple
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: RCLCensorshipDetector.h:29
ripple::test::jtx::Env::operator=
Env & operator=(Env const &)=delete
ripple::Application::journal
virtual beast::Journal journal(std::string const &name)=0
ripple::test::jtx::noripple
std::array< Account, 1+sizeof...(Args)> noripple(Account const &account, Args const &... args)
Designate accounts as no-ripple in Env::fund.
Definition: Env.h:64
ripple::test::jtx::Env::autofill
virtual void autofill(JTx &jt)
Definition: Env.cpp:411
ripple::test::jtx::Env::do_rpc
Json::Value do_rpc(std::vector< std::string > const &args, std::unordered_map< std::string, std::string > const &headers={})
Definition: Env.cpp:462
ripple::test::jtx::Env::now
NetClock::time_point now()
Returns the current network time.
Definition: Env.h:264
ripple::test::jtx::Env::close
bool close()
Close and advance the ledger.
Definition: Env.h:362
beast::severities::Severity
Severity
Severity level / threshold of a Journal message.
Definition: Journal.h:31
std
STL namespace.
ripple::test::jtx::Env::fund
void fund(bool setDefaultRipple, STAmount const &amount, Account const &account)
Definition: Env.cpp:228
ripple::test::jtx::Env::le
std::shared_ptr< SLE const > le(Account const &account) const
Return an account root.
Definition: Env.cpp:216
ripple::test::jtx::Env::AppBundle::owned
std::unique_ptr< Application > owned
Definition: Env.h:127
ripple::test::jtx::Env::master
Account const & master
Definition: Env.h:121
Json::nullValue
@ nullValue
'null' value
Definition: json_value.h:36
ripple::FeatureBitset
Definition: Feature.h:113
ripple::test::jtx::Env::Env
Env(beast::unit_test::suite &suite_)
Create Env with only the current test suite.
Definition: Env.h:234
std::optional< std::chrono::milliseconds >
ripple::test::jtx::Env::disableFeature
void disableFeature(uint256 const feature)
Definition: Env.cpp:478
ripple::test::jtx::Env::~Env
virtual ~Env()=default
ripple::test::jtx::Account
Immutable cryptographic account descriptor.
Definition: Account.h:37
ripple::test::jtx::Env::fund_arg
void fund_arg(STAmount const &amount, Account const &account)
Definition: Env.h:566
ripple::test::ManualTimeKeeper::now
time_point now() const override
Returns the estimate of wall time, in network time.
Definition: ManualTimeKeeper.cpp:37
beast::manual_clock< std::chrono::steady_clock >
ripple::getRegisteredFeature
std::optional< uint256 > getRegisteredFeature(std::string const &name)
Definition: Feature.cpp:342
ripple::test::jtx::Env::memoize
void memoize(Account const &account)
Associate AccountID with account.
Definition: Env.cpp:156
ripple::test::jtx::Env::Env
Env()=delete
std::unique_ptr< beast::Journal::Sink >
unordered_map
ripple::test::jtx::Env::jtnofill
JTx jtnofill(JsonValue &&jv, FN const &... fN)
Create a JTx from parameters.
Definition: Env.h:451
ripple::test::jtx::SuiteLogs::makeSink
std::unique_ptr< beast::Journal::Sink > makeSink(std::string const &partition, beast::severities::Severity threshold) override
Definition: Env.h:105
ripple::tesSUCCESS
@ tesSUCCESS
Definition: TER.h:225
type_traits
ripple::detail::supportedAmendments
std::map< std::string, VoteBehavior > const & supportedAmendments()
Amendments that this server supports and the default voting behavior.
Definition: Feature.cpp:320
ripple::test::jtx::Env::current
std::shared_ptr< OpenView const > current() const
Returns the current ledger.
Definition: Env.h:300
ripple::test::jtx::Env::json
Json::Value json(JsonValue &&jv, FN const &... fN)
Create JSON from parameters.
Definition: Env.h:465
ripple::test::jtx::Env::trust
void trust(STAmount const &amount, Account const &to0, Account const &to1, Accounts const &... toN)
Definition: Env.h:638
ripple::test::jtx::Env
A transaction testing environment.
Definition: Env.h:116
ripple::test::jtx::Env::AppBundle
Definition: Env.h:124
ripple::test::jtx::Env::rpc
Json::Value rpc(std::unordered_map< std::string, std::string > const &headers, std::string const &cmd, Args &&... args)
Execute an RPC command.
Definition: Env.h:699
Json::Value
Represents a JSON value.
Definition: json_value.h:145
ripple::test::jtx::PrettyAmount
Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...
Definition: amount.h:73
ripple::test::jtx::Env::trace_
int trace_
Definition: Env.h:650
ripple::test::jtx::Env::Env
Env(beast::unit_test::suite &suite_, std::unique_ptr< Config > config, std::unique_ptr< Logs > logs=nullptr, beast::severities::Severity thresh=beast::severities::kError)
Create Env using suite and Config pointer.
Definition: Env.h:213
beast
Definition: base_uint.h:641
string