rippled
Loading...
Searching...
No Matches
STAccount_test.cpp
1#include <xrpl/beast/unit_test.h>
2#include <xrpl/protocol/STAccount.h>
3
4namespace xrpl {
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(strHex(s) == "140000000000000000000000000000000000000000");
67 SerialIter sit(s.slice());
68 STAccount const deserializedZero(sit, sfAccount);
69 BEAST_EXPECT(deserializedZero.isEquivalent(zeroAcct));
70 }
71 {
72 // Construct from a VL that is not exactly 160 bits.
73 Serializer s;
74 std::uint8_t const bits128[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
75 s.addVL(bits128, sizeof(bits128));
76 SerialIter sit(s.slice());
77 try
78 {
79 // Constructing an STAccount with a bad size should throw.
80 STAccount const deserializedBadSize(sit, sfAccount);
81 }
82 catch (std::runtime_error const& ex)
83 {
84 BEAST_EXPECT(ex.what() == std::string("Invalid STAccount size"));
85 }
86 }
87
88 // Interestingly, equal values but different types are equivalent!
89 STAccount const regKey{sfRegularKey, AccountID{}};
90 BEAST_EXPECT(regKey.isEquivalent(zeroAcct));
91
92 // Test assignment.
93 STAccount assignAcct;
94 BEAST_EXPECT(assignAcct.isEquivalent(defaultAcct));
95 BEAST_EXPECT(assignAcct.isDefault());
96 assignAcct = AccountID{};
97 BEAST_EXPECT(!assignAcct.isEquivalent(defaultAcct));
98 BEAST_EXPECT(assignAcct.isEquivalent(zeroAcct));
99 BEAST_EXPECT(!assignAcct.isDefault());
100 }
101 }
102
103 void
105 {
106 auto const s = "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh";
107 if (auto const parsed = parseBase58<AccountID>(s); BEAST_EXPECT(parsed))
108 {
109 BEAST_EXPECT(toBase58(*parsed) == s);
110 }
111
112 {
113 auto const s = "âabcd1rNxp4h8apvRis6mJf9Sh8C6iRxfrDWNâabcdAVâ\xc2\x80\xc2\x8f";
114 BEAST_EXPECT(!parseBase58<AccountID>(s));
115 }
116 }
117
118 void
119 run() override
120 {
123 }
124};
125
126BEAST_DEFINE_TESTSUITE(STAccount, protocol, xrpl);
127
128} // namespace xrpl
A testsuite class.
Definition suite.h:52
bool isDefault() const override
Definition STAccount.cpp:91
bool isEquivalent(STBase const &t) const override
Definition STAccount.cpp:84
void add(Serializer &s) const override
Definition STAccount.cpp:71
SerializedTypeID getSType() const override
Definition STAccount.cpp:65
std::string getText() const override
Definition STAccount.cpp:97
AccountID const & value() const noexcept
Definition STAccount.h:73
int addVL(Blob const &vector)
Slice slice() const noexcept
Definition Serializer.h:45
std::size_t size() const noexcept
Definition Serializer.h:51
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
std::string strHex(FwdIt begin, FwdIt end)
Definition strHex.h:11
std::string toBase58(AccountID const &v)
Convert AccountID to base58 checked string.
Definition AccountID.cpp:92
void run() override
Runs the suite.
T what(T... args)