xrpld
Toggle main menu visibility
Loading...
Searching...
No Matches
test
protocol
STAccount_test.cpp
1
#include <xrpl/basics/strHex.h>
2
#include <xrpl/beast/unit_test/suite.h>
3
#include <xrpl/protocol/AccountID.h>
4
#include <xrpl/protocol/SField.h>
5
#include <xrpl/protocol/STAccount.h>
6
#include <xrpl/protocol/Serializer.h>
7
8
#include <
cstdint
>
9
#include <
stdexcept
>
10
11
namespace
xrpl
{
12
13
struct
STAccount_test
:
public
beast::unit_test::Suite
14
{
15
void
16
testSTAccount
()
17
{
18
{
19
// Test default constructor.
20
STAccount
const
defaultAcct;
21
BEAST_EXPECT(defaultAcct.
getSType
() == STI_ACCOUNT);
22
BEAST_EXPECT(defaultAcct.
getText
().
empty
());
23
BEAST_EXPECT(defaultAcct.
isDefault
() ==
true
);
24
BEAST_EXPECT(defaultAcct.
value
() ==
AccountID
{});
25
{
26
#ifdef NDEBUG
// Qualified because the serialization asserts in a debug build.
27
Serializer
s;
28
defaultAcct.
add
(s);
// Asserts in debug build
29
BEAST_EXPECT(s.
size
() == 1);
30
BEAST_EXPECT(
strHex
(s) ==
"00"
);
31
SerialIter
sit(s.
slice
());
32
STAccount
const
deserializedDefault(sit, sfAccount);
33
BEAST_EXPECT(deserializedDefault.
isEquivalent
(defaultAcct));
34
#endif
// NDEBUG
35
}
36
{
37
// Construct a deserialized default STAccount.
38
Serializer
s;
39
s.
addVL
(
nullptr
, 0);
40
SerialIter
sit(s.
slice
());
41
STAccount
const
deserializedDefault(sit, sfAccount);
42
BEAST_EXPECT(deserializedDefault.
isEquivalent
(defaultAcct));
43
}
44
45
// Test constructor from SField.
46
STAccount
const
sfAcct{sfAccount};
47
BEAST_EXPECT(sfAcct.
getSType
() == STI_ACCOUNT);
48
BEAST_EXPECT(sfAcct.
getText
().
empty
());
49
BEAST_EXPECT(sfAcct.
isDefault
());
50
BEAST_EXPECT(sfAcct.
value
() ==
AccountID
{});
51
BEAST_EXPECT(sfAcct.
isEquivalent
(defaultAcct));
52
{
53
Serializer
s;
54
sfAcct.
add
(s);
55
BEAST_EXPECT(s.
size
() == 1);
56
BEAST_EXPECT(
strHex
(s) ==
"00"
);
57
SerialIter
sit(s.
slice
());
58
STAccount
const
deserializedSf(sit, sfAccount);
59
BEAST_EXPECT(deserializedSf.
isEquivalent
(sfAcct));
60
}
61
62
// Test constructor from SField and AccountID.
63
STAccount
const
zeroAcct{sfAccount,
AccountID
{}};
64
BEAST_EXPECT(zeroAcct.
getText
() ==
"rrrrrrrrrrrrrrrrrrrrrhoLvTp"
);
65
BEAST_EXPECT(!zeroAcct.
isDefault
());
66
BEAST_EXPECT(zeroAcct.
value
() ==
AccountID
{0});
67
BEAST_EXPECT(!zeroAcct.
isEquivalent
(defaultAcct));
68
BEAST_EXPECT(!zeroAcct.
isEquivalent
(sfAcct));
69
{
70
Serializer
s;
71
zeroAcct.
add
(s);
72
BEAST_EXPECT(s.
size
() == 21);
73
BEAST_EXPECT(
strHex
(s) ==
"140000000000000000000000000000000000000000"
);
74
SerialIter
sit(s.
slice
());
75
STAccount
const
deserializedZero(sit, sfAccount);
76
BEAST_EXPECT(deserializedZero.
isEquivalent
(zeroAcct));
77
}
78
{
79
// Construct from a VL that is not exactly 160 bits.
80
Serializer
s;
81
std::uint8_t
const
bits128[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
82
s.
addVL
(bits128,
sizeof
(bits128));
83
SerialIter
sit(s.
slice
());
84
try
85
{
86
// Constructing an STAccount with a bad size should throw.
87
STAccount
const
deserializedBadSize(sit, sfAccount);
88
}
89
catch
(
std::runtime_error
const
& ex)
90
{
91
BEAST_EXPECT(ex.
what
() ==
std::string
(
"Invalid STAccount size"
));
92
}
93
}
94
95
// Interestingly, equal values but different types are equivalent!
96
STAccount
const
regKey{sfRegularKey,
AccountID
{}};
97
BEAST_EXPECT(regKey.
isEquivalent
(zeroAcct));
98
99
// Test assignment.
100
STAccount
assignAcct;
101
BEAST_EXPECT(assignAcct.
isEquivalent
(defaultAcct));
102
BEAST_EXPECT(assignAcct.
isDefault
());
103
assignAcct =
AccountID
{};
104
BEAST_EXPECT(!assignAcct.
isEquivalent
(defaultAcct));
105
BEAST_EXPECT(assignAcct.
isEquivalent
(zeroAcct));
106
BEAST_EXPECT(!assignAcct.
isDefault
());
107
}
108
}
109
110
void
111
testAccountID
()
112
{
113
auto
const
s =
"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"
;
114
if
(
auto
const
parsed =
parseBase58<AccountID>
(s); BEAST_EXPECT(parsed))
115
{
116
BEAST_EXPECT(
toBase58
(*parsed) == s);
// NOLINT(bugprone-unchecked-optional-access)
117
}
118
119
{
120
auto
const
s =
"âabcd1rNxp4h8apvRis6mJf9Sh8C6iRxfrDWNâabcdAVâ\xc2\x80\xc2\x8f"
;
121
BEAST_EXPECT(!
parseBase58<AccountID>
(s));
122
}
123
}
124
125
void
126
run
()
override
127
{
128
testSTAccount
();
129
testAccountID
();
130
}
131
};
132
133
BEAST_DEFINE_TESTSUITE
(
STAccount
,
protocol
,
xrpl
);
134
135
}
// namespace xrpl
std::string
beast::unit_test::Suite
A testsuite class.
Definition
suite.h:52
xrpl::STAccount
Definition
STAccount.h:16
xrpl::STAccount::isDefault
bool isDefault() const override
Definition
STAccount.cpp:92
xrpl::STAccount::isEquivalent
bool isEquivalent(STBase const &t) const override
Definition
STAccount.cpp:85
xrpl::STAccount::add
void add(Serializer &s) const override
Definition
STAccount.cpp:72
xrpl::STAccount::getSType
SerializedTypeID getSType() const override
Definition
STAccount.cpp:66
xrpl::STAccount::getText
std::string getText() const override
Definition
STAccount.cpp:98
xrpl::STAccount::value
AccountID const & value() const noexcept
Definition
STAccount.h:76
xrpl::SerialIter
Definition
Serializer.h:478
xrpl::Serializer
Definition
Serializer.h:23
xrpl::Serializer::addVL
int addVL(Blob const &vector)
Definition
libxrpl/protocol/Serializer.cpp:180
xrpl::Serializer::slice
Slice slice() const noexcept
Definition
Serializer.h:141
xrpl::Serializer::size
std::size_t size() const noexcept
Definition
Serializer.h:147
cstdint
std::string::empty
T empty(T... args)
std::uint8_t
protocol
Definition
LedgerNodeHelpers.h:9
xrpl
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition
algorithm.h:5
xrpl::parseBase58
std::optional< AccountID > parseBase58(std::string const &s)
Parse AccountID from checked, base58 string.
Definition
AccountID.cpp:105
xrpl::strHex
std::string strHex(FwdIt begin, FwdIt end)
Definition
strHex.h:13
xrpl::toBase58
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
Definition
AccountID.cpp:95
xrpl::AccountID
BaseUInt< 160, detail::AccountIDTag > AccountID
A 160-bit unsigned that uniquely identifies an account.
Definition
AccountID.h:34
xrpl::BEAST_DEFINE_TESTSUITE
BEAST_DEFINE_TESTSUITE(AccountTxPaging, app, xrpl)
std::runtime_error
stdexcept
xrpl::STAccount_test
Definition
STAccount_test.cpp:14
xrpl::STAccount_test::testAccountID
void testAccountID()
Definition
STAccount_test.cpp:111
xrpl::STAccount_test::run
void run() override
Runs the suite.
Definition
STAccount_test.cpp:126
xrpl::STAccount_test::testSTAccount
void testSTAccount()
Definition
STAccount_test.cpp:16
std::runtime_error::what
T what(T... args)
Generated by
1.17.0