rippled
Loading...
Searching...
No Matches
Hooks_test.cpp
1//------------------------------------------------------------------------------
2/*
3 This file is part of rippled: https://github.com/ripple/rippled
4 Copyright (c) 2012-2017 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#include <test/jtx.h>
21
22#include <xrpl/protocol/Feature.h>
23
24#include <functional>
25#include <vector>
26
27namespace ripple {
28
30{
38 void
40 {
41 testcase("Test Hooks fields");
42
43 using namespace test::jtx;
44
46 sfHookResult,
47 sfHookStateChangeCount,
48 sfHookEmitCount,
49 sfHookExecutionIndex,
50 sfHookApiVersion,
51 sfHookStateCount,
52 sfEmitGeneration,
53 sfHookOn,
54 sfHookInstructionCount,
55 sfEmitBurden,
56 sfHookReturnCode,
57 sfReferenceCount,
58 sfEmitParentTxnID,
59 sfEmitNonce,
60 sfEmitHookHash,
61 sfHookStateKey,
62 sfHookHash,
63 sfHookNamespace,
64 sfHookSetTxnID,
65 sfHookStateData,
66 sfHookReturnString,
67 sfHookParameterName,
68 sfHookParameterValue,
69 sfEmitCallback,
70 sfHookAccount,
71 sfEmittedTxn,
72 sfHook,
73 sfHookDefinition,
74 sfHookParameter,
75 sfHookGrant,
76 sfEmitDetails,
77 sfHookExecutions,
78 sfHookExecution,
79 sfHookParameters,
80 sfHooks,
81 sfHookGrants};
82
83 for (auto const& rf : fields_to_test)
84 {
85 SField const& f = rf.get();
86
87 STObject dummy{sfGeneric};
88
89 BEAST_EXPECT(!dummy.isFieldPresent(f));
90
91 switch (f.fieldType)
92 {
93 case STI_UINT8: {
94 dummy.setFieldU8(f, 0);
95 BEAST_EXPECT(dummy.getFieldU8(f) == 0);
96
97 dummy.setFieldU8(f, 255);
98 BEAST_EXPECT(dummy.getFieldU8(f) == 255);
99
100 BEAST_EXPECT(dummy.isFieldPresent(f));
101 break;
102 }
103
104 case STI_UINT16: {
105 dummy.setFieldU16(f, 0);
106 BEAST_EXPECT(dummy.getFieldU16(f) == 0);
107
108 dummy.setFieldU16(f, 0xFFFFU);
109 BEAST_EXPECT(dummy.getFieldU16(f) == 0xFFFFU);
110
111 BEAST_EXPECT(dummy.isFieldPresent(f));
112 break;
113 }
114
115 case STI_UINT32: {
116 dummy.setFieldU32(f, 0);
117 BEAST_EXPECT(dummy.getFieldU32(f) == 0);
118
119 dummy.setFieldU32(f, 0xFFFFFFFFU);
120 BEAST_EXPECT(dummy.getFieldU32(f) == 0xFFFFFFFFU);
121
122 BEAST_EXPECT(dummy.isFieldPresent(f));
123 break;
124 }
125
126 case STI_UINT64: {
127 dummy.setFieldU64(f, 0);
128 BEAST_EXPECT(dummy.getFieldU64(f) == 0);
129
130 dummy.setFieldU64(f, 0xFFFFFFFFFFFFFFFFU);
131 BEAST_EXPECT(dummy.getFieldU64(f) == 0xFFFFFFFFFFFFFFFFU);
132
133 BEAST_EXPECT(dummy.isFieldPresent(f));
134 break;
135 }
136
137 case STI_UINT256: {
139 "DEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBE"
140 "EFDEADBEEF");
141 dummy.setFieldH256(f, u);
142 BEAST_EXPECT(dummy.getFieldH256(f) == u);
143 BEAST_EXPECT(dummy.isFieldPresent(f));
144 break;
145 }
146
147 case STI_VL: {
148 std::vector<uint8_t> v{1, 2, 3};
149 dummy.setFieldVL(f, v);
150 BEAST_EXPECT(dummy.getFieldVL(f) == v);
151 BEAST_EXPECT(dummy.isFieldPresent(f));
152 break;
153 }
154
155 case STI_ACCOUNT: {
156 AccountID id = *parseBase58<AccountID>(
157 "rwfSjJNK2YQuN64bSWn7T2eY9FJAyAPYJT");
158 dummy.setAccountID(f, id);
159 BEAST_EXPECT(dummy.getAccountID(f) == id);
160 BEAST_EXPECT(dummy.isFieldPresent(f));
161 break;
162 }
163
164 case STI_OBJECT: {
165 dummy.emplace_back(STObject{f});
166 BEAST_EXPECT(dummy.getField(f).getFName() == f);
167 BEAST_EXPECT(dummy.isFieldPresent(f));
168 break;
169 }
170
171 case STI_ARRAY: {
172 STArray dummy2{f, 2};
173 dummy2.push_back(STObject{sfGeneric});
174 dummy2.push_back(STObject{sfGeneric});
175 dummy.setFieldArray(f, dummy2);
176 BEAST_EXPECT(dummy.getFieldArray(f) == dummy2);
177 BEAST_EXPECT(dummy.isFieldPresent(f));
178 break;
179 }
180
181 default:
182 BEAST_EXPECT(false);
183 }
184 }
185 }
186
187public:
188 void
189 run() override
190 {
191 using namespace test::jtx;
193 }
194};
195
196BEAST_DEFINE_TESTSUITE(Hooks, protocol, ripple);
197
198} // namespace ripple
A testsuite class.
Definition: suite.h:55
testcase_t testcase
Memberspace for declaring test cases.
Definition: suite.h:155
void testHookFields()
This unit test was requested here: https://github.com/ripple/rippled/pull/4089#issuecomment-105027453...
Definition: Hooks_test.cpp:39
void run() override
Runs the suite.
Definition: Hooks_test.cpp:189
Identifies fields.
Definition: SField.h:143
SerializedTypeID const fieldType
Definition: SField.h:161
static base_uint fromVoid(void const *data)
Definition: base_uint.h:319
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition: algorithm.h:26
SField const sfGeneric