macro_support.hpp 4.5 KB
Newer Older
N
Nathan Hourt 已提交
1 2 3 4 5
/**
 * @file Contains support macros for the testcase helper macros. These macros are implementation details, and thus
 * should not be used directly. Use their frontends instead.
 */

N
Nathan Hourt 已提交
6 7 8 9
#define MKDB1(name) \
   chainbase::database name ## _db(get_temp_dir(), chainbase::database::read_write, TEST_DB_SIZE); \
   block_log name ## _log(get_temp_dir() / "blocklog"); \
   fork_database name ## _fdb; \
N
Nathan Hourt 已提交
10 11
   native_contract::native_contract_chain_initializer name ## _initializer(genesis_state()); \
   testing_database name(name ## _db, name ## _fdb, name ## _log, name ## _initializer, *this);
N
Nathan Hourt 已提交
12 13 14 15
#define MKDB2(name, id) \
   chainbase::database name ## _db(get_temp_dir(#id), chainbase::database::read_write, TEST_DB_SIZE); \
   block_log name ## _log(get_temp_dir(#id) / "blocklog"); \
   fork_database name ## _fdb; \
N
Nathan Hourt 已提交
16 17
   native_contract::native_contract_chain_initializer name ## _initializer(genesis_state()); \
   testing_database name(name ## _db, name ## _fdb, name ## _log, name ## _initializer, *this);
N
Nathan Hourt 已提交
18 19 20 21 22 23 24 25
#define MKDBS_MACRO(x, y, name) Make_Database(name)

#define MKNET1(name) testing_network name;
#define MKNET2_MACRO(x, name, db) name.connect_database(db);
#define MKNET2(name, ...) MKNET1(name) BOOST_PP_SEQ_FOR_EACH(MKNET2_MACRO, name, __VA_ARGS__)

#define MKACCT_IMPL(db, name, creator, active, owner, recovery, deposit) \
   { \
26
      eos::chain::SignedTransaction trx; \
N
Nathan Hourt 已提交
27 28 29
      trx.emplaceMessage(#creator, config::SystemContractName, \
                         vector<types::AccountName>{config::StakedBalanceContractName, \
                                                    config::EosContractName}, "CreateAccount", \
N
Nathan Hourt 已提交
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
                         types::CreateAccount{#creator, #name, owner, active, recovery, deposit}); \
      trx.expiration = db.head_block_time() + 100; \
      trx.set_reference_block(db.head_block_id()); \
      db.push_transaction(trx); \
   }
#define MKACCT2(db, name) \
   Make_Key(name) \
   MKACCT_IMPL(db, name, init0, Key_Authority(name ## _public_key), Key_Authority(name ## _public_key), Account_Authority(init0), Asset(100))
#define MKACCT3(db, name, creator) \
   Make_Key(name) \
   MKACCT_IMPL(db, name, creator, Key_Authority(name ## _public_key), Key_Authority(name ## _public_key), Account_Authority(creator), Asset(100))
#define MKACCT4(db, name, creator, deposit) \
   Make_Key(name) \
   MKACCT_IMPL(db, name, creator, Key_Authority(name ## _public_key), Key_Authority(name ## _public_key), Account_Authority(creator), deposit)
#define MKACCT5(db, name, creator, deposit, owner) \
   Make_Key(name) \
   MKACCT_IMPL(db, name, creator, owner, Key_Authority(name ## _public_key), Account_Authority(creator), deposit)
#define MKACCT6(db, name, creator, deposit, owner, active) \
   MKACCT_IMPL(db, name, creator, owner, active, Account_Authority(creator), deposit)
#define MKACCT7(db, name, creator, deposit, owner, active, recovery) \
   MKACCT_IMPL(db, name, creator, owner, active, recovery, deposit)

#define XFER5(db, sender, recipient, amount, memo) \
   { \
54
      eos::chain::SignedTransaction trx; \
55
      trx.emplaceMessage(#sender, config::EosContractName, vector<AccountName>{#recipient}, "Transfer", \
N
Nathan Hourt 已提交
56 57 58 59 60 61 62
                                types::Transfer{#sender, #recipient, amount, memo}); \
      trx.expiration = db.head_block_time() + 100; \
      trx.set_reference_block(db.head_block_id()); \
      db.push_transaction(trx); \
   }
#define XFER4(db, sender, recipient, amount) XFER5(db, sender, recipient, amount, "")

63
#define MKPDCR4(db, owner, key, cfg) \
N
Nathan Hourt 已提交
64
   { \
65
      eos::chain::SignedTransaction trx; \
66 67
      trx.emplaceMessage(#owner, config::StakedBalanceContractName, vector<AccountName>{}, "CreateProducer", \
                                types::CreateProducer{#owner, key, cfg}); \
N
Nathan Hourt 已提交
68 69 70 71
      trx.expiration = db.head_block_time() + 100; \
      trx.set_reference_block(db.head_block_id()); \
      db.push_transaction(trx); \
   }
72
#define MKPDCR3(db, owner, key) MKPDCR4(db, owner, key, BlockchainConfiguration{});
N
Nathan Hourt 已提交
73 74
#define MKPDCR2(db, owner) \
   Make_Key(owner ## _producer); \
75 76
   MKPDCR4(db, owner, owner ## _producer_public_key, BlockchainConfiguration{});

77
#define UPPDCR4(db, owner, key, cfg) \
78 79
   { \
      eos::chain::SignedTransaction trx; \
80 81
      trx.emplaceMessage(owner, config::StakedBalanceContractName, vector<AccountName>{}, "UpdateProducer", \
                                types::UpdateProducer{owner, key, cfg}); \
82 83 84 85
      trx.expiration = db.head_block_time() + 100; \
      trx.set_reference_block(db.head_block_id()); \
      db.push_transaction(trx); \
   }
N
Nathan Hourt 已提交
86
#define UPPDCR3(db, owner, key) UPPDCR4(db, owner, key, db.get_producer(owner).configuration)