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