xrpld
Loading...
Searching...
No Matches
STIssue_test.cpp
1
2#include <test/jtx/Account.h>
3#include <test/jtx/amount.h> // IWYU pragma: keep
4
5#include <xrpl/basics/base_uint.h>
6#include <xrpl/beast/unit_test/suite.h>
7#include <xrpl/protocol/AccountID.h>
8#include <xrpl/protocol/Issue.h>
9#include <xrpl/protocol/SField.h>
10#include <xrpl/protocol/STIssue.h>
11#include <xrpl/protocol/Serializer.h>
12#include <xrpl/protocol/UintTypes.h>
13
14namespace xrpl::test {
15
17{
18public:
19 void
21 {
22 testcase("Constructor");
23 using namespace jtx;
24 Account const alice{"alice"};
25 auto const usd = alice["USD"];
26 Issue issue;
27
28 try
29 {
30 issue = xrpIssue();
31 issue.account = alice;
32 STIssue const stissue(sfAsset, Asset{issue});
33 fail("Inconsistent XRP Issue doesn't fail");
34 }
35 catch (...)
36 {
37 pass();
38 }
39
40 try
41 {
42 issue = usd;
43 issue.account = xrpAccount();
44 STIssue const stissue(sfAsset, Asset{issue});
45 fail("Inconsistent IOU Issue doesn't fail");
46 }
47 catch (...)
48 {
49 pass();
50 }
51
52 try
53 {
54 // Currency is USD but account is XRP
55 auto const data =
56 "00000000000000000000000055534400000000000000000000000000000000"
57 "000000000000000000";
58 BaseUInt<320> uint;
59 (void)uint.parseHex(data);
60 SerialIter iter(Slice(uint.data(), uint.size()));
61 STIssue const stissue(iter, sfAsset);
62 fail("Inconsistent IOU Issue doesn't fail on serializer");
63 }
64 catch (...)
65 {
66 pass();
67 }
68
69 try
70 {
71 STIssue const stissue(sfAsset, Asset{xrpIssue()});
72 }
73 catch (...)
74 {
75 fail("XRP issue failed");
76 }
77
78 try
79 {
80 STIssue const stissue(sfAsset, Asset{usd});
81 }
82 catch (...)
83 {
84 fail("USD issue failed");
85 }
86
87 try
88 {
89 auto const data =
90 "0000000000000000000000005553440000000000ae123a8556f3cf91154711"
91 "376afb0f894f832b3d";
92 BaseUInt<320> uint;
93 (void)uint.parseHex(data);
94 SerialIter iter(Slice(uint.data(), uint.size()));
95 STIssue const stissue(iter, sfAsset);
96 BEAST_EXPECT(stissue.value() == usd);
97 }
98 catch (...)
99 {
100 fail("USD Issue fails on serializer");
101 }
102
103 try
104 {
105 auto const data = "0000000000000000000000000000000000000000";
106 BaseUInt<160> uint;
107 (void)uint.parseHex(data);
108 SerialIter iter(Slice(uint.data(), uint.size()));
109 STIssue const stissue(iter, sfAsset);
110 BEAST_EXPECT(stissue.value() == xrpCurrency());
111 }
112 catch (...)
113 {
114 fail("XRP Issue fails on serializer");
115 }
116 }
117
118 void
120 {
121 testcase("Compare");
122 using namespace jtx;
123 Account const alice{"alice"};
124 auto const usd = alice["USD"];
125 Asset const asset1{xrpIssue()};
126 Asset const asset2{usd};
127 Asset const asset3{MPTID{2}};
128
129 BEAST_EXPECT(STIssue(sfAsset, asset1) != asset2);
130 BEAST_EXPECT(STIssue(sfAsset, asset1) != asset3);
131 BEAST_EXPECT(STIssue(sfAsset, asset1) == asset1);
132 BEAST_EXPECT(STIssue(sfAsset, asset1).getText() == "XRP");
133 BEAST_EXPECT(
134 STIssue(sfAsset, asset2).getText() == "USD/rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn");
135 BEAST_EXPECT(
136 STIssue(sfAsset, asset3).getText() ==
137 "000000000000000000000000000000000000000000000002");
138 }
139
140 void
141 run() override
142 {
143 // compliments other unit tests to ensure complete coverage
145 testCompare();
146 }
147};
148
150
151} // namespace xrpl::test
A testsuite class.
Definition suite.h:50
void pass()
Record a successful test condition.
Definition suite.h:500
void fail(String const &reason, char const *file, int line)
Record a failure.
Definition suite.h:522
TestcaseT testcase
Memberspace for declaring test cases.
Definition suite.h:149
Integers of any length that is a multiple of 32-bits.
Definition base_uint.h:71
pointer data()
Definition base_uint.h:106
static constexpr std::size_t size()
Definition base_uint.h:530
constexpr bool parseHex(std::string_view sv)
Parse a hex string into a base_uint.
Definition base_uint.h:507
A currency issued by an account.
Definition Issue.h:13
AccountID account
Definition Issue.h:16
value_type const & value() const noexcept
Definition STIssue.h:111
An immutable linear range of bytes.
Definition Slice.h:26
void run() override
Runs the suite.
Immutable cryptographic account descriptor.
Definition jtx/Account.h:17
BEAST_DEFINE_TESTSUITE(AMMClawback, app, xrpl)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:5
Issue const & xrpIssue()
Returns an asset specifier that represents XRP.
Definition Issue.h:97
Currency const & xrpCurrency()
XRP currency.
Definition UintTypes.cpp:99
BaseUInt< 192 > MPTID
MPTID is a 192-bit value representing MPT Issuance ID, which is a concatenation of a 32-bit sequence ...
Definition UintTypes.h:44
AccountID const & xrpAccount()
Compute AccountID from public key.