tigerbeetle-node 0.17.4 → 0.17.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/bin/aarch64-linux-gnu/client.node +0 -0
- package/dist/bin/aarch64-linux-musl/client.node +0 -0
- package/dist/bin/aarch64-macos/client.node +0 -0
- package/dist/bin/x86_64-linux-gnu/client.node +0 -0
- package/dist/bin/x86_64-linux-musl/client.node +0 -0
- package/dist/bin/x86_64-macos/client.node +0 -0
- package/dist/bin/x86_64-windows/client.node +0 -0
- package/dist/bindings.js.map +1 -1
- package/dist/test.js +121 -69
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
- package/src/bindings.ts +348 -348
- package/src/test.ts +129 -72
package/dist/test.js
CHANGED
|
@@ -5,9 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const assert_1 = __importDefault(require("assert"));
|
|
7
7
|
const _1 = require(".");
|
|
8
|
+
async function sleep_ms(ms) {
|
|
9
|
+
await new Promise(resolve => setTimeout(resolve, ms));
|
|
10
|
+
}
|
|
11
|
+
function range(n) {
|
|
12
|
+
return Array.from({ length: n }, (_, i) => i);
|
|
13
|
+
}
|
|
14
|
+
function random_index(array) {
|
|
15
|
+
return Math.floor(Math.random() * array.length);
|
|
16
|
+
}
|
|
17
|
+
const REPLICA_ADDRESSES = [process.env.TB_ADDRESS || '3000'];
|
|
8
18
|
const client = (0, _1.createClient)({
|
|
9
19
|
cluster_id: 0n,
|
|
10
|
-
replica_addresses:
|
|
20
|
+
replica_addresses: REPLICA_ADDRESSES
|
|
11
21
|
});
|
|
12
22
|
const accountA = {
|
|
13
23
|
id: 17n,
|
|
@@ -51,7 +61,7 @@ test('id() monotonically increasing', async () => {
|
|
|
51
61
|
let idA = (0, _1.id)();
|
|
52
62
|
for (let i = 0; i < 10000000; i++) {
|
|
53
63
|
if (i % 10000 == 0) {
|
|
54
|
-
await
|
|
64
|
+
await sleep_ms(1);
|
|
55
65
|
}
|
|
56
66
|
const idB = (0, _1.id)();
|
|
57
67
|
assert_1.default.ok(idB > idA, 'id() returned an id that did not monotonically increase');
|
|
@@ -89,8 +99,8 @@ test('error if timestamp is not set to 0n on account', async () => {
|
|
|
89
99
|
});
|
|
90
100
|
test('batch max size', async () => {
|
|
91
101
|
const BATCH_SIZE = 10000;
|
|
92
|
-
|
|
93
|
-
for (
|
|
102
|
+
const transfers = [];
|
|
103
|
+
for (let i = 0; i < BATCH_SIZE; i++) {
|
|
94
104
|
transfers.push({
|
|
95
105
|
id: 0n,
|
|
96
106
|
debit_account_id: 0n,
|
|
@@ -113,6 +123,15 @@ test('batch max size', async () => {
|
|
|
113
123
|
return true;
|
|
114
124
|
});
|
|
115
125
|
});
|
|
126
|
+
test('batch invalid size', async () => {
|
|
127
|
+
const transfers = [];
|
|
128
|
+
transfers.length = 0xffffffff;
|
|
129
|
+
assert_1.default.rejects(async () => await client.createTransfers(transfers), (err) => {
|
|
130
|
+
assert_1.default.ok(err instanceof _1.RequestError);
|
|
131
|
+
assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_TOO_MUCH_DATA);
|
|
132
|
+
return true;
|
|
133
|
+
});
|
|
134
|
+
});
|
|
116
135
|
test('can lookup accounts', async () => {
|
|
117
136
|
const accounts = await client.lookupAccounts([accountA.id, accountB.id]);
|
|
118
137
|
assert_1.default.strictEqual(accounts.length, 2);
|
|
@@ -371,7 +390,7 @@ test('cannot void an expired transfer', async () => {
|
|
|
371
390
|
assert_1.default.deepStrictEqual(transfers_results.length, 1);
|
|
372
391
|
assert_1.default.ok(transfers_results[0].timestamp > 0);
|
|
373
392
|
assert_1.default.deepStrictEqual(transfers_results[0].status, _1.CreateTransferStatus.created);
|
|
374
|
-
|
|
393
|
+
let accounts = await client.lookupAccounts([accountA.id, accountB.id]);
|
|
375
394
|
assert_1.default.strictEqual(accounts.length, 2);
|
|
376
395
|
assert_1.default.strictEqual(accounts[0].credits_posted, 150n);
|
|
377
396
|
assert_1.default.strictEqual(accounts[0].credits_pending, 50n);
|
|
@@ -382,7 +401,7 @@ test('cannot void an expired transfer', async () => {
|
|
|
382
401
|
assert_1.default.strictEqual(accounts[1].debits_posted, 150n);
|
|
383
402
|
assert_1.default.strictEqual(accounts[1].debits_pending, 50n);
|
|
384
403
|
const extra_wait_time = 500;
|
|
385
|
-
await
|
|
404
|
+
await sleep_ms((transfer.timeout * 1000) + extra_wait_time);
|
|
386
405
|
accounts = await client.lookupAccounts([accountA.id, accountB.id]);
|
|
387
406
|
assert_1.default.strictEqual(accounts.length, 2);
|
|
388
407
|
assert_1.default.strictEqual(accounts[0].credits_posted, 150n);
|
|
@@ -485,8 +504,8 @@ test('can get account transfers', async () => {
|
|
|
485
504
|
assert_1.default.deepStrictEqual(account_results.length, 1);
|
|
486
505
|
assert_1.default.ok(account_results[0].timestamp > 0);
|
|
487
506
|
assert_1.default.deepStrictEqual(account_results[0].status, _1.CreateAccountStatus.created);
|
|
488
|
-
|
|
489
|
-
for (
|
|
507
|
+
const transfers_created = [];
|
|
508
|
+
for (let i = 0; i < 10; i++) {
|
|
490
509
|
transfers_created.push({
|
|
491
510
|
id: BigInt(i + 10000),
|
|
492
511
|
debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,
|
|
@@ -509,7 +528,7 @@ test('can get account transfers', async () => {
|
|
|
509
528
|
assert_1.default.ok(result.timestamp > 0);
|
|
510
529
|
assert_1.default.deepStrictEqual(result.status, _1.CreateTransferStatus.created);
|
|
511
530
|
}
|
|
512
|
-
|
|
531
|
+
let filter = {
|
|
513
532
|
account_id: accountC.id,
|
|
514
533
|
user_data_128: 0n,
|
|
515
534
|
user_data_64: 0n,
|
|
@@ -520,13 +539,13 @@ test('can get account transfers', async () => {
|
|
|
520
539
|
limit: BATCH_MAX,
|
|
521
540
|
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
522
541
|
};
|
|
523
|
-
|
|
524
|
-
|
|
542
|
+
let transfers = await client.getAccountTransfers(filter);
|
|
543
|
+
let account_balances = await client.getAccountBalances(filter);
|
|
525
544
|
assert_1.default.strictEqual(transfers.length, transfers_created.length);
|
|
526
545
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
for (
|
|
546
|
+
let timestamp = 0n;
|
|
547
|
+
let i = 0;
|
|
548
|
+
for (const transfer of transfers) {
|
|
530
549
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
531
550
|
timestamp = transfer.timestamp;
|
|
532
551
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -549,7 +568,7 @@ test('can get account transfers', async () => {
|
|
|
549
568
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
550
569
|
timestamp = 1n << 64n;
|
|
551
570
|
i = 0;
|
|
552
|
-
for (
|
|
571
|
+
for (const transfer of transfers) {
|
|
553
572
|
assert_1.default.ok(transfer.timestamp < timestamp);
|
|
554
573
|
timestamp = transfer.timestamp;
|
|
555
574
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -572,7 +591,7 @@ test('can get account transfers', async () => {
|
|
|
572
591
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
573
592
|
timestamp = 1n << 64n;
|
|
574
593
|
i = 0;
|
|
575
|
-
for (
|
|
594
|
+
for (const transfer of transfers) {
|
|
576
595
|
assert_1.default.ok(transfer.timestamp < timestamp);
|
|
577
596
|
timestamp = transfer.timestamp;
|
|
578
597
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -595,7 +614,7 @@ test('can get account transfers', async () => {
|
|
|
595
614
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
596
615
|
timestamp = 0n;
|
|
597
616
|
i = 0;
|
|
598
|
-
for (
|
|
617
|
+
for (const transfer of transfers) {
|
|
599
618
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
600
619
|
timestamp = transfer.timestamp;
|
|
601
620
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -617,7 +636,7 @@ test('can get account transfers', async () => {
|
|
|
617
636
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
618
637
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
619
638
|
i = 0;
|
|
620
|
-
for (
|
|
639
|
+
for (const transfer of transfers) {
|
|
621
640
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
622
641
|
timestamp = transfer.timestamp;
|
|
623
642
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -655,7 +674,7 @@ test('can get account transfers', async () => {
|
|
|
655
674
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
656
675
|
timestamp = 1n << 64n;
|
|
657
676
|
i = 0;
|
|
658
|
-
for (
|
|
677
|
+
for (const transfer of transfers) {
|
|
659
678
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
660
679
|
timestamp = transfer.timestamp;
|
|
661
680
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -677,7 +696,7 @@ test('can get account transfers', async () => {
|
|
|
677
696
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
678
697
|
assert_1.default.strictEqual(account_balances.length, transfers.length);
|
|
679
698
|
i = 0;
|
|
680
|
-
for (
|
|
699
|
+
for (const transfer of transfers) {
|
|
681
700
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
682
701
|
timestamp = transfer.timestamp;
|
|
683
702
|
assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
|
|
@@ -813,8 +832,8 @@ test('can get account transfers', async () => {
|
|
|
813
832
|
});
|
|
814
833
|
test('can query accounts', async () => {
|
|
815
834
|
{
|
|
816
|
-
|
|
817
|
-
for (
|
|
835
|
+
const accounts = [];
|
|
836
|
+
for (let i = 0; i < 10; i++) {
|
|
818
837
|
accounts.push({
|
|
819
838
|
id: (0, _1.id)(),
|
|
820
839
|
debits_pending: 0n,
|
|
@@ -839,7 +858,7 @@ test('can query accounts', async () => {
|
|
|
839
858
|
}
|
|
840
859
|
}
|
|
841
860
|
{
|
|
842
|
-
|
|
861
|
+
const filter = {
|
|
843
862
|
user_data_128: 1000n,
|
|
844
863
|
user_data_64: 100n,
|
|
845
864
|
user_data_32: 10,
|
|
@@ -850,10 +869,10 @@ test('can query accounts', async () => {
|
|
|
850
869
|
limit: BATCH_MAX,
|
|
851
870
|
flags: _1.QueryFilterFlags.none,
|
|
852
871
|
};
|
|
853
|
-
|
|
872
|
+
const query = await client.queryAccounts(filter);
|
|
854
873
|
assert_1.default.strictEqual(query.length, 5);
|
|
855
|
-
|
|
856
|
-
for (
|
|
874
|
+
let timestamp = 0n;
|
|
875
|
+
for (const account of query) {
|
|
857
876
|
assert_1.default.ok(timestamp < account.timestamp);
|
|
858
877
|
timestamp = account.timestamp;
|
|
859
878
|
assert_1.default.strictEqual(account.user_data_128, filter.user_data_128);
|
|
@@ -864,7 +883,7 @@ test('can query accounts', async () => {
|
|
|
864
883
|
}
|
|
865
884
|
}
|
|
866
885
|
{
|
|
867
|
-
|
|
886
|
+
const filter = {
|
|
868
887
|
user_data_128: 2000n,
|
|
869
888
|
user_data_64: 200n,
|
|
870
889
|
user_data_32: 20,
|
|
@@ -875,10 +894,10 @@ test('can query accounts', async () => {
|
|
|
875
894
|
limit: BATCH_MAX,
|
|
876
895
|
flags: _1.QueryFilterFlags.reversed,
|
|
877
896
|
};
|
|
878
|
-
|
|
897
|
+
const query = await client.queryAccounts(filter);
|
|
879
898
|
assert_1.default.strictEqual(query.length, 5);
|
|
880
|
-
|
|
881
|
-
for (
|
|
899
|
+
let timestamp = 1n << 64n;
|
|
900
|
+
for (const account of query) {
|
|
882
901
|
assert_1.default.ok(timestamp > account.timestamp);
|
|
883
902
|
timestamp = account.timestamp;
|
|
884
903
|
assert_1.default.strictEqual(account.user_data_128, filter.user_data_128);
|
|
@@ -889,7 +908,7 @@ test('can query accounts', async () => {
|
|
|
889
908
|
}
|
|
890
909
|
}
|
|
891
910
|
{
|
|
892
|
-
|
|
911
|
+
const filter = {
|
|
893
912
|
user_data_128: 0n,
|
|
894
913
|
user_data_64: 0n,
|
|
895
914
|
user_data_32: 0,
|
|
@@ -900,17 +919,17 @@ test('can query accounts', async () => {
|
|
|
900
919
|
limit: BATCH_MAX,
|
|
901
920
|
flags: _1.QueryFilterFlags.none,
|
|
902
921
|
};
|
|
903
|
-
|
|
922
|
+
const query = await client.queryAccounts(filter);
|
|
904
923
|
assert_1.default.strictEqual(query.length, 10);
|
|
905
|
-
|
|
906
|
-
for (
|
|
924
|
+
let timestamp = 0n;
|
|
925
|
+
for (const account of query) {
|
|
907
926
|
assert_1.default.ok(timestamp < account.timestamp);
|
|
908
927
|
timestamp = account.timestamp;
|
|
909
928
|
assert_1.default.strictEqual(account.code, filter.code);
|
|
910
929
|
}
|
|
911
930
|
}
|
|
912
931
|
{
|
|
913
|
-
|
|
932
|
+
const filter = {
|
|
914
933
|
user_data_128: 0n,
|
|
915
934
|
user_data_64: 0n,
|
|
916
935
|
user_data_32: 0,
|
|
@@ -921,10 +940,10 @@ test('can query accounts', async () => {
|
|
|
921
940
|
limit: 5,
|
|
922
941
|
flags: _1.QueryFilterFlags.reversed,
|
|
923
942
|
};
|
|
924
|
-
|
|
943
|
+
let query = await client.queryAccounts(filter);
|
|
925
944
|
assert_1.default.strictEqual(query.length, 5);
|
|
926
|
-
|
|
927
|
-
for (
|
|
945
|
+
let timestamp = 1n << 64n;
|
|
946
|
+
for (const account of query) {
|
|
928
947
|
assert_1.default.ok(timestamp > account.timestamp);
|
|
929
948
|
timestamp = account.timestamp;
|
|
930
949
|
assert_1.default.strictEqual(account.code, filter.code);
|
|
@@ -932,7 +951,7 @@ test('can query accounts', async () => {
|
|
|
932
951
|
filter.timestamp_max = timestamp - 1n;
|
|
933
952
|
query = await client.queryAccounts(filter);
|
|
934
953
|
assert_1.default.strictEqual(query.length, 5);
|
|
935
|
-
for (
|
|
954
|
+
for (const account of query) {
|
|
936
955
|
assert_1.default.ok(timestamp > account.timestamp);
|
|
937
956
|
timestamp = account.timestamp;
|
|
938
957
|
assert_1.default.strictEqual(account.code, filter.code);
|
|
@@ -942,7 +961,7 @@ test('can query accounts', async () => {
|
|
|
942
961
|
assert_1.default.strictEqual(query.length, 0);
|
|
943
962
|
}
|
|
944
963
|
{
|
|
945
|
-
|
|
964
|
+
const filter = {
|
|
946
965
|
user_data_128: 0n,
|
|
947
966
|
user_data_64: 200n,
|
|
948
967
|
user_data_32: 10,
|
|
@@ -953,7 +972,7 @@ test('can query accounts', async () => {
|
|
|
953
972
|
limit: BATCH_MAX,
|
|
954
973
|
flags: _1.QueryFilterFlags.none,
|
|
955
974
|
};
|
|
956
|
-
|
|
975
|
+
const query = await client.queryAccounts(filter);
|
|
957
976
|
assert_1.default.strictEqual(query.length, 0);
|
|
958
977
|
}
|
|
959
978
|
});
|
|
@@ -978,8 +997,8 @@ test('can query transfers', async () => {
|
|
|
978
997
|
assert_1.default.deepStrictEqual(account_results.length, 1);
|
|
979
998
|
assert_1.default.ok(account_results[0].timestamp > 0);
|
|
980
999
|
assert_1.default.deepStrictEqual(account_results[0].status, _1.CreateAccountStatus.created);
|
|
981
|
-
|
|
982
|
-
for (
|
|
1000
|
+
const transfers_created = [];
|
|
1001
|
+
for (let i = 0; i < 10; i++) {
|
|
983
1002
|
transfers_created.push({
|
|
984
1003
|
id: (0, _1.id)(),
|
|
985
1004
|
debit_account_id: i % 2 == 0 ? account.id : accountA.id,
|
|
@@ -1004,7 +1023,7 @@ test('can query transfers', async () => {
|
|
|
1004
1023
|
}
|
|
1005
1024
|
}
|
|
1006
1025
|
{
|
|
1007
|
-
|
|
1026
|
+
const filter = {
|
|
1008
1027
|
user_data_128: 1000n,
|
|
1009
1028
|
user_data_64: 100n,
|
|
1010
1029
|
user_data_32: 10,
|
|
@@ -1015,10 +1034,10 @@ test('can query transfers', async () => {
|
|
|
1015
1034
|
limit: BATCH_MAX,
|
|
1016
1035
|
flags: _1.QueryFilterFlags.none,
|
|
1017
1036
|
};
|
|
1018
|
-
|
|
1037
|
+
const query = await client.queryTransfers(filter);
|
|
1019
1038
|
assert_1.default.strictEqual(query.length, 5);
|
|
1020
|
-
|
|
1021
|
-
for (
|
|
1039
|
+
let timestamp = 0n;
|
|
1040
|
+
for (const transfer of query) {
|
|
1022
1041
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
1023
1042
|
timestamp = transfer.timestamp;
|
|
1024
1043
|
assert_1.default.strictEqual(transfer.user_data_128, filter.user_data_128);
|
|
@@ -1029,7 +1048,7 @@ test('can query transfers', async () => {
|
|
|
1029
1048
|
}
|
|
1030
1049
|
}
|
|
1031
1050
|
{
|
|
1032
|
-
|
|
1051
|
+
const filter = {
|
|
1033
1052
|
user_data_128: 2000n,
|
|
1034
1053
|
user_data_64: 200n,
|
|
1035
1054
|
user_data_32: 20,
|
|
@@ -1040,10 +1059,10 @@ test('can query transfers', async () => {
|
|
|
1040
1059
|
limit: BATCH_MAX,
|
|
1041
1060
|
flags: _1.QueryFilterFlags.reversed,
|
|
1042
1061
|
};
|
|
1043
|
-
|
|
1062
|
+
const query = await client.queryTransfers(filter);
|
|
1044
1063
|
assert_1.default.strictEqual(query.length, 5);
|
|
1045
|
-
|
|
1046
|
-
for (
|
|
1064
|
+
let timestamp = 1n << 64n;
|
|
1065
|
+
for (const transfer of query) {
|
|
1047
1066
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
1048
1067
|
timestamp = transfer.timestamp;
|
|
1049
1068
|
assert_1.default.strictEqual(transfer.user_data_128, filter.user_data_128);
|
|
@@ -1054,7 +1073,7 @@ test('can query transfers', async () => {
|
|
|
1054
1073
|
}
|
|
1055
1074
|
}
|
|
1056
1075
|
{
|
|
1057
|
-
|
|
1076
|
+
const filter = {
|
|
1058
1077
|
user_data_128: 0n,
|
|
1059
1078
|
user_data_64: 0n,
|
|
1060
1079
|
user_data_32: 0,
|
|
@@ -1065,17 +1084,17 @@ test('can query transfers', async () => {
|
|
|
1065
1084
|
limit: BATCH_MAX,
|
|
1066
1085
|
flags: _1.QueryFilterFlags.none,
|
|
1067
1086
|
};
|
|
1068
|
-
|
|
1087
|
+
const query = await client.queryTransfers(filter);
|
|
1069
1088
|
assert_1.default.strictEqual(query.length, 10);
|
|
1070
|
-
|
|
1071
|
-
for (
|
|
1089
|
+
let timestamp = 0n;
|
|
1090
|
+
for (const transfer of query) {
|
|
1072
1091
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
1073
1092
|
timestamp = transfer.timestamp;
|
|
1074
1093
|
assert_1.default.strictEqual(transfer.code, filter.code);
|
|
1075
1094
|
}
|
|
1076
1095
|
}
|
|
1077
1096
|
{
|
|
1078
|
-
|
|
1097
|
+
const filter = {
|
|
1079
1098
|
user_data_128: 0n,
|
|
1080
1099
|
user_data_64: 0n,
|
|
1081
1100
|
user_data_32: 0,
|
|
@@ -1086,10 +1105,10 @@ test('can query transfers', async () => {
|
|
|
1086
1105
|
limit: 5,
|
|
1087
1106
|
flags: _1.QueryFilterFlags.reversed,
|
|
1088
1107
|
};
|
|
1089
|
-
|
|
1108
|
+
let query = await client.queryTransfers(filter);
|
|
1090
1109
|
assert_1.default.strictEqual(query.length, 5);
|
|
1091
|
-
|
|
1092
|
-
for (
|
|
1110
|
+
let timestamp = 1n << 64n;
|
|
1111
|
+
for (const transfer of query) {
|
|
1093
1112
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
1094
1113
|
timestamp = transfer.timestamp;
|
|
1095
1114
|
assert_1.default.strictEqual(transfer.code, filter.code);
|
|
@@ -1097,7 +1116,7 @@ test('can query transfers', async () => {
|
|
|
1097
1116
|
filter.timestamp_max = timestamp - 1n;
|
|
1098
1117
|
query = await client.queryTransfers(filter);
|
|
1099
1118
|
assert_1.default.strictEqual(query.length, 5);
|
|
1100
|
-
for (
|
|
1119
|
+
for (const transfer of query) {
|
|
1101
1120
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
1102
1121
|
timestamp = transfer.timestamp;
|
|
1103
1122
|
assert_1.default.strictEqual(transfer.code, filter.code);
|
|
@@ -1107,7 +1126,7 @@ test('can query transfers', async () => {
|
|
|
1107
1126
|
assert_1.default.strictEqual(query.length, 0);
|
|
1108
1127
|
}
|
|
1109
1128
|
{
|
|
1110
|
-
|
|
1129
|
+
const filter = {
|
|
1111
1130
|
user_data_128: 0n,
|
|
1112
1131
|
user_data_64: 200n,
|
|
1113
1132
|
user_data_32: 10,
|
|
@@ -1118,7 +1137,7 @@ test('can query transfers', async () => {
|
|
|
1118
1137
|
limit: BATCH_MAX,
|
|
1119
1138
|
flags: _1.QueryFilterFlags.none,
|
|
1120
1139
|
};
|
|
1121
|
-
|
|
1140
|
+
const query = await client.queryTransfers(filter);
|
|
1122
1141
|
assert_1.default.strictEqual(query.length, 0);
|
|
1123
1142
|
}
|
|
1124
1143
|
});
|
|
@@ -1233,7 +1252,7 @@ test('can import accounts and transfers', async () => {
|
|
|
1233
1252
|
let accountLookup = await client.lookupAccounts([accountTmp.id]);
|
|
1234
1253
|
assert_1.default.strictEqual(accountLookup.length, 1);
|
|
1235
1254
|
const timestampMax = accountLookup[0].timestamp;
|
|
1236
|
-
await
|
|
1255
|
+
await sleep_ms(10);
|
|
1237
1256
|
const accountA = {
|
|
1238
1257
|
id: (0, _1.id)(),
|
|
1239
1258
|
debits_pending: 0n,
|
|
@@ -1314,13 +1333,46 @@ test('accept zero-length lookup_transfers', async () => {
|
|
|
1314
1333
|
assert_1.default.deepStrictEqual(transfers, []);
|
|
1315
1334
|
});
|
|
1316
1335
|
test("destroy client in-flight", async () => {
|
|
1317
|
-
const
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1336
|
+
const client_count = 5;
|
|
1337
|
+
const action_count = 50;
|
|
1338
|
+
const clients = range(client_count).map(() => (0, _1.createClient)({
|
|
1339
|
+
cluster_id: 0n,
|
|
1340
|
+
replica_addresses: REPLICA_ADDRESSES,
|
|
1341
|
+
}));
|
|
1342
|
+
const ids = [];
|
|
1343
|
+
const actions = range(action_count).map(() => async () => {
|
|
1344
|
+
await sleep_ms(Math.random() < 0.2 ? 0 : Math.random());
|
|
1345
|
+
const client = clients[random_index(clients)];
|
|
1346
|
+
if (Math.random() < 0.1) {
|
|
1347
|
+
client.destroy();
|
|
1348
|
+
return;
|
|
1349
|
+
}
|
|
1350
|
+
if (Math.random() < 0.7) {
|
|
1351
|
+
const id_new = (0, _1.id)();
|
|
1352
|
+
ids.push(id_new);
|
|
1353
|
+
try {
|
|
1354
|
+
await client.createAccounts([{ ...accountA, id: id_new }]);
|
|
1355
|
+
}
|
|
1356
|
+
catch (err) {
|
|
1357
|
+
assert_1.default.ok(err instanceof _1.RequestError);
|
|
1358
|
+
assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_CLIENT_CLOSED);
|
|
1359
|
+
}
|
|
1360
|
+
return;
|
|
1361
|
+
}
|
|
1362
|
+
try {
|
|
1363
|
+
const id_lookup = (Math.random() < 0.2 || ids.length == 0)
|
|
1364
|
+
? BigInt(Math.floor(Math.random() * 10000))
|
|
1365
|
+
: ids[random_index(ids)];
|
|
1366
|
+
await client.lookupAccounts([id_lookup]);
|
|
1367
|
+
}
|
|
1368
|
+
catch (err) {
|
|
1369
|
+
assert_1.default.ok(err instanceof _1.RequestError);
|
|
1370
|
+
assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_CLIENT_CLOSED);
|
|
1371
|
+
}
|
|
1323
1372
|
});
|
|
1373
|
+
await Promise.all(actions.map((f) => f()));
|
|
1374
|
+
for (const client of clients)
|
|
1375
|
+
client.destroy();
|
|
1324
1376
|
});
|
|
1325
1377
|
async function main() {
|
|
1326
1378
|
const start = new Date().getTime();
|