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