@agoric/swingset-liveslots 0.10.3-u19.2 → 0.10.3-u20.0
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/package.json +16 -16
- package/src/collectionManager.d.ts +1 -0
- package/src/collectionManager.d.ts.map +1 -1
- package/src/collectionManager.js +1 -0
- package/src/liveslots.js +2 -2
- package/src/message.d.ts +10 -6
- package/src/message.d.ts.map +1 -1
- package/src/message.js +7 -3
- package/src/types.d.ts +8 -3
- package/src/types.d.ts.map +1 -1
- package/src/types.js +6 -5
- package/src/virtualObjectManager.d.ts.map +1 -1
- package/src/virtualObjectManager.js +70 -14
- package/src/watchedPromises.d.ts.map +1 -1
- package/src/watchedPromises.js +10 -13
- package/test/gc-helpers.js +2 -2
- package/test/handled-promises.test.js +529 -163
- package/test/initial-vrefs.test.js +12 -18
- package/test/liveslots-helpers.d.ts +1 -0
- package/test/liveslots-helpers.d.ts.map +1 -1
- package/test/liveslots-helpers.js +1 -0
- package/test/liveslots-real-gc.test.js +2 -2
- package/test/liveslots.test.js +3 -3
- package/test/storeGC/lifecycle.test.js +13 -12
- package/test/util.d.ts +1 -1
- package/test/util.d.ts.map +1 -1
- package/test/util.js +2 -2
- package/test/virtual-objects/state-shape.test.js +312 -221
- package/test/virtual-objects/virtualObjectGC.test.js +37 -36
- package/test/virtual-objects/virtualObjectManager.test.js +41 -63
- package/test/vo-test-harness.test.js +13 -9
- package/tools/fakeVirtualSupport.d.ts.map +1 -1
- package/tools/setup-vat-data.d.ts.map +1 -1
- package/tools/setup-vat-data.js +0 -1
- package/tools/vo-test-harness.d.ts +31 -0
- package/tools/vo-test-harness.d.ts.map +1 -1
- package/tools/vo-test-harness.js +21 -0
- package/test/watch-promise.test.js +0 -42
|
@@ -3,6 +3,7 @@ import test from 'ava';
|
|
|
3
3
|
|
|
4
4
|
import { Far } from '@endo/marshal';
|
|
5
5
|
import { krefOf, kser, kslot } from '@agoric/kmarshal';
|
|
6
|
+
import { avaRetry } from '@agoric/internal/tools/avaRetry.js';
|
|
6
7
|
import {
|
|
7
8
|
setupTestLiveslots,
|
|
8
9
|
findSyscallsByType,
|
|
@@ -437,10 +438,10 @@ async function voLifeCycleTest1(t, isf) {
|
|
|
437
438
|
await dispatchMessageSuccessfully('dropHeld');
|
|
438
439
|
assertState(v, vref, false, 'erv');
|
|
439
440
|
}
|
|
440
|
-
test.serial
|
|
441
|
+
avaRetry(test.serial, 'VO lifecycle 1 unfaceted', async t => {
|
|
441
442
|
await voLifeCycleTest1(t, false);
|
|
442
443
|
});
|
|
443
|
-
test.serial
|
|
444
|
+
avaRetry(test.serial, 'VO lifecycle 1 faceted', async t => {
|
|
444
445
|
await voLifeCycleTest1(t, true);
|
|
445
446
|
});
|
|
446
447
|
|
|
@@ -519,10 +520,10 @@ async function voLifeCycleTest2(t, isf) {
|
|
|
519
520
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), []);
|
|
520
521
|
}
|
|
521
522
|
|
|
522
|
-
test.serial
|
|
523
|
+
avaRetry(test.serial, 'VO lifecycle 2 unfaceted', async t => {
|
|
523
524
|
await voLifeCycleTest2(t, false);
|
|
524
525
|
});
|
|
525
|
-
test.serial
|
|
526
|
+
avaRetry(test.serial, 'VO lifecycle 2 faceted', async t => {
|
|
526
527
|
await voLifeCycleTest2(t, true);
|
|
527
528
|
});
|
|
528
529
|
|
|
@@ -567,10 +568,10 @@ async function voLifeCycleTest3(t, isf) {
|
|
|
567
568
|
t.deepEqual(findSyscallsByType(v.log, 'dropExports'), []);
|
|
568
569
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), []);
|
|
569
570
|
}
|
|
570
|
-
test.serial
|
|
571
|
+
avaRetry(test.serial, 'VO lifecycle 3 unfaceted', async t => {
|
|
571
572
|
await voLifeCycleTest3(t, false);
|
|
572
573
|
});
|
|
573
|
-
test.serial
|
|
574
|
+
avaRetry(test.serial, 'VO lifecycle 3 faceted', async t => {
|
|
574
575
|
await voLifeCycleTest3(t, true);
|
|
575
576
|
});
|
|
576
577
|
|
|
@@ -600,10 +601,10 @@ async function voLifeCycleTest4(t, isf) {
|
|
|
600
601
|
const expected = { type: 'retireExports', slots: [vref] };
|
|
601
602
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), [expected]);
|
|
602
603
|
}
|
|
603
|
-
test.serial
|
|
604
|
+
avaRetry(test.serial, 'VO lifecycle 4 unfaceted', async t => {
|
|
604
605
|
await voLifeCycleTest4(t, false);
|
|
605
606
|
});
|
|
606
|
-
test.serial
|
|
607
|
+
avaRetry(test.serial, 'VO lifecycle 4 faceted', async t => {
|
|
607
608
|
await voLifeCycleTest4(t, true);
|
|
608
609
|
});
|
|
609
610
|
|
|
@@ -640,10 +641,10 @@ async function voLifeCycleTest5(t, isf) {
|
|
|
640
641
|
t.deepEqual(findSyscallsByType(v.log, 'dropExports'), []);
|
|
641
642
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), []);
|
|
642
643
|
}
|
|
643
|
-
test.serial
|
|
644
|
+
avaRetry(test.serial, 'VO lifecycle 5 unfaceted', async t => {
|
|
644
645
|
await voLifeCycleTest5(t, false);
|
|
645
646
|
});
|
|
646
|
-
test.serial
|
|
647
|
+
avaRetry(test.serial, 'VO lifecycle 5 faceted', async t => {
|
|
647
648
|
await voLifeCycleTest5(t, true);
|
|
648
649
|
});
|
|
649
650
|
|
|
@@ -689,10 +690,10 @@ async function voLifeCycleTest6(t, isf) {
|
|
|
689
690
|
const expected = { type: 'retireExports', slots: [vref] };
|
|
690
691
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), [expected]);
|
|
691
692
|
}
|
|
692
|
-
test.serial
|
|
693
|
+
avaRetry(test.serial, 'VO lifecycle 6 unfaceted', async t => {
|
|
693
694
|
await voLifeCycleTest6(t, false);
|
|
694
695
|
});
|
|
695
|
-
test.serial
|
|
696
|
+
avaRetry(test.serial, 'VO lifecycle 6 faceted', async t => {
|
|
696
697
|
await voLifeCycleTest6(t, true);
|
|
697
698
|
});
|
|
698
699
|
|
|
@@ -730,10 +731,10 @@ async function voLifeCycleTest7(t, isf) {
|
|
|
730
731
|
const expected = { type: 'retireExports', slots: [vref] };
|
|
731
732
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), [expected]);
|
|
732
733
|
}
|
|
733
|
-
test.serial
|
|
734
|
+
avaRetry(test.serial, 'VO lifecycle 7 unfaceted', async t => {
|
|
734
735
|
await voLifeCycleTest7(t, false);
|
|
735
736
|
});
|
|
736
|
-
test.serial
|
|
737
|
+
avaRetry(test.serial, 'VO lifecycle 7 faceted', async t => {
|
|
737
738
|
await voLifeCycleTest7(t, true);
|
|
738
739
|
});
|
|
739
740
|
|
|
@@ -779,15 +780,15 @@ async function voLifeCycleTest8(t, isf) {
|
|
|
779
780
|
const expected = { type: 'retireExports', slots: [vref] };
|
|
780
781
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), [expected]);
|
|
781
782
|
}
|
|
782
|
-
test.serial
|
|
783
|
+
avaRetry(test.serial, 'VO lifecycle 8 unfaceted', async t => {
|
|
783
784
|
await voLifeCycleTest8(t, false);
|
|
784
785
|
});
|
|
785
|
-
test.serial
|
|
786
|
+
avaRetry(test.serial, 'VO lifecycle 8 faceted', async t => {
|
|
786
787
|
await voLifeCycleTest8(t, true);
|
|
787
788
|
});
|
|
788
789
|
|
|
789
790
|
// multifacet export test 1: no export
|
|
790
|
-
test.serial
|
|
791
|
+
avaRetry(test.serial, 'VO multifacet export 1', async t => {
|
|
791
792
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(
|
|
792
793
|
t,
|
|
793
794
|
buildRootObject,
|
|
@@ -808,7 +809,7 @@ test.serial('VO multifacet export 1', async t => {
|
|
|
808
809
|
});
|
|
809
810
|
|
|
810
811
|
// multifacet export test 2a: export A, drop A, retire A
|
|
811
|
-
test.serial
|
|
812
|
+
avaRetry(test.serial, 'VO multifacet export 2a', async t => {
|
|
812
813
|
const { v, dispatchMessageSuccessfully, dispatchDropExports } =
|
|
813
814
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
814
815
|
const vref = facetRef(true, thingVref(true, 2), '0');
|
|
@@ -836,7 +837,7 @@ test.serial('VO multifacet export 2a', async t => {
|
|
|
836
837
|
});
|
|
837
838
|
|
|
838
839
|
// multifacet export test 2b: export B, drop B, retire B
|
|
839
|
-
test.serial
|
|
840
|
+
avaRetry(test.serial, 'VO multifacet export 2b', async t => {
|
|
840
841
|
const { v, dispatchMessageSuccessfully, dispatchDropExports } =
|
|
841
842
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
842
843
|
const vref = facetRef(true, thingVref(true, 2), '1');
|
|
@@ -863,7 +864,7 @@ test.serial('VO multifacet export 2b', async t => {
|
|
|
863
864
|
});
|
|
864
865
|
|
|
865
866
|
// multifacet export test 3abba: export A, export B, drop B, drop A, retire
|
|
866
|
-
test.serial
|
|
867
|
+
avaRetry(test.serial, 'VO multifacet export 3abba', async t => {
|
|
867
868
|
const { v, dispatchMessageSuccessfully, dispatchDropExports } =
|
|
868
869
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
869
870
|
const vrefA = facetRef(true, thingVref(true, 2), '0');
|
|
@@ -901,7 +902,7 @@ test.serial('VO multifacet export 3abba', async t => {
|
|
|
901
902
|
});
|
|
902
903
|
|
|
903
904
|
// multifacet export test 3abab: export A, export B, drop A, drop B, retire
|
|
904
|
-
test.serial
|
|
905
|
+
avaRetry(test.serial, 'VO multifacet export 3abab', async t => {
|
|
905
906
|
const { v, dispatchMessageSuccessfully, dispatchDropExports } =
|
|
906
907
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
907
908
|
const vrefA = facetRef(true, thingVref(true, 2), '0');
|
|
@@ -938,7 +939,7 @@ test.serial('VO multifacet export 3abab', async t => {
|
|
|
938
939
|
t.deepEqual(findSyscallsByType(v.log, 'retireExports'), [expected]);
|
|
939
940
|
});
|
|
940
941
|
|
|
941
|
-
test.serial
|
|
942
|
+
avaRetry(test.serial, 'VO multifacet markers only', async t => {
|
|
942
943
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(
|
|
943
944
|
t,
|
|
944
945
|
buildRootObject,
|
|
@@ -993,10 +994,10 @@ async function voRefcountManagementTest1(t, isf) {
|
|
|
993
994
|
t.is(fakestore.get(`vom.rc.${baseRef}`), undefined);
|
|
994
995
|
assertState(v, vref, false, 'erv');
|
|
995
996
|
}
|
|
996
|
-
test.serial
|
|
997
|
+
avaRetry(test.serial, 'VO refcount management 1 unfaceted', async t => {
|
|
997
998
|
await voRefcountManagementTest1(t, false);
|
|
998
999
|
});
|
|
999
|
-
test.serial
|
|
1000
|
+
avaRetry(test.serial, 'VO refcount management 1 faceted', async t => {
|
|
1000
1001
|
await voRefcountManagementTest1(t, true);
|
|
1001
1002
|
});
|
|
1002
1003
|
|
|
@@ -1034,10 +1035,10 @@ async function voRefcountManagementTest2(t, isf) {
|
|
|
1034
1035
|
t.is(fakestore.get(`vom.rc.${baseRef}`), undefined);
|
|
1035
1036
|
assertState(v, vref, false, 'erv');
|
|
1036
1037
|
}
|
|
1037
|
-
test.serial
|
|
1038
|
+
avaRetry(test.serial, 'VO refcount management 2 unfaceted', async t => {
|
|
1038
1039
|
await voRefcountManagementTest2(t, false);
|
|
1039
1040
|
});
|
|
1040
|
-
test.serial
|
|
1041
|
+
avaRetry(test.serial, 'VO refcount management 2 faceted', async t => {
|
|
1041
1042
|
await voRefcountManagementTest2(t, true);
|
|
1042
1043
|
});
|
|
1043
1044
|
|
|
@@ -1084,15 +1085,15 @@ async function voRefcountManagementTest3(t, isf) {
|
|
|
1084
1085
|
t.is(fakestore.get(`vom.${holderVrefs[1]}`), undefined);
|
|
1085
1086
|
t.is(fakestore.get(`vom.${holderVrefs[2]}`), undefined);
|
|
1086
1087
|
}
|
|
1087
|
-
test.serial
|
|
1088
|
+
avaRetry(test.serial, 'VO refcount management 3 unfaceted', async t => {
|
|
1088
1089
|
await voRefcountManagementTest3(t, false);
|
|
1089
1090
|
});
|
|
1090
|
-
test.serial
|
|
1091
|
+
avaRetry(test.serial, 'VO refcount management 3 faceted', async t => {
|
|
1091
1092
|
await voRefcountManagementTest3(t, true);
|
|
1092
1093
|
});
|
|
1093
1094
|
|
|
1094
1095
|
// prettier-ignore
|
|
1095
|
-
test.serial
|
|
1096
|
+
avaRetry(test.serial, 'presence refcount management 1', async t => {
|
|
1096
1097
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1097
1098
|
const { fakestore } = v;
|
|
1098
1099
|
|
|
@@ -1131,7 +1132,7 @@ test.serial('presence refcount management 1', async t => {
|
|
|
1131
1132
|
});
|
|
1132
1133
|
|
|
1133
1134
|
// prettier-ignore
|
|
1134
|
-
test.serial
|
|
1135
|
+
avaRetry(test.serial, 'presence refcount management 2', async t => {
|
|
1135
1136
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1136
1137
|
const { fakestore } = v;
|
|
1137
1138
|
|
|
@@ -1169,7 +1170,7 @@ test.serial('presence refcount management 2', async t => {
|
|
|
1169
1170
|
});
|
|
1170
1171
|
|
|
1171
1172
|
// prettier-ignore
|
|
1172
|
-
test.serial
|
|
1173
|
+
avaRetry(test.serial, 'remotable refcount management 1', async t => {
|
|
1173
1174
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1174
1175
|
const { fakestore } = v;
|
|
1175
1176
|
|
|
@@ -1212,7 +1213,7 @@ test.serial('remotable refcount management 1', async t => {
|
|
|
1212
1213
|
});
|
|
1213
1214
|
|
|
1214
1215
|
// prettier-ignore
|
|
1215
|
-
test.serial
|
|
1216
|
+
avaRetry(test.serial, 'remotable refcount management 2', async t => {
|
|
1216
1217
|
const { v, dispatchMessageSuccessfully } = await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1217
1218
|
const { fakestore } = v;
|
|
1218
1219
|
|
|
@@ -1255,15 +1256,15 @@ async function voWeakKeyGCTest(t, isf) {
|
|
|
1255
1256
|
t.is(testHooks.countWeakKeysForCollection(aWeakSet), 0);
|
|
1256
1257
|
t.is(fakestore.get(`vom.${baseRef}`), undefined);
|
|
1257
1258
|
}
|
|
1258
|
-
test.serial
|
|
1259
|
+
avaRetry(test.serial, 'verify VO weak key GC unfaceted', async t => {
|
|
1259
1260
|
await voWeakKeyGCTest(t, false);
|
|
1260
1261
|
});
|
|
1261
|
-
test.serial
|
|
1262
|
+
avaRetry(test.serial, 'verify VO weak key GC faceted', async t => {
|
|
1262
1263
|
await voWeakKeyGCTest(t, true);
|
|
1263
1264
|
});
|
|
1264
1265
|
|
|
1265
1266
|
// prettier-ignore
|
|
1266
|
-
test.serial
|
|
1267
|
+
avaRetry(test.serial, 'verify presence weak key GC', async t => {
|
|
1267
1268
|
const { v, dispatchMessageSuccessfully, dispatchRetireImports, testHooks } =
|
|
1268
1269
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1269
1270
|
const vref = 'o-5';
|
|
@@ -1314,7 +1315,7 @@ test.serial('verify presence weak key GC', async t => {
|
|
|
1314
1315
|
// designate references to a non-VO.
|
|
1315
1316
|
|
|
1316
1317
|
// prettier-ignore
|
|
1317
|
-
test.serial
|
|
1318
|
+
avaRetry(test.serial, 'VO holding non-VO', async t => {
|
|
1318
1319
|
const { v, dispatchMessageSuccessfully, dispatchDropExports, dispatchRetireExports } =
|
|
1319
1320
|
await setupTestLiveslots(t, buildRootObject, 'bob', { forceGC: true });
|
|
1320
1321
|
const { fakestore } = v;
|
|
@@ -590,12 +590,12 @@ test('durable kind IDs can be reanimated', t => {
|
|
|
590
590
|
|
|
591
591
|
// Store it in the store without having used it
|
|
592
592
|
placeToPutIt.init('savedKindID', kindHandle);
|
|
593
|
-
t.is(log.shift(), 'get vc.
|
|
593
|
+
t.is(log.shift(), 'get vc.3.ssavedKindID => undefined');
|
|
594
594
|
t.is(log.shift(), `get vom.rc.${khid} => undefined`);
|
|
595
595
|
t.is(log.shift(), `set vom.rc.${khid} 1`);
|
|
596
|
-
t.is(log.shift(), `set vc.
|
|
597
|
-
t.is(log.shift(), 'get vc.
|
|
598
|
-
t.is(log.shift(), 'set vc.
|
|
596
|
+
t.is(log.shift(), `set vc.3.ssavedKindID ${vstr(kind)}`);
|
|
597
|
+
t.is(log.shift(), 'get vc.3.|entryCount => 0');
|
|
598
|
+
t.is(log.shift(), 'set vc.3.|entryCount 1');
|
|
599
599
|
t.deepEqual(log, []);
|
|
600
600
|
|
|
601
601
|
// Forget its Representative
|
|
@@ -609,7 +609,7 @@ test('durable kind IDs can be reanimated', t => {
|
|
|
609
609
|
|
|
610
610
|
// Fetch it from the store, which should reanimate it
|
|
611
611
|
const fetchedKindID = placeToPutIt.get('savedKindID');
|
|
612
|
-
t.is(log.shift(), `get vc.
|
|
612
|
+
t.is(log.shift(), `get vc.3.ssavedKindID => ${vstr(kind)}`);
|
|
613
613
|
t.is(
|
|
614
614
|
log.shift(),
|
|
615
615
|
'get vom.dkind.10.descriptor => {"kindID":"10","tag":"testkind"}',
|
|
@@ -658,20 +658,18 @@ test('virtual object gc', t => {
|
|
|
658
658
|
];
|
|
659
659
|
t.is(log.shift(), `get storeKindIDTable => undefined`);
|
|
660
660
|
t.is(log.shift(), `set ${skit[0]} ${skit[1]}`);
|
|
661
|
+
t.is(log.shift(), 'get watcherTableID => undefined');
|
|
661
662
|
t.is(log.shift(), 'set vc.1.|nextOrdinal 1');
|
|
662
663
|
t.is(log.shift(), 'set vc.1.|entryCount 0');
|
|
663
|
-
t.is(log.shift(), '
|
|
664
|
+
t.is(log.shift(), 'set watcherTableID o+d6/1');
|
|
665
|
+
t.is(log.shift(), 'get vom.rc.o+d6/1 => undefined');
|
|
666
|
+
t.is(log.shift(), 'set vom.rc.o+d6/1 1');
|
|
667
|
+
t.is(log.shift(), 'get watchedPromiseTableID => undefined');
|
|
664
668
|
t.is(log.shift(), 'set vc.2.|nextOrdinal 1');
|
|
665
669
|
t.is(log.shift(), 'set vc.2.|entryCount 0');
|
|
666
|
-
t.is(log.shift(), 'set
|
|
670
|
+
t.is(log.shift(), 'set watchedPromiseTableID o+d6/2');
|
|
667
671
|
t.is(log.shift(), 'get vom.rc.o+d6/2 => undefined');
|
|
668
672
|
t.is(log.shift(), 'set vom.rc.o+d6/2 1');
|
|
669
|
-
t.is(log.shift(), 'get watchedPromiseTableID => undefined');
|
|
670
|
-
t.is(log.shift(), 'set vc.3.|nextOrdinal 1');
|
|
671
|
-
t.is(log.shift(), 'set vc.3.|entryCount 0');
|
|
672
|
-
t.is(log.shift(), 'set watchedPromiseTableID o+d6/3');
|
|
673
|
-
t.is(log.shift(), 'get vom.rc.o+d6/3 => undefined');
|
|
674
|
-
t.is(log.shift(), 'set vom.rc.o+d6/3 1');
|
|
675
673
|
t.is(
|
|
676
674
|
log.shift(),
|
|
677
675
|
'set vom.vkind.10.descriptor {"kindID":"10","tag":"thing"}',
|
|
@@ -704,8 +702,6 @@ test('virtual object gc', t => {
|
|
|
704
702
|
['vc.1.|nextOrdinal', '1'],
|
|
705
703
|
['vc.2.|entryCount', '0'],
|
|
706
704
|
['vc.2.|nextOrdinal', '1'],
|
|
707
|
-
['vc.3.|entryCount', '0'],
|
|
708
|
-
['vc.3.|nextOrdinal', '1'],
|
|
709
705
|
[`vom.${tbase}/1`, minThing('thing #1')],
|
|
710
706
|
[`vom.${tbase}/2`, minThing('thing #2')],
|
|
711
707
|
[`vom.${tbase}/3`, minThing('thing #3')],
|
|
@@ -715,12 +711,12 @@ test('virtual object gc', t => {
|
|
|
715
711
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
716
712
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
717
713
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
714
|
+
['vom.rc.o+d6/1', '1'],
|
|
718
715
|
['vom.rc.o+d6/2', '1'],
|
|
719
|
-
['vom.rc.o+d6/3', '1'],
|
|
720
716
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
721
717
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
722
|
-
['watchedPromiseTableID', 'o+d6/
|
|
723
|
-
['watcherTableID', 'o+d6/
|
|
718
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
719
|
+
['watcherTableID', 'o+d6/1'],
|
|
724
720
|
]);
|
|
725
721
|
|
|
726
722
|
// This is what the finalizer would do if the local reference was dropped and GC'd
|
|
@@ -750,8 +746,6 @@ test('virtual object gc', t => {
|
|
|
750
746
|
['vc.1.|nextOrdinal', '1'],
|
|
751
747
|
['vc.2.|entryCount', '0'],
|
|
752
748
|
['vc.2.|nextOrdinal', '1'],
|
|
753
|
-
['vc.3.|entryCount', '0'],
|
|
754
|
-
['vc.3.|nextOrdinal', '1'],
|
|
755
749
|
[`vom.es.${tbase}/1`, 'r'],
|
|
756
750
|
[`vom.${tbase}/1`, minThing('thing #1')],
|
|
757
751
|
[`vom.${tbase}/2`, minThing('thing #2')],
|
|
@@ -762,12 +756,12 @@ test('virtual object gc', t => {
|
|
|
762
756
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
763
757
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
764
758
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
759
|
+
['vom.rc.o+d6/1', '1'],
|
|
765
760
|
['vom.rc.o+d6/2', '1'],
|
|
766
|
-
['vom.rc.o+d6/3', '1'],
|
|
767
761
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
768
762
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
769
|
-
['watchedPromiseTableID', 'o+d6/
|
|
770
|
-
['watcherTableID', 'o+d6/
|
|
763
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
764
|
+
['watcherTableID', 'o+d6/1'],
|
|
771
765
|
]);
|
|
772
766
|
|
|
773
767
|
// drop export -- should delete
|
|
@@ -801,8 +795,6 @@ test('virtual object gc', t => {
|
|
|
801
795
|
['vc.1.|nextOrdinal', '1'],
|
|
802
796
|
['vc.2.|entryCount', '0'],
|
|
803
797
|
['vc.2.|nextOrdinal', '1'],
|
|
804
|
-
['vc.3.|entryCount', '0'],
|
|
805
|
-
['vc.3.|nextOrdinal', '1'],
|
|
806
798
|
[`vom.${tbase}/2`, minThing('thing #2')],
|
|
807
799
|
[`vom.${tbase}/3`, minThing('thing #3')],
|
|
808
800
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
@@ -811,12 +803,12 @@ test('virtual object gc', t => {
|
|
|
811
803
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
812
804
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
813
805
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
806
|
+
['vom.rc.o+d6/1', '1'],
|
|
814
807
|
['vom.rc.o+d6/2', '1'],
|
|
815
|
-
['vom.rc.o+d6/3', '1'],
|
|
816
808
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
817
809
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
818
|
-
['watchedPromiseTableID', 'o+d6/
|
|
819
|
-
['watcherTableID', 'o+d6/
|
|
810
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
811
|
+
['watcherTableID', 'o+d6/1'],
|
|
820
812
|
]);
|
|
821
813
|
|
|
822
814
|
// case 2: export, drop export, drop local ref
|
|
@@ -838,8 +830,6 @@ test('virtual object gc', t => {
|
|
|
838
830
|
['vc.1.|nextOrdinal', '1'],
|
|
839
831
|
['vc.2.|entryCount', '0'],
|
|
840
832
|
['vc.2.|nextOrdinal', '1'],
|
|
841
|
-
['vc.3.|entryCount', '0'],
|
|
842
|
-
['vc.3.|nextOrdinal', '1'],
|
|
843
833
|
[`vom.es.${tbase}/2`, 's'],
|
|
844
834
|
[`vom.${tbase}/2`, minThing('thing #2')],
|
|
845
835
|
[`vom.${tbase}/3`, minThing('thing #3')],
|
|
@@ -849,12 +839,12 @@ test('virtual object gc', t => {
|
|
|
849
839
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
850
840
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
851
841
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
842
|
+
['vom.rc.o+d6/1', '1'],
|
|
852
843
|
['vom.rc.o+d6/2', '1'],
|
|
853
|
-
['vom.rc.o+d6/3', '1'],
|
|
854
844
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
855
845
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
856
|
-
['watchedPromiseTableID', 'o+d6/
|
|
857
|
-
['watcherTableID', 'o+d6/
|
|
846
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
847
|
+
['watcherTableID', 'o+d6/1'],
|
|
858
848
|
]);
|
|
859
849
|
|
|
860
850
|
// drop local ref -- should delete
|
|
@@ -879,8 +869,6 @@ test('virtual object gc', t => {
|
|
|
879
869
|
['vc.1.|nextOrdinal', '1'],
|
|
880
870
|
['vc.2.|entryCount', '0'],
|
|
881
871
|
['vc.2.|nextOrdinal', '1'],
|
|
882
|
-
['vc.3.|entryCount', '0'],
|
|
883
|
-
['vc.3.|nextOrdinal', '1'],
|
|
884
872
|
[`vom.${tbase}/3`, minThing('thing #3')],
|
|
885
873
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
886
874
|
[`vom.${tbase}/5`, minThing('thing #5')],
|
|
@@ -888,12 +876,12 @@ test('virtual object gc', t => {
|
|
|
888
876
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
889
877
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
890
878
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
879
|
+
['vom.rc.o+d6/1', '1'],
|
|
891
880
|
['vom.rc.o+d6/2', '1'],
|
|
892
|
-
['vom.rc.o+d6/3', '1'],
|
|
893
881
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
894
882
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
895
|
-
['watchedPromiseTableID', 'o+d6/
|
|
896
|
-
['watcherTableID', 'o+d6/
|
|
883
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
884
|
+
['watcherTableID', 'o+d6/1'],
|
|
897
885
|
]);
|
|
898
886
|
|
|
899
887
|
// case 3: drop local ref with no prior export
|
|
@@ -919,20 +907,18 @@ test('virtual object gc', t => {
|
|
|
919
907
|
['vc.1.|nextOrdinal', '1'],
|
|
920
908
|
['vc.2.|entryCount', '0'],
|
|
921
909
|
['vc.2.|nextOrdinal', '1'],
|
|
922
|
-
['vc.3.|entryCount', '0'],
|
|
923
|
-
['vc.3.|nextOrdinal', '1'],
|
|
924
910
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
925
911
|
[`vom.${tbase}/5`, minThing('thing #5')],
|
|
926
912
|
[`vom.${tbase}/6`, minThing('thing #6')],
|
|
927
913
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
928
914
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
929
915
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
916
|
+
['vom.rc.o+d6/1', '1'],
|
|
930
917
|
['vom.rc.o+d6/2', '1'],
|
|
931
|
-
['vom.rc.o+d6/3', '1'],
|
|
932
918
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
933
919
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
934
|
-
['watchedPromiseTableID', 'o+d6/
|
|
935
|
-
['watcherTableID', 'o+d6/
|
|
920
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
921
|
+
['watcherTableID', 'o+d6/1'],
|
|
936
922
|
]);
|
|
937
923
|
|
|
938
924
|
// case 4: ref virtually, export, drop local ref, drop export
|
|
@@ -949,21 +935,19 @@ test('virtual object gc', t => {
|
|
|
949
935
|
['vc.1.|nextOrdinal', '1'],
|
|
950
936
|
['vc.2.|entryCount', '0'],
|
|
951
937
|
['vc.2.|nextOrdinal', '1'],
|
|
952
|
-
['vc.3.|entryCount', '0'],
|
|
953
|
-
['vc.3.|nextOrdinal', '1'],
|
|
954
938
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
955
939
|
[`vom.${tbase}/5`, minThing('thing #5')],
|
|
956
940
|
[`vom.${tbase}/6`, minThing('thing #6')],
|
|
957
941
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
958
942
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
959
943
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
944
|
+
['vom.rc.o+d6/1', '1'],
|
|
960
945
|
['vom.rc.o+d6/2', '1'],
|
|
961
|
-
['vom.rc.o+d6/3', '1'],
|
|
962
946
|
[`vom.rc.${tbase}/4`, '1'],
|
|
963
947
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
964
948
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
965
|
-
['watchedPromiseTableID', 'o+d6/
|
|
966
|
-
['watcherTableID', 'o+d6/
|
|
949
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
950
|
+
['watcherTableID', 'o+d6/1'],
|
|
967
951
|
]);
|
|
968
952
|
// export
|
|
969
953
|
setExportStatus(`${tbase}/4`, 'reachable');
|
|
@@ -1001,8 +985,6 @@ test('virtual object gc', t => {
|
|
|
1001
985
|
['vc.1.|nextOrdinal', '1'],
|
|
1002
986
|
['vc.2.|entryCount', '0'],
|
|
1003
987
|
['vc.2.|nextOrdinal', '1'],
|
|
1004
|
-
['vc.3.|entryCount', '0'],
|
|
1005
|
-
['vc.3.|nextOrdinal', '1'],
|
|
1006
988
|
[`vom.es.${tbase}/4`, 's'],
|
|
1007
989
|
[`vom.es.${tbase}/5`, 'r'],
|
|
1008
990
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
@@ -1011,14 +993,14 @@ test('virtual object gc', t => {
|
|
|
1011
993
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
1012
994
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
1013
995
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
996
|
+
['vom.rc.o+d6/1', '1'],
|
|
1014
997
|
['vom.rc.o+d6/2', '1'],
|
|
1015
|
-
['vom.rc.o+d6/3', '1'],
|
|
1016
998
|
[`vom.rc.${tbase}/4`, '1'],
|
|
1017
999
|
[`vom.rc.${tbase}/5`, '1'],
|
|
1018
1000
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
1019
1001
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
1020
|
-
['watchedPromiseTableID', 'o+d6/
|
|
1021
|
-
['watcherTableID', 'o+d6/
|
|
1002
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
1003
|
+
['watcherTableID', 'o+d6/1'],
|
|
1022
1004
|
]);
|
|
1023
1005
|
// drop local ref -- should not delete because ref'd virtually AND exported
|
|
1024
1006
|
pretendGC(`${tbase}/5`, false);
|
|
@@ -1046,8 +1028,6 @@ test('virtual object gc', t => {
|
|
|
1046
1028
|
['vc.1.|nextOrdinal', '1'],
|
|
1047
1029
|
['vc.2.|entryCount', '0'],
|
|
1048
1030
|
['vc.2.|nextOrdinal', '1'],
|
|
1049
|
-
['vc.3.|entryCount', '0'],
|
|
1050
|
-
['vc.3.|nextOrdinal', '1'],
|
|
1051
1031
|
[`vom.es.${tbase}/4`, 's'],
|
|
1052
1032
|
[`vom.es.${tbase}/5`, 's'],
|
|
1053
1033
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
@@ -1056,15 +1036,15 @@ test('virtual object gc', t => {
|
|
|
1056
1036
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
1057
1037
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
1058
1038
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
1039
|
+
['vom.rc.o+d6/1', '1'],
|
|
1059
1040
|
['vom.rc.o+d6/2', '1'],
|
|
1060
|
-
['vom.rc.o+d6/3', '1'],
|
|
1061
1041
|
[`vom.rc.${tbase}/4`, '1'],
|
|
1062
1042
|
[`vom.rc.${tbase}/5`, '1'],
|
|
1063
1043
|
[`vom.rc.${tbase}/6`, '1'],
|
|
1064
1044
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
1065
1045
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
1066
|
-
['watchedPromiseTableID', 'o+d6/
|
|
1067
|
-
['watcherTableID', 'o+d6/
|
|
1046
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
1047
|
+
['watcherTableID', 'o+d6/1'],
|
|
1068
1048
|
]);
|
|
1069
1049
|
// drop local ref -- should not delete because ref'd virtually
|
|
1070
1050
|
pretendGC(`${tbase}/6`, false);
|
|
@@ -1078,8 +1058,6 @@ test('virtual object gc', t => {
|
|
|
1078
1058
|
['vc.1.|nextOrdinal', '1'],
|
|
1079
1059
|
['vc.2.|entryCount', '0'],
|
|
1080
1060
|
['vc.2.|nextOrdinal', '1'],
|
|
1081
|
-
['vc.3.|entryCount', '0'],
|
|
1082
|
-
['vc.3.|nextOrdinal', '1'],
|
|
1083
1061
|
[`vom.es.${tbase}/4`, 's'],
|
|
1084
1062
|
[`vom.es.${tbase}/5`, 's'],
|
|
1085
1063
|
[`vom.${tbase}/4`, minThing('thing #4')],
|
|
@@ -1088,15 +1066,15 @@ test('virtual object gc', t => {
|
|
|
1088
1066
|
[`vom.${tbase}/7`, minThing('thing #7')],
|
|
1089
1067
|
[`vom.${tbase}/8`, minThing('thing #8')],
|
|
1090
1068
|
[`vom.${tbase}/9`, minThing('thing #9')],
|
|
1069
|
+
['vom.rc.o+d6/1', '1'],
|
|
1091
1070
|
['vom.rc.o+d6/2', '1'],
|
|
1092
|
-
['vom.rc.o+d6/3', '1'],
|
|
1093
1071
|
[`vom.rc.${tbase}/4`, '1'],
|
|
1094
1072
|
[`vom.rc.${tbase}/5`, '1'],
|
|
1095
1073
|
[`vom.rc.${tbase}/6`, '1'],
|
|
1096
1074
|
['vom.vkind.10.descriptor', '{"kindID":"10","tag":"thing"}'],
|
|
1097
1075
|
['vom.vkind.11.descriptor', '{"kindID":"11","tag":"ref"}'],
|
|
1098
|
-
['watchedPromiseTableID', 'o+d6/
|
|
1099
|
-
['watcherTableID', 'o+d6/
|
|
1076
|
+
['watchedPromiseTableID', 'o+d6/2'],
|
|
1077
|
+
['watcherTableID', 'o+d6/1'],
|
|
1100
1078
|
]);
|
|
1101
1079
|
});
|
|
1102
1080
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import test from 'ava';
|
|
2
|
-
import { runVOTest } from '../tools/vo-test-harness.js';
|
|
2
|
+
import { makeSpy, runVOTest } from '../tools/vo-test-harness.js';
|
|
3
3
|
|
|
4
4
|
async function voTestTest(t, mode) {
|
|
5
5
|
let makeThing;
|
|
@@ -36,8 +36,6 @@ async function voTestTest(t, mode) {
|
|
|
36
36
|
await runVOTest(t, prepare, makeTestThing, testTestThing);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
// Note: these first two are not marked "test.failing" because
|
|
40
|
-
// something is wrong and we need to fix it. Rather, they are
|
|
41
39
|
// confirming that the voTestTest harness would catch problems during
|
|
42
40
|
// downstream tests that use the harness, if those problems arose in
|
|
43
41
|
// the "before" or "after" phases, and reported by the downstream test
|
|
@@ -47,20 +45,26 @@ async function voTestTest(t, mode) {
|
|
|
47
45
|
// fails, otherwise the harness is not doing its job, and is hiding
|
|
48
46
|
// real test failures in some downstream client package.
|
|
49
47
|
|
|
50
|
-
test
|
|
51
|
-
|
|
48
|
+
test('fail during "before" phase', async t => {
|
|
49
|
+
const tSpy = makeSpy(t);
|
|
50
|
+
await voTestTest(tSpy, 'before');
|
|
51
|
+
t.is(tSpy.failureMessage, 'deliberate failure in before phase');
|
|
52
52
|
});
|
|
53
53
|
|
|
54
|
-
test
|
|
55
|
-
|
|
54
|
+
test('fail during "after" phase', async t => {
|
|
55
|
+
const tSpy = makeSpy(t);
|
|
56
|
+
await voTestTest(tSpy, 'after');
|
|
57
|
+
t.is(tSpy.failureMessage, 'deliberate failure in after phase');
|
|
56
58
|
});
|
|
57
59
|
|
|
58
60
|
// Similarly, this test makes sure that our harness can detect when
|
|
59
61
|
// the downstream test misbehaves and holds on to the object they were
|
|
60
62
|
// supposed to drop.
|
|
61
63
|
|
|
62
|
-
test
|
|
63
|
-
|
|
64
|
+
test('fail due to held object', async t => {
|
|
65
|
+
const tSpy = makeSpy(t);
|
|
66
|
+
await voTestTest(tSpy, 'hold');
|
|
67
|
+
t.is(tSpy.falsyMessage, 'somebody continues to hold test object');
|
|
64
68
|
});
|
|
65
69
|
|
|
66
70
|
test.serial('succeed', async t => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fakeVirtualSupport.d.ts","sourceRoot":"","sources":["fakeVirtualSupport.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuQC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcC;AAED;;;
|
|
1
|
+
{"version":3,"file":"fakeVirtualSupport.d.ts","sourceRoot":"","sources":["fakeVirtualSupport.js"],"names":[],"mappings":"AAyCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuQC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAcC;AAED;;;mEAhIiB,wBAAmB,iDAIZ,GAAI,gDAE1B,GAAC,4BAGc,iBAAY;kFAkDJ,iBAAY;EAoFpC;AAED;;;;;;;;;;GAUG;AACH,+CAPG;IAAyB,SAAS;IACR,oBAAoB;IACR,SAAS;IACV,OAAO;IACP,OAAO;IAClB,IAAI;CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qEAjFH,GAC9B,+IAKuB,GAAG;0EAQd,GAAG,uJAKV,GAAG;+HAeL,GAAG,+IAKiB,GAAG;oIAOA,GAC1B,uJAGG,GAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEA3HW,wBAAmB,iDAIZ,GAAI,gDAE1B,GAAC,4BAGc,iBAAY;sFAkDJ,iBAAY;;EAgHpC;AAED;;;;;;;;iEApG+B,GAC9B,+IAKuB,GAAG;sEAQd,GAAG,uJAKV,GAAG;2HAeL,GAAG,+IAKiB,GAAG;gIAOA,GAC1B,uJAGG,GAAE;;;;;;;;;;;;;;;;;;;EA0DL;AAED;;;;;;;;;;;;EAMC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-vat-data.d.ts","sourceRoot":"","sources":["setup-vat-data.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup-vat-data.d.ts","sourceRoot":"","sources":["setup-vat-data.js"],"names":[],"mappings":"AA2DO,2CAHI,OAAO,CAAC,kBAAkB,CAAC,GACzB,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAelD;AAOM,sCAHI,OAAO,CAAC,kBAAkB,CAAC,GACzB,kBAAkB,CAiB9B;yBAjFa,UAAU,CAAC,OAAO,oBAAoB,CAAC;iCAmCxC,OAAO,kBAAkB,EAAE,QAAQ,CAC3C,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC,GACxF;IAAM,UAAU,EAAE,UAAU,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAC3D;qCA1CiC,yBAAyB"}
|
package/tools/setup-vat-data.js
CHANGED