20 #include <ripple/protocol/Feature.h>
21 #include <ripple/protocol/jss.h>
22 #include <ripple/rpc/impl/RPCHelpers.h>
35 testcase(
"Set and clear noripple");
40 auto const gw =
Account(
"gateway");
41 auto const alice =
Account(
"alice");
43 env.
fund(
XRP(10000), gw, alice);
45 auto const USD = gw[
"USD"];
48 account_gw[jss::account] = gw.human();
50 account_alice[jss::account] = alice.human();
52 for (
auto SetOrClear : {
true,
false})
64 env.
rpc(
"json",
"account_lines",
to_string(account_gw))};
65 auto const& gline0 =
lines[jss::result][jss::lines][0u];
66 BEAST_EXPECT(gline0[jss::no_ripple].asBool() == SetOrClear);
70 auto const& aline0 =
lines[jss::result][jss::lines][0u];
71 BEAST_EXPECT(aline0[jss::no_ripple_peer].asBool() == SetOrClear);
78 testcase(
"Set noripple on a line with negative balance");
81 auto const gw =
Account(
"gateway");
82 auto const alice =
Account(
"alice");
83 auto const bob =
Account(
"bob");
84 auto const carol =
Account(
"carol");
88 for (
auto const& tweakedFeatures :
91 Env env(*
this, tweakedFeatures);
93 env.
fund(
XRP(10000), gw, alice, bob, carol);
96 env.
trust(alice[
"USD"](100), bob);
97 env.
trust(bob[
"USD"](100), carol);
103 env(pay(alice, carol, carol[
"USD"](50)),
path(bob));
116 params[jss::source_account] = alice.human();
117 params[jss::destination_account] = carol.human();
118 params[jss::destination_amount] = [] {
120 dest_amt[jss::currency] =
"USD";
121 dest_amt[jss::value] =
"1";
128 BEAST_EXPECT(resp[jss::result][jss::alternatives].size() == 1);
132 return r[jss::lines];
136 BEAST_EXPECT(aliceLines.size() == 1);
137 BEAST_EXPECT(aliceLines[0u][jss::no_ripple].asBool() ==
false);
140 BEAST_EXPECT(bobLines.size() == 2);
141 BEAST_EXPECT(bobLines[0u][jss::no_ripple].asBool() ==
false);
142 BEAST_EXPECT(bobLines[1u][jss::no_ripple].asBool() ==
false);
147 env(pay(carol, alice, alice[
"USD"](50)),
path(bob));
155 BEAST_EXPECT(aliceLines.size() == 1);
156 BEAST_EXPECT(aliceLines[0u].isMember(jss::no_ripple));
159 BEAST_EXPECT(bobLines.size() == 2);
160 BEAST_EXPECT(bobLines[0u].isMember(jss::no_ripple_peer));
161 BEAST_EXPECT(bobLines[1u].isMember(jss::no_ripple));
169 testcase(
"pairwise NoRipple");
172 Env env(*
this, features);
174 auto const alice =
Account(
"alice");
175 auto const bob =
Account(
"bob");
176 auto const carol =
Account(
"carol");
178 env.
fund(
XRP(10000), alice, bob, carol);
180 env(trust(bob, alice[
"USD"](100)));
181 env(trust(carol, bob[
"USD"](100)));
188 params[jss::source_account] = alice.human();
189 params[jss::destination_account] = carol.human();
190 params[jss::destination_amount] = [] {
192 dest_amt[jss::currency] =
"USD";
193 dest_amt[jss::value] =
"1";
199 env.
rpc(
"json",
"ripple_path_find",
to_string(params))};
200 BEAST_EXPECT(resp[jss::result][jss::alternatives].size() == 0);
209 "Set default ripple on an account and check new trustlines "
214 Env env(*
this, features);
216 auto const gw =
Account(
"gateway");
217 auto const alice =
Account(
"alice");
218 auto const bob =
Account(
"bob");
224 auto const USD = gw[
"USD"];
226 env(trust(gw, USD(100), alice, 0));
227 env(trust(gw, USD(100), bob, 0));
229 params[jss::api_version] = apiVersion;
232 params[jss::account] = gw.human();
233 params[jss::peer] = alice.human();
236 auto const& line0 =
lines[jss::result][jss::lines][0u];
237 BEAST_EXPECT(line0[jss::no_ripple_peer].asBool() ==
true);
240 params[jss::account] = alice.human();
241 params[jss::peer] = gw.human();
244 auto const& line0 =
lines[jss::result][jss::lines][0u];
245 BEAST_EXPECT(line0[jss::no_ripple].asBool() ==
true);
248 params[jss::account] = gw.human();
249 params[jss::peer] = bob.human();
252 auto const& line0 =
lines[jss::result][jss::lines][0u];
253 BEAST_EXPECT(line0[jss::no_ripple].asBool() ==
false);
256 params[jss::account] = bob.human();
257 params[jss::peer] = gw.human();
260 auto const& line0 =
lines[jss::result][jss::lines][0u];
261 BEAST_EXPECT(line0[jss::no_ripple_peer].asBool() ==
false);
266 params[jss::account] = bob.human();
267 params[jss::role] =
"gateway";
268 params[jss::transactions] =
"asdf";
273 BEAST_EXPECT(
lines[jss::result][jss::status] ==
"success");
276 lines[jss::result][jss::error] ==
"invalidParams");