Skip to content

Commit 1f9ecb8

Browse files
committed
Added tests for trustline creation freeze handling
1 parent f9107a7 commit 1f9ecb8

File tree

1 file changed

+75
-13
lines changed

1 file changed

+75
-13
lines changed

src/test/app/Freeze_test.cpp

+75-13
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class Freeze_test : public beast::unit_test::suite
209209
// transaction
210210
env(trust(G1, A1["USD"](0), tfSetFreeze | tfSetDeepFreeze));
211211
{
212-
auto const flags = modifiedTrustlineFlags(env);
212+
auto const flags = getTrustlineFlags(env, 2u, 1u);
213213
BEAST_EXPECT(flags & (lsfLowFreeze | lsfLowDeepFreeze));
214214
BEAST_EXPECT(!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
215215
env.close();
@@ -219,7 +219,7 @@ class Freeze_test : public beast::unit_test::suite
219219
// transaction
220220
env(trust(G1, A1["USD"](0), tfClearFreeze | tfClearDeepFreeze));
221221
{
222-
auto const flags = modifiedTrustlineFlags(env);
222+
auto const flags = getTrustlineFlags(env, 2u, 1u);
223223
BEAST_EXPECT(!(flags & (lsfLowFreeze | lsfLowDeepFreeze)));
224224
BEAST_EXPECT(!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
225225
env.close();
@@ -235,7 +235,7 @@ class Freeze_test : public beast::unit_test::suite
235235
// test: Issuer deep freezing already frozen trust line
236236
env(trust(G1, A1["USD"](0), tfSetDeepFreeze));
237237
{
238-
auto const flags = modifiedTrustlineFlags(env);
238+
auto const flags = getTrustlineFlags(env, 2u, 1u);
239239
BEAST_EXPECT(flags & (lsfLowFreeze | lsfLowDeepFreeze));
240240
BEAST_EXPECT(!(flags & (lsfHighFreeze | lsfHighDeepFreeze)));
241241
env.close();
@@ -248,7 +248,7 @@ class Freeze_test : public beast::unit_test::suite
248248
// effect
249249
env(trust(G1, A1["USD"](0), tfClearDeepFreeze));
250250
{
251-
auto const flags = modifiedTrustlineFlags(env);
251+
auto const flags = getTrustlineFlags(env, 2u, 1u);
252252
BEAST_EXPECT(flags & lsfLowFreeze);
253253
BEAST_EXPECT(
254254
!(flags &
@@ -267,6 +267,55 @@ class Freeze_test : public beast::unit_test::suite
267267
}
268268
}
269269

270+
void
271+
testCreateFrozenTrustline(FeatureBitset features)
272+
{
273+
testcase("Create Frozen Trustline");
274+
275+
using namespace test::jtx;
276+
Env env(*this, features);
277+
278+
Account G1{"G1"};
279+
Account A1{"A1"};
280+
281+
env.fund(XRP(10000), G1, A1);
282+
env.close();
283+
284+
// // test: can create frozen trustline
285+
// {
286+
// env(trust(G1, A1["USD"](1000), tfSetFreeze));
287+
// auto const flags = getTrustlineFlags(env, 5u, 3u, false);
288+
// BEAST_EXPECT(flags & lsfLowFreeze);
289+
// env.close();
290+
// env.require(lines(A1, 1));
291+
// }
292+
293+
// // Cleanup
294+
// env(trust(G1, A1["USD"](0), tfClearFreeze));
295+
// env.close();
296+
// env.require(lines(G1, 0));
297+
// env.require(lines(A1, 0));
298+
299+
// // test: cannot create deep frozen trustline without normal freeze
300+
// if (features[featureDeepFreeze])
301+
// {
302+
// env(trust(G1, A1["USD"](1000), tfSetDeepFreeze),
303+
// ter(tecNO_PERMISSION));
304+
// env.close();
305+
// env.require(lines(A1, 0));
306+
// }
307+
308+
// test: can create deep frozen trustline together with normal freeze
309+
if (features[featureDeepFreeze])
310+
{
311+
env(trust(G1, A1["USD"](1000), tfSetFreeze | tfSetDeepFreeze));
312+
auto const flags = getTrustlineFlags(env, 5u, 3u, false);
313+
BEAST_EXPECT(flags & (lsfLowFreeze | lsfLowDeepFreeze));
314+
env.close();
315+
env.require(lines(A1, 1));
316+
}
317+
}
318+
270319
void
271320
testSetAndClear(FeatureBitset features)
272321
{
@@ -501,7 +550,7 @@ class Freeze_test : public beast::unit_test::suite
501550
// freeze and clearing of freeze separately
502551
env(trust(G1, frozenAcc["USD"](0), tfSetFreeze));
503552
{
504-
auto const flags = modifiedTrustlineFlags(env);
553+
auto const flags = getTrustlineFlags(env, 2u, 1u);
505554
BEAST_EXPECT(flags & lsfLowFreeze);
506555
BEAST_EXPECT(!(flags & lsfHighFreeze));
507556
}
@@ -510,7 +559,7 @@ class Freeze_test : public beast::unit_test::suite
510559
env(trust(
511560
G1, deepFrozenAcc["USD"](0), tfSetFreeze | tfSetDeepFreeze));
512561
{
513-
auto const flags = modifiedTrustlineFlags(env);
562+
auto const flags = getTrustlineFlags(env, 2u, 1u);
514563
BEAST_EXPECT(!(flags & (lsfLowFreeze | lsfLowDeepFreeze)));
515564
BEAST_EXPECT(flags & (lsfHighFreeze | lsfHighDeepFreeze));
516565
}
@@ -566,7 +615,7 @@ class Freeze_test : public beast::unit_test::suite
566615
// test: can clear freeze on account
567616
env(trust(G1, frozenAcc["USD"](0), tfClearFreeze));
568617
{
569-
auto const flags = modifiedTrustlineFlags(env);
618+
auto const flags = getTrustlineFlags(env, 2u, 1u);
570619
BEAST_EXPECT(!(flags & lsfLowFreeze));
571620
}
572621

@@ -575,7 +624,7 @@ class Freeze_test : public beast::unit_test::suite
575624
// test: can clear deep freeze on account
576625
env(trust(G1, deepFrozenAcc["USD"](0), tfClearDeepFreeze));
577626
{
578-
auto const flags = modifiedTrustlineFlags(env);
627+
auto const flags = getTrustlineFlags(env, 2u, 1u);
579628
BEAST_EXPECT(flags & lsfHighFreeze);
580629
BEAST_EXPECT(!(flags & lsfHighDeepFreeze));
581630
}
@@ -998,16 +1047,28 @@ class Freeze_test : public beast::unit_test::suite
9981047
}
9991048

10001049
uint32_t
1001-
modifiedTrustlineFlags(test::jtx::Env& env)
1050+
getTrustlineFlags(
1051+
test::jtx::Env& env,
1052+
size_t expectedArraySize,
1053+
size_t expectedArrayIndex,
1054+
bool modified = true)
10021055
{
10031056
using namespace test::jtx;
10041057
auto const affected =
10051058
env.meta()->getJson(JsonOptions::none)[sfAffectedNodes.fieldName];
1006-
if (!BEAST_EXPECT(checkArraySize(affected, 2u)))
1059+
if (!BEAST_EXPECT(checkArraySize(affected, expectedArraySize)))
10071060
return 0;
1008-
auto const ff =
1009-
affected[1u][sfModifiedNode.fieldName][sfFinalFields.fieldName];
1010-
return ff[jss::Flags].asUInt();
1061+
1062+
if (modified)
1063+
{
1064+
return affected[expectedArrayIndex][sfModifiedNode.fieldName]
1065+
[sfFinalFields.fieldName][jss::Flags]
1066+
.asUInt();
1067+
}
1068+
1069+
return affected[expectedArrayIndex][sfCreatedNode.fieldName]
1070+
[sfNewFields.fieldName][jss::Flags]
1071+
.asUInt();
10111072
}
10121073

10131074
public:
@@ -1017,6 +1078,7 @@ class Freeze_test : public beast::unit_test::suite
10171078
auto testAll = [this](FeatureBitset features) {
10181079
testRippleState(features);
10191080
testDeepFreeze(features);
1081+
testCreateFrozenTrustline(features);
10201082
testSetAndClear(features);
10211083
testGlobalFreeze(features);
10221084
testNoFreeze(features);

0 commit comments

Comments
 (0)