xrpld
Loading...
Searching...
No Matches
Hooks_test.cpp
1
2
3#include <test/jtx/Env.h> // IWYU pragma: keep
4
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/beast/unit_test/suite.h>
7#include <xrpl/protocol/AccountID.h>
8#include <xrpl/protocol/SField.h>
9#include <xrpl/protocol/STArray.h>
10#include <xrpl/protocol/STObject.h>
11
12#include <cstdint>
13#include <functional>
14#include <vector>
15
16namespace xrpl {
17
19{
26
27 void
29 {
30 testcase("Test Hooks fields");
31
32 using namespace test::jtx;
33
35 sfHookResult,
36 sfHookStateChangeCount,
37 sfHookEmitCount,
38 sfHookExecutionIndex,
39 sfHookApiVersion,
40 sfHookStateCount,
41 sfEmitGeneration,
42 sfHookOn,
43 sfHookInstructionCount,
44 sfEmitBurden,
45 sfHookReturnCode,
46 sfReferenceCount,
47 sfEmitParentTxnID,
48 sfEmitNonce,
49 sfEmitHookHash,
50 sfHookStateKey,
51 sfHookHash,
52 sfHookNamespace,
53 sfHookSetTxnID,
54 sfHookStateData,
55 sfHookReturnString,
56 sfHookParameterName,
57 sfHookParameterValue,
58 sfEmitCallback,
59 sfHookAccount,
60 sfEmittedTxn,
61 sfHook,
62 sfHookDefinition,
63 sfHookParameter,
64 sfHookGrant,
65 sfEmitDetails,
66 sfHookExecutions,
67 sfHookExecution,
68 sfHookParameters,
69 sfHooks,
70 sfHookGrants};
71
72 for (auto const& rf : fieldsToTest)
73 {
74 SField const& f = rf.get();
75
76 STObject dummy{sfGeneric};
77
78 BEAST_EXPECT(!dummy.isFieldPresent(f));
79
80 switch (f.fieldType)
81 {
82 case STI_UINT8: {
83 dummy.setFieldU8(f, 0);
84 BEAST_EXPECT(dummy.getFieldU8(f) == 0);
85
86 dummy.setFieldU8(f, 255);
87 BEAST_EXPECT(dummy.getFieldU8(f) == 255);
88
89 BEAST_EXPECT(dummy.isFieldPresent(f));
90 break;
91 }
92
93 case STI_UINT16: {
94 dummy.setFieldU16(f, 0);
95 BEAST_EXPECT(dummy.getFieldU16(f) == 0);
96
97 dummy.setFieldU16(f, 0xFFFFU);
98 BEAST_EXPECT(dummy.getFieldU16(f) == 0xFFFFU);
99
100 BEAST_EXPECT(dummy.isFieldPresent(f));
101 break;
102 }
103
104 case STI_UINT32: {
105 dummy.setFieldU32(f, 0);
106 BEAST_EXPECT(dummy.getFieldU32(f) == 0);
107
108 dummy.setFieldU32(f, 0xFFFFFFFFU);
109 BEAST_EXPECT(dummy.getFieldU32(f) == 0xFFFFFFFFU);
110
111 BEAST_EXPECT(dummy.isFieldPresent(f));
112 break;
113 }
114
115 case STI_UINT64: {
116 dummy.setFieldU64(f, 0);
117 BEAST_EXPECT(dummy.getFieldU64(f) == 0);
118
119 dummy.setFieldU64(f, 0xFFFFFFFFFFFFFFFFU);
120 BEAST_EXPECT(dummy.getFieldU64(f) == 0xFFFFFFFFFFFFFFFFU);
121
122 BEAST_EXPECT(dummy.isFieldPresent(f));
123 break;
124 }
125
126 case STI_UINT256: {
127 uint256 const u = uint256::fromVoid(
128 "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBE"
129 "EFDEADBEEF");
130 dummy.setFieldH256(f, u);
131 BEAST_EXPECT(dummy.getFieldH256(f) == u);
132 BEAST_EXPECT(dummy.isFieldPresent(f));
133 break;
134 }
135
136 case STI_VL: {
137 std::vector<uint8_t> const v{1, 2, 3};
138 dummy.setFieldVL(f, v);
139 BEAST_EXPECT(dummy.getFieldVL(f) == v);
140 BEAST_EXPECT(dummy.isFieldPresent(f));
141 break;
142 }
143
144 case STI_ACCOUNT: {
145 // NOLINTBEGIN(bugprone-unchecked-optional-access)
146 AccountID const id =
147 *parseBase58<AccountID>("rwfSjJNK2YQuN64bSWn7T2eY9FJAyAPYJT");
148 // NOLINTEND(bugprone-unchecked-optional-access)
149 dummy.setAccountID(f, id);
150 BEAST_EXPECT(dummy.getAccountID(f) == id);
151 BEAST_EXPECT(dummy.isFieldPresent(f));
152 break;
153 }
154
155 case STI_OBJECT: {
156 dummy.emplaceBack(STObject{f});
157 BEAST_EXPECT(dummy.getField(f).getFName() == f);
158 BEAST_EXPECT(dummy.isFieldPresent(f));
159 break;
160 }
161
162 case STI_ARRAY: {
163 STArray dummy2{f, 2};
164 dummy2.pushBack(STObject{sfGeneric});
165 dummy2.pushBack(STObject{sfGeneric});
166 dummy.setFieldArray(f, dummy2);
167 BEAST_EXPECT(dummy.getFieldArray(f) == dummy2);
168 BEAST_EXPECT(dummy.isFieldPresent(f));
169 break;
170 }
171
172 default:
173 BEAST_EXPECT(false);
174 }
175 }
176 }
177
178public:
179 void
180 run() override
181 {
182 using namespace test::jtx;
184 }
185};
186
188
189} // namespace xrpl
A testsuite class.
Definition suite.h:50
TestcaseT testcase
Memberspace for declaring test cases.
Definition suite.h:149
static BaseUInt fromVoid(void const *data)
Definition base_uint.h:322
void run() override
Runs the suite.
void testHookFields()
This unit test was requested here: https://github.com/XRPLF/rippled/pull/4089#issuecomment-1050274539...
Identifies fields.
Definition SField.h:130
SerializedTypeID const fieldType
Definition SField.h:151
void pushBack(STObject const &object)
Definition STArray.h:204
SField const & getFName() const
Definition STBase.cpp:126
void setFieldU8(SField const &field, unsigned char)
Definition STObject.cpp:721
Blob getFieldVL(SField const &field) const
Definition STObject.cpp:639
void setFieldU64(SField const &field, std::uint64_t)
Definition STObject.cpp:739
unsigned char getFieldU8(SField const &field) const
Definition STObject.cpp:579
std::uint32_t getFieldU32(SField const &field) const
Definition STObject.cpp:591
void setFieldVL(SField const &field, Blob const &)
Definition STObject.cpp:781
void setFieldU32(SField const &field, std::uint32_t)
Definition STObject.cpp:733
std::size_t emplaceBack(Args &&... args)
Definition STObject.h:1003
STArray const & getFieldArray(SField const &field) const
Definition STObject.cpp:678
void setFieldArray(SField const &field, STArray const &v)
Definition STObject.cpp:823
STBase & getField(SField const &field)
Definition STObject.cpp:410
bool isFieldPresent(SField const &field) const
Definition STObject.cpp:454
void setFieldU16(SField const &field, std::uint16_t)
Definition STObject.cpp:727
uint256 getFieldH256(SField const &field) const
Definition STObject.cpp:621
std::uint64_t getFieldU64(SField const &field) const
Definition STObject.cpp:597
void setAccountID(SField const &field, AccountID const &)
Definition STObject.cpp:775
AccountID getAccountID(SField const &field) const
Definition STObject.cpp:633
void setFieldH256(SField const &field, uint256 const &)
Definition STObject.cpp:757
std::uint16_t getFieldU16(SField const &field) const
Definition STObject.cpp:585
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
std::optional< AccountID > parseBase58(std::string const &s)
Parse AccountID from checked, base58 string.
SField const sfGeneric
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition AccountID.h:28
BaseUInt< 256 > uint256
Definition base_uint.h:562
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)