cojson 0.18.31 → 0.18.33
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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +17 -0
- package/dist/SyncStateManager.d.ts.map +1 -1
- package/dist/SyncStateManager.js +2 -2
- package/dist/SyncStateManager.js.map +1 -1
- package/dist/coValueCore/SessionMap.d.ts +1 -0
- package/dist/coValueCore/SessionMap.d.ts.map +1 -1
- package/dist/coValueCore/SessionMap.js +17 -2
- package/dist/coValueCore/SessionMap.js.map +1 -1
- package/dist/coValueCore/coValueCore.d.ts +14 -9
- package/dist/coValueCore/coValueCore.d.ts.map +1 -1
- package/dist/coValueCore/coValueCore.js +62 -47
- package/dist/coValueCore/coValueCore.js.map +1 -1
- package/dist/coValueCore/verifiedState.d.ts +2 -2
- package/dist/coValueCore/verifiedState.d.ts.map +1 -1
- package/dist/coValueCore/verifiedState.js +86 -75
- package/dist/coValueCore/verifiedState.js.map +1 -1
- package/dist/coValues/group.d.ts +1 -0
- package/dist/coValues/group.d.ts.map +1 -1
- package/dist/coValues/group.js +24 -4
- package/dist/coValues/group.js.map +1 -1
- package/dist/crypto/PureJSCrypto.d.ts.map +1 -1
- package/dist/crypto/PureJSCrypto.js +2 -10
- package/dist/crypto/PureJSCrypto.js.map +1 -1
- package/dist/knownState.d.ts +1 -1
- package/dist/knownState.d.ts.map +1 -1
- package/dist/knownState.js +1 -1
- package/dist/knownState.js.map +1 -1
- package/dist/localNode.d.ts.map +1 -1
- package/dist/localNode.js +1 -2
- package/dist/localNode.js.map +1 -1
- package/dist/queue/LocalTransactionsSyncQueue.d.ts.map +1 -1
- package/dist/queue/LocalTransactionsSyncQueue.js +16 -1
- package/dist/queue/LocalTransactionsSyncQueue.js.map +1 -1
- package/dist/storage/knownState.js +2 -2
- package/dist/storage/knownState.js.map +1 -1
- package/dist/storage/sqlite/index.d.ts.map +1 -1
- package/dist/storage/sqlite/index.js +17 -3
- package/dist/storage/sqlite/index.js.map +1 -1
- package/dist/storage/sqlite/sqliteMigrations.d.ts +6 -1
- package/dist/storage/sqlite/sqliteMigrations.d.ts.map +1 -1
- package/dist/storage/sqlite/sqliteMigrations.js +1 -3
- package/dist/storage/sqlite/sqliteMigrations.js.map +1 -1
- package/dist/storage/sqlite/types.d.ts +2 -0
- package/dist/storage/sqlite/types.d.ts.map +1 -1
- package/dist/storage/sqliteAsync/index.d.ts.map +1 -1
- package/dist/storage/sqliteAsync/index.js +17 -3
- package/dist/storage/sqliteAsync/index.js.map +1 -1
- package/dist/storage/sqliteAsync/types.d.ts +2 -0
- package/dist/storage/sqliteAsync/types.d.ts.map +1 -1
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +8 -2
- package/dist/sync.js.map +1 -1
- package/dist/tests/PureJSCrypto.test.js +1 -1
- package/dist/tests/PureJSCrypto.test.js.map +1 -1
- package/dist/tests/StorageApiAsync.test.js +11 -11
- package/dist/tests/StorageApiAsync.test.js.map +1 -1
- package/dist/tests/StorageApiSync.test.js +3 -3
- package/dist/tests/StorageApiSync.test.js.map +1 -1
- package/dist/tests/WasmCrypto.test.js +1 -1
- package/dist/tests/WasmCrypto.test.js.map +1 -1
- package/dist/tests/coPlainText.test.js +1 -1
- package/dist/tests/coStream.test.js +12 -12
- package/dist/tests/coStream.test.js.map +1 -1
- package/dist/tests/coValueCore.isCompletelyDownloaded.test.d.ts +2 -0
- package/dist/tests/coValueCore.isCompletelyDownloaded.test.d.ts.map +1 -0
- package/dist/tests/coValueCore.isCompletelyDownloaded.test.js +421 -0
- package/dist/tests/coValueCore.isCompletelyDownloaded.test.js.map +1 -0
- package/dist/tests/coValueCore.isStreaming.test.d.ts +2 -0
- package/dist/tests/coValueCore.isStreaming.test.d.ts.map +1 -0
- package/dist/tests/coValueCore.isStreaming.test.js +181 -0
- package/dist/tests/coValueCore.isStreaming.test.js.map +1 -0
- package/dist/tests/coValueCore.newContentSince.test.d.ts +2 -0
- package/dist/tests/coValueCore.newContentSince.test.d.ts.map +1 -0
- package/dist/tests/coValueCore.newContentSince.test.js +808 -0
- package/dist/tests/coValueCore.newContentSince.test.js.map +1 -0
- package/dist/tests/coreWasm.test.js +2 -2
- package/dist/tests/coreWasm.test.js.map +1 -1
- package/dist/tests/group.childKeyRotation.test.d.ts +2 -0
- package/dist/tests/group.childKeyRotation.test.d.ts.map +1 -0
- package/dist/tests/group.childKeyRotation.test.js +261 -0
- package/dist/tests/group.childKeyRotation.test.js.map +1 -0
- package/dist/tests/group.removeMember.test.js +1 -114
- package/dist/tests/group.removeMember.test.js.map +1 -1
- package/dist/tests/knownState.test.js +11 -11
- package/dist/tests/knownState.test.js.map +1 -1
- package/dist/tests/sync.auth.test.js +6 -6
- package/dist/tests/sync.load.test.js +68 -5
- package/dist/tests/sync.load.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +11 -17
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.peerReconciliation.test.js +1 -1
- package/dist/tests/sync.storage.test.js +7 -7
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.storageAsync.test.js +4 -4
- package/dist/tests/sync.storageAsync.test.js.map +1 -1
- package/dist/tests/sync.upload.test.js +96 -40
- package/dist/tests/sync.upload.test.js.map +1 -1
- package/dist/tests/testUtils.d.ts +2 -0
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +22 -1
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +3 -3
- package/src/SyncStateManager.ts +2 -5
- package/src/coValueCore/SessionMap.ts +26 -1
- package/src/coValueCore/coValueCore.ts +77 -55
- package/src/coValueCore/verifiedState.ts +123 -108
- package/src/coValues/group.ts +27 -4
- package/src/crypto/PureJSCrypto.ts +5 -21
- package/src/knownState.ts +1 -1
- package/src/localNode.ts +1 -2
- package/src/queue/LocalTransactionsSyncQueue.ts +25 -0
- package/src/storage/knownState.ts +2 -2
- package/src/storage/sqlite/index.ts +16 -3
- package/src/storage/sqlite/sqliteMigrations.ts +7 -4
- package/src/storage/sqlite/types.ts +2 -0
- package/src/storage/sqliteAsync/index.ts +19 -6
- package/src/storage/sqliteAsync/types.ts +2 -0
- package/src/sync.ts +7 -2
- package/src/tests/PureJSCrypto.test.ts +1 -2
- package/src/tests/StorageApiAsync.test.ts +11 -11
- package/src/tests/StorageApiSync.test.ts +3 -3
- package/src/tests/WasmCrypto.test.ts +1 -2
- package/src/tests/coPlainText.test.ts +1 -1
- package/src/tests/coStream.test.ts +12 -12
- package/src/tests/coValueCore.isCompletelyDownloaded.test.ts +589 -0
- package/src/tests/coValueCore.isStreaming.test.ts +271 -0
- package/src/tests/coValueCore.newContentSince.test.ts +966 -0
- package/src/tests/coreWasm.test.ts +2 -2
- package/src/tests/group.childKeyRotation.test.ts +431 -0
- package/src/tests/group.removeMember.test.ts +1 -184
- package/src/tests/knownState.test.ts +11 -11
- package/src/tests/sync.auth.test.ts +6 -6
- package/src/tests/sync.load.test.ts +80 -5
- package/src/tests/sync.mesh.test.ts +11 -17
- package/src/tests/sync.peerReconciliation.test.ts +1 -1
- package/src/tests/sync.storage.test.ts +7 -7
- package/src/tests/sync.storageAsync.test.ts +4 -4
- package/src/tests/sync.upload.test.ts +106 -40
- package/src/tests/testUtils.ts +24 -2
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
setSessionCounter,
|
|
8
8
|
updateSessionCounter,
|
|
9
9
|
cloneKnownState,
|
|
10
|
-
|
|
10
|
+
isKnownStateSubsetOf,
|
|
11
11
|
type CoValueKnownState,
|
|
12
12
|
type KnownStateSessions,
|
|
13
13
|
} from "../knownState.js";
|
|
@@ -547,14 +547,14 @@ describe("knownState", () => {
|
|
|
547
547
|
});
|
|
548
548
|
});
|
|
549
549
|
|
|
550
|
-
describe("
|
|
550
|
+
describe("isKnownStateSubsetOf", () => {
|
|
551
551
|
test("should return true when all counters match", () => {
|
|
552
552
|
const session1 = "session-1" as SessionID;
|
|
553
553
|
const session2 = "session-2" as SessionID;
|
|
554
554
|
const from = { [session1]: 5, [session2]: 10 };
|
|
555
555
|
const to = { [session1]: 5, [session2]: 10 };
|
|
556
556
|
|
|
557
|
-
const result =
|
|
557
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
558
558
|
|
|
559
559
|
expect(result).toBe(true);
|
|
560
560
|
});
|
|
@@ -564,7 +564,7 @@ describe("knownState", () => {
|
|
|
564
564
|
const from = { [session1]: 5 };
|
|
565
565
|
const to = { [session1]: 3 };
|
|
566
566
|
|
|
567
|
-
const result =
|
|
567
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
568
568
|
|
|
569
569
|
expect(result).toBe(false);
|
|
570
570
|
});
|
|
@@ -574,7 +574,7 @@ describe("knownState", () => {
|
|
|
574
574
|
const from = { [session1]: 5 };
|
|
575
575
|
const to = {};
|
|
576
576
|
|
|
577
|
-
const result =
|
|
577
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
578
578
|
|
|
579
579
|
expect(result).toBe(false);
|
|
580
580
|
});
|
|
@@ -584,7 +584,7 @@ describe("knownState", () => {
|
|
|
584
584
|
const from = {};
|
|
585
585
|
const to = { [session1]: 5 };
|
|
586
586
|
|
|
587
|
-
const result =
|
|
587
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
588
588
|
|
|
589
589
|
expect(result).toBe(true);
|
|
590
590
|
});
|
|
@@ -593,7 +593,7 @@ describe("knownState", () => {
|
|
|
593
593
|
const from = {};
|
|
594
594
|
const to = {};
|
|
595
595
|
|
|
596
|
-
const result =
|
|
596
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
597
597
|
|
|
598
598
|
expect(result).toBe(true);
|
|
599
599
|
});
|
|
@@ -613,7 +613,7 @@ describe("knownState", () => {
|
|
|
613
613
|
[session3]: 15,
|
|
614
614
|
};
|
|
615
615
|
|
|
616
|
-
const result =
|
|
616
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
617
617
|
|
|
618
618
|
expect(result).toBe(true);
|
|
619
619
|
});
|
|
@@ -633,7 +633,7 @@ describe("knownState", () => {
|
|
|
633
633
|
[session3]: 15,
|
|
634
634
|
};
|
|
635
635
|
|
|
636
|
-
const result =
|
|
636
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
637
637
|
|
|
638
638
|
expect(result).toBe(false);
|
|
639
639
|
});
|
|
@@ -647,7 +647,7 @@ describe("knownState", () => {
|
|
|
647
647
|
[session2]: 10,
|
|
648
648
|
};
|
|
649
649
|
|
|
650
|
-
const result =
|
|
650
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
651
651
|
|
|
652
652
|
expect(result).toBe(true);
|
|
653
653
|
});
|
|
@@ -657,7 +657,7 @@ describe("knownState", () => {
|
|
|
657
657
|
const from = { [session1]: 5 };
|
|
658
658
|
const to = { [session1]: 10 };
|
|
659
659
|
|
|
660
|
-
const result =
|
|
660
|
+
const result = isKnownStateSubsetOf(from, to);
|
|
661
661
|
|
|
662
662
|
expect(result).toBe(false);
|
|
663
663
|
});
|
|
@@ -53,7 +53,7 @@ describe("LocalNode auth sync", () => {
|
|
|
53
53
|
}),
|
|
54
54
|
).toMatchInlineSnapshot(`
|
|
55
55
|
[
|
|
56
|
-
"client -> server | CONTENT Account header: true new: After: 0 New: 3",
|
|
56
|
+
"client -> server | CONTENT Account header: true new: After: 0 New: 3 expectContentUntil: header/4",
|
|
57
57
|
"client -> server | CONTENT ProfileGroup header: true new: After: 0 New: 5",
|
|
58
58
|
"client -> server | CONTENT Profile header: true new: After: 0 New: 1",
|
|
59
59
|
"client -> server | CONTENT Account header: false new: After: 3 New: 1",
|
|
@@ -116,9 +116,9 @@ describe("LocalNode auth sync", () => {
|
|
|
116
116
|
}),
|
|
117
117
|
).toMatchInlineSnapshot(`
|
|
118
118
|
[
|
|
119
|
-
"client -> server | CONTENT Account header: true new: After: 0 New: 3",
|
|
120
|
-
"client -> server | CONTENT Root header: true new: ",
|
|
121
|
-
"client -> server | CONTENT Profile header: true new: ",
|
|
119
|
+
"client -> server | CONTENT Account header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
120
|
+
"client -> server | CONTENT Root header: true new: expectContentUntil: header/1",
|
|
121
|
+
"client -> server | CONTENT Profile header: true new: expectContentUntil: header/1",
|
|
122
122
|
"client -> server | CONTENT Root header: false new: After: 0 New: 1",
|
|
123
123
|
"client -> server | CONTENT Profile header: false new: After: 0 New: 1",
|
|
124
124
|
"client -> server | CONTENT Account header: false new: After: 3 New: 2",
|
|
@@ -176,7 +176,7 @@ describe("LocalNode auth sync", () => {
|
|
|
176
176
|
}),
|
|
177
177
|
).toMatchInlineSnapshot(`
|
|
178
178
|
[
|
|
179
|
-
"creation-node -> server | CONTENT Account header: true new: After: 0 New: 3",
|
|
179
|
+
"creation-node -> server | CONTENT Account header: true new: After: 0 New: 3 expectContentUntil: header/4",
|
|
180
180
|
"creation-node -> server | CONTENT ProfileGroup header: true new: After: 0 New: 5",
|
|
181
181
|
"creation-node -> server | CONTENT Profile header: true new: After: 0 New: 1",
|
|
182
182
|
"creation-node -> server | CONTENT Account header: false new: After: 3 New: 1",
|
|
@@ -246,7 +246,7 @@ describe("LocalNode auth sync", () => {
|
|
|
246
246
|
}),
|
|
247
247
|
).toMatchInlineSnapshot(`
|
|
248
248
|
[
|
|
249
|
-
"creation-node -> server | CONTENT Account header: true new: After: 0 New: 3",
|
|
249
|
+
"creation-node -> server | CONTENT Account header: true new: After: 0 New: 3 expectContentUntil: header/4",
|
|
250
250
|
"creation-node -> server | CONTENT ProfileGroup header: true new: After: 0 New: 5",
|
|
251
251
|
"creation-node -> server | CONTENT Profile header: true new: After: 0 New: 1",
|
|
252
252
|
"creation-node -> server | CONTENT Account header: false new: After: 3 New: 1",
|
|
@@ -576,8 +576,7 @@ describe("loading coValues from server", () => {
|
|
|
576
576
|
[
|
|
577
577
|
"client -> server | LOAD Map sessions: empty",
|
|
578
578
|
"server -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
579
|
-
"server -> client | CONTENT Map header: true new:
|
|
580
|
-
"server -> client | CONTENT Map header: false new: After: 0 New: 73",
|
|
579
|
+
"server -> client | CONTENT Map header: true new: After: 0 New: 73 expectContentUntil: header/1024",
|
|
581
580
|
"server -> client | CONTENT Map header: false new: After: 73 New: 73",
|
|
582
581
|
"server -> client | CONTENT Map header: false new: After: 146 New: 73",
|
|
583
582
|
"server -> client | CONTENT Map header: false new: After: 219 New: 73",
|
|
@@ -593,7 +592,6 @@ describe("loading coValues from server", () => {
|
|
|
593
592
|
"server -> client | CONTENT Map header: false new: After: 949 New: 73",
|
|
594
593
|
"server -> client | CONTENT Map header: false new: After: 1022 New: 2",
|
|
595
594
|
"client -> server | KNOWN Group sessions: header/5",
|
|
596
|
-
"client -> server | KNOWN Map sessions: header/0",
|
|
597
595
|
"client -> server | KNOWN Map sessions: header/73",
|
|
598
596
|
"client -> server | KNOWN Map sessions: header/146",
|
|
599
597
|
"client -> server | KNOWN Map sessions: header/219",
|
|
@@ -613,6 +611,83 @@ describe("loading coValues from server", () => {
|
|
|
613
611
|
`);
|
|
614
612
|
});
|
|
615
613
|
|
|
614
|
+
test("streaming a large update", async () => {
|
|
615
|
+
const group = jazzCloud.node.createGroup();
|
|
616
|
+
group.addMember("everyone", "writer");
|
|
617
|
+
|
|
618
|
+
const largeMap = group.createMap();
|
|
619
|
+
|
|
620
|
+
await largeMap.core.waitForSync();
|
|
621
|
+
|
|
622
|
+
const client = setupTestNode({
|
|
623
|
+
connected: true,
|
|
624
|
+
});
|
|
625
|
+
const mapOnClient = await loadCoValueOrFail(client.node, largeMap.id);
|
|
626
|
+
|
|
627
|
+
// Generate a large amount of data (about 100MB)
|
|
628
|
+
const dataSize = 1 * 1024 * 1024;
|
|
629
|
+
const chunkSize = 1024; // 1KB chunks
|
|
630
|
+
const chunks = dataSize / chunkSize;
|
|
631
|
+
|
|
632
|
+
const value = Buffer.alloc(chunkSize, `value$`).toString("base64");
|
|
633
|
+
|
|
634
|
+
for (let i = 0; i < chunks; i++) {
|
|
635
|
+
const key = `key${i}`;
|
|
636
|
+
largeMap.set(key, value, "trusting");
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
await waitFor(() => {
|
|
640
|
+
expect(mapOnClient.core.knownState()).toEqual(largeMap.core.knownState());
|
|
641
|
+
});
|
|
642
|
+
|
|
643
|
+
expect(mapOnClient.get(`key${chunks - 1}`)).toEqual(value);
|
|
644
|
+
|
|
645
|
+
expect(
|
|
646
|
+
SyncMessagesLog.getMessages({
|
|
647
|
+
Group: group.core,
|
|
648
|
+
Map: largeMap.core,
|
|
649
|
+
}),
|
|
650
|
+
).toMatchInlineSnapshot(`
|
|
651
|
+
[
|
|
652
|
+
"client -> server | LOAD Map sessions: empty",
|
|
653
|
+
"server -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
654
|
+
"server -> client | CONTENT Map header: true new: ",
|
|
655
|
+
"client -> server | KNOWN Group sessions: header/5",
|
|
656
|
+
"client -> server | KNOWN Map sessions: header/0",
|
|
657
|
+
"server -> client | CONTENT Map header: false new: After: 0 New: 72 expectContentUntil: header/1024",
|
|
658
|
+
"server -> client | CONTENT Map header: false new: After: 72 New: 73",
|
|
659
|
+
"server -> client | CONTENT Map header: false new: After: 145 New: 73",
|
|
660
|
+
"server -> client | CONTENT Map header: false new: After: 218 New: 73",
|
|
661
|
+
"server -> client | CONTENT Map header: false new: After: 291 New: 73",
|
|
662
|
+
"server -> client | CONTENT Map header: false new: After: 364 New: 73",
|
|
663
|
+
"server -> client | CONTENT Map header: false new: After: 437 New: 73",
|
|
664
|
+
"server -> client | CONTENT Map header: false new: After: 510 New: 73",
|
|
665
|
+
"server -> client | CONTENT Map header: false new: After: 583 New: 73",
|
|
666
|
+
"server -> client | CONTENT Map header: false new: After: 656 New: 73",
|
|
667
|
+
"server -> client | CONTENT Map header: false new: After: 729 New: 73",
|
|
668
|
+
"server -> client | CONTENT Map header: false new: After: 802 New: 73",
|
|
669
|
+
"server -> client | CONTENT Map header: false new: After: 875 New: 73",
|
|
670
|
+
"server -> client | CONTENT Map header: false new: After: 948 New: 73",
|
|
671
|
+
"server -> client | CONTENT Map header: false new: After: 1021 New: 3",
|
|
672
|
+
"client -> server | KNOWN Map sessions: header/72",
|
|
673
|
+
"client -> server | KNOWN Map sessions: header/145",
|
|
674
|
+
"client -> server | KNOWN Map sessions: header/218",
|
|
675
|
+
"client -> server | KNOWN Map sessions: header/291",
|
|
676
|
+
"client -> server | KNOWN Map sessions: header/364",
|
|
677
|
+
"client -> server | KNOWN Map sessions: header/437",
|
|
678
|
+
"client -> server | KNOWN Map sessions: header/510",
|
|
679
|
+
"client -> server | KNOWN Map sessions: header/583",
|
|
680
|
+
"client -> server | KNOWN Map sessions: header/656",
|
|
681
|
+
"client -> server | KNOWN Map sessions: header/729",
|
|
682
|
+
"client -> server | KNOWN Map sessions: header/802",
|
|
683
|
+
"client -> server | KNOWN Map sessions: header/875",
|
|
684
|
+
"client -> server | KNOWN Map sessions: header/948",
|
|
685
|
+
"client -> server | KNOWN Map sessions: header/1021",
|
|
686
|
+
"client -> server | KNOWN Map sessions: header/1024",
|
|
687
|
+
]
|
|
688
|
+
`);
|
|
689
|
+
});
|
|
690
|
+
|
|
616
691
|
test("should wait for a persistent peer to reconnect before marking the coValue as unavailable", async () => {
|
|
617
692
|
const client = setupTestNode();
|
|
618
693
|
const connection1 = client.connectToSyncServer({
|
|
@@ -1311,8 +1386,8 @@ describe("loading coValues from server", () => {
|
|
|
1311
1386
|
}),
|
|
1312
1387
|
).toMatchInlineSnapshot(`
|
|
1313
1388
|
[
|
|
1314
|
-
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
1315
|
-
"client -> server | CONTENT ParentGroup header: true new: After: 0 New: 5",
|
|
1389
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
1390
|
+
"client -> server | CONTENT ParentGroup header: true new: After: 0 New: 5 expectContentUntil: header/7",
|
|
1316
1391
|
"client -> server | CONTENT Group header: false new: After: 3 New: 2",
|
|
1317
1392
|
"client -> server | CONTENT ParentGroup header: false new: After: 5 New: 2",
|
|
1318
1393
|
"client -> server | CONTENT Map header: true new: After: 0 New: 1",
|
|
@@ -152,8 +152,8 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
152
152
|
}),
|
|
153
153
|
).toMatchInlineSnapshot(`
|
|
154
154
|
[
|
|
155
|
-
"edge-france -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
156
|
-
"edge-france -> core | CONTENT Group header: true new: After: 0 New: 3",
|
|
155
|
+
"edge-france -> storage | CONTENT Group header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
156
|
+
"edge-france -> core | CONTENT Group header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
157
157
|
"edge-france -> storage | CONTENT ParentGroup header: true new: After: 0 New: 5",
|
|
158
158
|
"edge-france -> core | CONTENT ParentGroup header: true new: After: 0 New: 5",
|
|
159
159
|
"edge-france -> storage | CONTENT Group header: false new: After: 3 New: 2",
|
|
@@ -320,7 +320,7 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
320
320
|
expect(mapOnItalianClient.get("hello")).toEqual("world");
|
|
321
321
|
expect(mapOnFrenchClient.get("hello")).toEqual("world");
|
|
322
322
|
|
|
323
|
-
const msg = map.core.
|
|
323
|
+
const msg = map.core.newContentSince(undefined)?.[0];
|
|
324
324
|
assert(msg);
|
|
325
325
|
|
|
326
326
|
msg.new[mesh.edgeFrance.node.currentSessionID]!.newTransactions.push({
|
|
@@ -498,7 +498,7 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
498
498
|
).toMatchInlineSnapshot(`
|
|
499
499
|
[
|
|
500
500
|
"edge -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
501
|
-
"edge -> storage | CONTENT Map header: true new: After: 0 New: 20",
|
|
501
|
+
"edge -> storage | CONTENT Map header: true new: After: 0 New: 20 expectContentUntil: header/100",
|
|
502
502
|
"edge -> storage | CONTENT Map header: false new: After: 20 New: 21",
|
|
503
503
|
"edge -> storage | CONTENT Map header: false new: After: 41 New: 21",
|
|
504
504
|
"edge -> storage | CONTENT Map header: false new: After: 62 New: 21",
|
|
@@ -552,8 +552,7 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
552
552
|
"storage -> edge | CONTENT Map header: true new: After: 0 New: 41 expectContentUntil: header/100",
|
|
553
553
|
"edge -> core | LOAD Map sessions: header/100",
|
|
554
554
|
"edge -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
555
|
-
"edge -> client | CONTENT Map header: true new:
|
|
556
|
-
"edge -> client | CONTENT Map header: false new: After: 0 New: 41",
|
|
555
|
+
"edge -> client | CONTENT Map header: true new: After: 0 New: 41 expectContentUntil: header/100",
|
|
557
556
|
"core -> storage | LOAD Group sessions: empty",
|
|
558
557
|
"storage -> core | KNOWN Group sessions: empty",
|
|
559
558
|
"core -> edge | KNOWN Group sessions: empty",
|
|
@@ -562,27 +561,22 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
562
561
|
"core -> edge | KNOWN Map sessions: empty",
|
|
563
562
|
"client -> edge | KNOWN Group sessions: header/5",
|
|
564
563
|
"client -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
565
|
-
"client -> edge | KNOWN Map sessions: header/0",
|
|
566
|
-
"client -> storage | CONTENT Map header: true new: ",
|
|
567
564
|
"client -> edge | KNOWN Map sessions: header/41",
|
|
568
|
-
"client -> storage | CONTENT Map header:
|
|
565
|
+
"client -> storage | CONTENT Map header: true new: After: 0 New: 41",
|
|
569
566
|
"storage -> edge | CONTENT Map header: true new: After: 41 New: 21",
|
|
570
|
-
"edge -> client | CONTENT Map header: false new: After: 41 New: 21",
|
|
567
|
+
"edge -> client | CONTENT Map header: false new: After: 41 New: 21 expectContentUntil: header/100",
|
|
571
568
|
"edge -> core | CONTENT Group header: true new: After: 0 New: 5",
|
|
572
|
-
"edge -> core | CONTENT Map header: true new:
|
|
573
|
-
"edge -> core | CONTENT Map header: false new: After: 0 New: 41",
|
|
569
|
+
"edge -> core | CONTENT Map header: true new: After: 0 New: 41 expectContentUntil: header/100",
|
|
574
570
|
"edge -> core | CONTENT Map header: false new: After: 41 New: 21",
|
|
575
571
|
"client -> edge | KNOWN Map sessions: header/62",
|
|
576
572
|
"client -> storage | CONTENT Map header: false new: After: 41 New: 21",
|
|
577
573
|
"storage -> edge | CONTENT Map header: true new: After: 62 New: 21",
|
|
578
|
-
"edge -> core | CONTENT Map header: false new: After: 62 New: 21",
|
|
579
|
-
"edge -> client | CONTENT Map header: false new: After: 62 New: 21",
|
|
574
|
+
"edge -> core | CONTENT Map header: false new: After: 62 New: 21 expectContentUntil: header/100",
|
|
575
|
+
"edge -> client | CONTENT Map header: false new: After: 62 New: 21 expectContentUntil: header/100",
|
|
580
576
|
"core -> edge | KNOWN Group sessions: header/5",
|
|
581
577
|
"core -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
582
|
-
"core -> edge | KNOWN Map sessions: header/0",
|
|
583
|
-
"core -> storage | CONTENT Map header: true new: ",
|
|
584
578
|
"core -> edge | KNOWN Map sessions: header/41",
|
|
585
|
-
"core -> storage | CONTENT Map header:
|
|
579
|
+
"core -> storage | CONTENT Map header: true new: After: 0 New: 41",
|
|
586
580
|
"core -> edge | KNOWN Map sessions: header/62",
|
|
587
581
|
"core -> storage | CONTENT Map header: false new: After: 41 New: 21",
|
|
588
582
|
"core -> edge | KNOWN Map sessions: header/83",
|
|
@@ -281,8 +281,8 @@ describe("peer reconciliation", () => {
|
|
|
281
281
|
"client -> server | CONTENT ProfileGroup header: true new: After: 0 New: 5",
|
|
282
282
|
"server -> client | KNOWN Account sessions: header/4",
|
|
283
283
|
"server -> client | KNOWN ProfileGroup sessions: header/5",
|
|
284
|
-
"server -> client | KNOWN CORRECTION Map sessions: empty",
|
|
285
284
|
"server -> client | KNOWN Profile sessions: header/1",
|
|
285
|
+
"server -> client | KNOWN CORRECTION Map sessions: empty",
|
|
286
286
|
"server -> client | KNOWN ProfileGroup sessions: header/5",
|
|
287
287
|
"client -> server | CONTENT Map header: true new: After: 0 New: 2",
|
|
288
288
|
"server -> client | LOAD Group sessions: empty",
|
|
@@ -382,8 +382,8 @@ describe("client syncs with a server with storage", () => {
|
|
|
382
382
|
[
|
|
383
383
|
"client -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
384
384
|
"client -> server | CONTENT Group header: true new: After: 0 New: 5",
|
|
385
|
-
"client -> storage | CONTENT Map header: true new: After: 0 New: 20",
|
|
386
|
-
"client -> server | CONTENT Map header: true new: After: 0 New: 20",
|
|
385
|
+
"client -> storage | CONTENT Map header: true new: After: 0 New: 20 expectContentUntil: header/100",
|
|
386
|
+
"client -> server | CONTENT Map header: true new: After: 0 New: 20 expectContentUntil: header/100",
|
|
387
387
|
"client -> storage | CONTENT Map header: false new: After: 20 New: 21",
|
|
388
388
|
"client -> server | CONTENT Map header: false new: After: 20 New: 21",
|
|
389
389
|
"client -> storage | CONTENT Map header: false new: After: 41 New: 21",
|
|
@@ -497,7 +497,7 @@ describe("client syncs with a server with storage", () => {
|
|
|
497
497
|
|
|
498
498
|
await largeMap.core.waitForSync();
|
|
499
499
|
|
|
500
|
-
const newContentChunks = largeMap.core.
|
|
500
|
+
const newContentChunks = largeMap.core.newContentSince(
|
|
501
501
|
emptyKnownState(largeMap.id),
|
|
502
502
|
);
|
|
503
503
|
|
|
@@ -610,7 +610,7 @@ describe("client syncs with a server with storage", () => {
|
|
|
610
610
|
SyncMessagesLog.clear(); // We want to focus on the sync messages happening from now
|
|
611
611
|
|
|
612
612
|
// Import the group in the client, to have the dependencies availble and test that the import persists on storage
|
|
613
|
-
const groupContent = group.core.
|
|
613
|
+
const groupContent = group.core.newContentSince(undefined)?.[0];
|
|
614
614
|
assert(groupContent);
|
|
615
615
|
client.node.syncManager.handleNewContent(groupContent, "import");
|
|
616
616
|
expect(storage.getKnownState(groupContent.id)).toEqual(
|
|
@@ -618,7 +618,7 @@ describe("client syncs with a server with storage", () => {
|
|
|
618
618
|
);
|
|
619
619
|
|
|
620
620
|
// Export the map content with the two sessions
|
|
621
|
-
const mapContent = mapOnBob.core.
|
|
621
|
+
const mapContent = mapOnBob.core.newContentSince(undefined)?.[0];
|
|
622
622
|
assert(mapContent);
|
|
623
623
|
|
|
624
624
|
// Tamper Bob's session
|
|
@@ -737,8 +737,8 @@ describe("client syncs with a server with storage", () => {
|
|
|
737
737
|
}),
|
|
738
738
|
).toMatchInlineSnapshot(`
|
|
739
739
|
[
|
|
740
|
-
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
741
|
-
"client -> server | CONTENT Map header: true new: ",
|
|
740
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
741
|
+
"client -> server | CONTENT Map header: true new: expectContentUntil: header/1",
|
|
742
742
|
"client -> server | CONTENT Group header: false new: After: 3 New: 2",
|
|
743
743
|
"client -> server | CONTENT Map header: false new: After: 0 New: 1",
|
|
744
744
|
"server -> client | KNOWN Group sessions: header/3",
|
|
@@ -214,7 +214,7 @@ describe("client with storage syncs with server", () => {
|
|
|
214
214
|
).toMatchInlineSnapshot(`
|
|
215
215
|
[
|
|
216
216
|
"client -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
217
|
-
"client -> storage | CONTENT InitialMap header: true new: ",
|
|
217
|
+
"client -> storage | CONTENT InitialMap header: true new: expectContentUntil: header/1",
|
|
218
218
|
"client -> storage | CONTENT ChildMap header: true new: After: 0 New: 1",
|
|
219
219
|
"client -> storage | CONTENT InitialMap header: false new: After: 0 New: 1",
|
|
220
220
|
]
|
|
@@ -304,8 +304,8 @@ describe("client syncs with a server with storage", () => {
|
|
|
304
304
|
[
|
|
305
305
|
"client -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
306
306
|
"client -> server | CONTENT Group header: true new: After: 0 New: 5",
|
|
307
|
-
"client -> storage | CONTENT Map header: true new: After: 0 New: 20",
|
|
308
|
-
"client -> server | CONTENT Map header: true new: After: 0 New: 20",
|
|
307
|
+
"client -> storage | CONTENT Map header: true new: After: 0 New: 20 expectContentUntil: header/100",
|
|
308
|
+
"client -> server | CONTENT Map header: true new: After: 0 New: 20 expectContentUntil: header/100",
|
|
309
309
|
"client -> storage | CONTENT Map header: false new: After: 20 New: 21",
|
|
310
310
|
"client -> server | CONTENT Map header: false new: After: 20 New: 21",
|
|
311
311
|
"client -> storage | CONTENT Map header: false new: After: 41 New: 21",
|
|
@@ -398,7 +398,7 @@ describe("client syncs with a server with storage", () => {
|
|
|
398
398
|
|
|
399
399
|
await largeMap.core.waitForSync();
|
|
400
400
|
|
|
401
|
-
const newContentChunks = largeMap.core.
|
|
401
|
+
const newContentChunks = largeMap.core.newContentSince(
|
|
402
402
|
emptyKnownState(largeMap.id),
|
|
403
403
|
);
|
|
404
404
|
|
|
@@ -163,7 +163,7 @@ describe("client to server upload", () => {
|
|
|
163
163
|
}),
|
|
164
164
|
).toMatchInlineSnapshot(`
|
|
165
165
|
[
|
|
166
|
-
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
166
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 3 expectContentUntil: header/5",
|
|
167
167
|
"client -> server | CONTENT ParentGroup header: true new: After: 0 New: 5",
|
|
168
168
|
"client -> server | CONTENT Group header: false new: After: 3 New: 2",
|
|
169
169
|
"client -> server | CONTENT Map header: true new: After: 0 New: 1",
|
|
@@ -363,7 +363,7 @@ describe("client to server upload", () => {
|
|
|
363
363
|
).toMatchInlineSnapshot(`
|
|
364
364
|
[
|
|
365
365
|
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
366
|
-
"client -> server | CONTENT InitialMap header: true new: ",
|
|
366
|
+
"client -> server | CONTENT InitialMap header: true new: expectContentUntil: header/1",
|
|
367
367
|
"client -> server | CONTENT ChildMap header: true new: After: 0 New: 1",
|
|
368
368
|
"client -> server | CONTENT InitialMap header: false new: After: 0 New: 1",
|
|
369
369
|
"server -> client | KNOWN Group sessions: header/3",
|
|
@@ -379,7 +379,7 @@ describe("client to server upload", () => {
|
|
|
379
379
|
connected: true,
|
|
380
380
|
});
|
|
381
381
|
|
|
382
|
-
const group =
|
|
382
|
+
const group = client.node.createGroup();
|
|
383
383
|
group.addMember("everyone", "writer");
|
|
384
384
|
|
|
385
385
|
const largeMap = group.createMap();
|
|
@@ -396,7 +396,74 @@ describe("client to server upload", () => {
|
|
|
396
396
|
largeMap.set(key, value, "trusting");
|
|
397
397
|
}
|
|
398
398
|
|
|
399
|
-
await
|
|
399
|
+
await largeMap.core.waitForSync();
|
|
400
|
+
|
|
401
|
+
expect(
|
|
402
|
+
SyncMessagesLog.getMessages({
|
|
403
|
+
Group: group.core,
|
|
404
|
+
Map: largeMap.core,
|
|
405
|
+
}),
|
|
406
|
+
).toMatchInlineSnapshot(`
|
|
407
|
+
[
|
|
408
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 5",
|
|
409
|
+
"client -> server | CONTENT Map header: true new: After: 0 New: 72 expectContentUntil: header/1024",
|
|
410
|
+
"client -> server | CONTENT Map header: false new: After: 72 New: 73",
|
|
411
|
+
"client -> server | CONTENT Map header: false new: After: 145 New: 73",
|
|
412
|
+
"client -> server | CONTENT Map header: false new: After: 218 New: 73",
|
|
413
|
+
"client -> server | CONTENT Map header: false new: After: 291 New: 73",
|
|
414
|
+
"client -> server | CONTENT Map header: false new: After: 364 New: 73",
|
|
415
|
+
"client -> server | CONTENT Map header: false new: After: 437 New: 73",
|
|
416
|
+
"client -> server | CONTENT Map header: false new: After: 510 New: 73",
|
|
417
|
+
"client -> server | CONTENT Map header: false new: After: 583 New: 73",
|
|
418
|
+
"client -> server | CONTENT Map header: false new: After: 656 New: 73",
|
|
419
|
+
"client -> server | CONTENT Map header: false new: After: 729 New: 73",
|
|
420
|
+
"client -> server | CONTENT Map header: false new: After: 802 New: 73",
|
|
421
|
+
"client -> server | CONTENT Map header: false new: After: 875 New: 73",
|
|
422
|
+
"client -> server | CONTENT Map header: false new: After: 948 New: 73",
|
|
423
|
+
"client -> server | CONTENT Map header: false new: After: 1021 New: 3",
|
|
424
|
+
"server -> client | KNOWN Group sessions: header/5",
|
|
425
|
+
"server -> client | KNOWN Map sessions: header/72",
|
|
426
|
+
"server -> client | KNOWN Map sessions: header/145",
|
|
427
|
+
"server -> client | KNOWN Map sessions: header/218",
|
|
428
|
+
"server -> client | KNOWN Map sessions: header/291",
|
|
429
|
+
"server -> client | KNOWN Map sessions: header/364",
|
|
430
|
+
"server -> client | KNOWN Map sessions: header/437",
|
|
431
|
+
"server -> client | KNOWN Map sessions: header/510",
|
|
432
|
+
"server -> client | KNOWN Map sessions: header/583",
|
|
433
|
+
"server -> client | KNOWN Map sessions: header/656",
|
|
434
|
+
"server -> client | KNOWN Map sessions: header/729",
|
|
435
|
+
"server -> client | KNOWN Map sessions: header/802",
|
|
436
|
+
"server -> client | KNOWN Map sessions: header/875",
|
|
437
|
+
"server -> client | KNOWN Map sessions: header/948",
|
|
438
|
+
"server -> client | KNOWN Map sessions: header/1021",
|
|
439
|
+
"server -> client | KNOWN Map sessions: header/1024",
|
|
440
|
+
]
|
|
441
|
+
`);
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
test("uploading a large update", async () => {
|
|
445
|
+
const client = setupTestNode({
|
|
446
|
+
connected: true,
|
|
447
|
+
});
|
|
448
|
+
|
|
449
|
+
const group = client.node.createGroup();
|
|
450
|
+
group.addMember("everyone", "writer");
|
|
451
|
+
|
|
452
|
+
const largeMap = group.createMap();
|
|
453
|
+
|
|
454
|
+
await largeMap.core.waitForSync();
|
|
455
|
+
|
|
456
|
+
// Generate a large amount of data (about 100MB)
|
|
457
|
+
const dataSize = 1 * 1024 * 1024;
|
|
458
|
+
const chunkSize = 1024; // 1KB chunks
|
|
459
|
+
const chunks = dataSize / chunkSize;
|
|
460
|
+
|
|
461
|
+
const value = Buffer.alloc(chunkSize, `value$`).toString("base64");
|
|
462
|
+
|
|
463
|
+
for (let i = 0; i < chunks; i++) {
|
|
464
|
+
const key = `key${i}`;
|
|
465
|
+
largeMap.set(key, value, "trusting");
|
|
466
|
+
}
|
|
400
467
|
|
|
401
468
|
await largeMap.core.waitForSync();
|
|
402
469
|
|
|
@@ -407,41 +474,40 @@ describe("client to server upload", () => {
|
|
|
407
474
|
}),
|
|
408
475
|
).toMatchInlineSnapshot(`
|
|
409
476
|
[
|
|
410
|
-
"client -> server |
|
|
411
|
-
"
|
|
412
|
-
"
|
|
413
|
-
"
|
|
414
|
-
"
|
|
415
|
-
"
|
|
416
|
-
"
|
|
417
|
-
"
|
|
418
|
-
"
|
|
419
|
-
"
|
|
420
|
-
"
|
|
421
|
-
"
|
|
422
|
-
"
|
|
423
|
-
"
|
|
424
|
-
"
|
|
425
|
-
"
|
|
426
|
-
"
|
|
427
|
-
"server -> client |
|
|
428
|
-
"
|
|
429
|
-
"
|
|
430
|
-
"
|
|
431
|
-
"
|
|
432
|
-
"
|
|
433
|
-
"
|
|
434
|
-
"
|
|
435
|
-
"
|
|
436
|
-
"
|
|
437
|
-
"
|
|
438
|
-
"
|
|
439
|
-
"
|
|
440
|
-
"
|
|
441
|
-
"
|
|
442
|
-
"
|
|
443
|
-
"
|
|
444
|
-
"client -> server | KNOWN Map sessions: header/1024",
|
|
477
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 5",
|
|
478
|
+
"client -> server | CONTENT Map header: true new: ",
|
|
479
|
+
"client -> server | CONTENT Map header: false new: After: 0 New: 72 expectContentUntil: header/1024",
|
|
480
|
+
"client -> server | CONTENT Map header: false new: After: 72 New: 73",
|
|
481
|
+
"client -> server | CONTENT Map header: false new: After: 145 New: 73",
|
|
482
|
+
"client -> server | CONTENT Map header: false new: After: 218 New: 73",
|
|
483
|
+
"client -> server | CONTENT Map header: false new: After: 291 New: 73",
|
|
484
|
+
"client -> server | CONTENT Map header: false new: After: 364 New: 73",
|
|
485
|
+
"client -> server | CONTENT Map header: false new: After: 437 New: 73",
|
|
486
|
+
"client -> server | CONTENT Map header: false new: After: 510 New: 73",
|
|
487
|
+
"client -> server | CONTENT Map header: false new: After: 583 New: 73",
|
|
488
|
+
"client -> server | CONTENT Map header: false new: After: 656 New: 73",
|
|
489
|
+
"client -> server | CONTENT Map header: false new: After: 729 New: 73",
|
|
490
|
+
"client -> server | CONTENT Map header: false new: After: 802 New: 73",
|
|
491
|
+
"client -> server | CONTENT Map header: false new: After: 875 New: 73",
|
|
492
|
+
"client -> server | CONTENT Map header: false new: After: 948 New: 73",
|
|
493
|
+
"client -> server | CONTENT Map header: false new: After: 1021 New: 3",
|
|
494
|
+
"server -> client | KNOWN Group sessions: header/5",
|
|
495
|
+
"server -> client | KNOWN Map sessions: header/0",
|
|
496
|
+
"server -> client | KNOWN Map sessions: header/72",
|
|
497
|
+
"server -> client | KNOWN Map sessions: header/145",
|
|
498
|
+
"server -> client | KNOWN Map sessions: header/218",
|
|
499
|
+
"server -> client | KNOWN Map sessions: header/291",
|
|
500
|
+
"server -> client | KNOWN Map sessions: header/364",
|
|
501
|
+
"server -> client | KNOWN Map sessions: header/437",
|
|
502
|
+
"server -> client | KNOWN Map sessions: header/510",
|
|
503
|
+
"server -> client | KNOWN Map sessions: header/583",
|
|
504
|
+
"server -> client | KNOWN Map sessions: header/656",
|
|
505
|
+
"server -> client | KNOWN Map sessions: header/729",
|
|
506
|
+
"server -> client | KNOWN Map sessions: header/802",
|
|
507
|
+
"server -> client | KNOWN Map sessions: header/875",
|
|
508
|
+
"server -> client | KNOWN Map sessions: header/948",
|
|
509
|
+
"server -> client | KNOWN Map sessions: header/1021",
|
|
510
|
+
"server -> client | KNOWN Map sessions: header/1024",
|
|
445
511
|
]
|
|
446
512
|
`);
|
|
447
513
|
});
|
|
@@ -461,7 +527,7 @@ describe("client to server upload", () => {
|
|
|
461
527
|
const map = coValue.getCurrentContent() as RawCoMap;
|
|
462
528
|
map.set("hello", "world", "trusting");
|
|
463
529
|
|
|
464
|
-
const content = map.core.
|
|
530
|
+
const content = map.core.newContentSince(undefined)?.[0];
|
|
465
531
|
assert(content);
|
|
466
532
|
|
|
467
533
|
// Simulate a mismatch between the header and the coValue id
|
package/src/tests/testUtils.ts
CHANGED
|
@@ -540,6 +540,13 @@ export function setupTestNode(
|
|
|
540
540
|
isSyncServer: opts.isSyncServer,
|
|
541
541
|
});
|
|
542
542
|
},
|
|
543
|
+
disconnect: () => {
|
|
544
|
+
const allPeers = Object.values(node.syncManager.peers);
|
|
545
|
+
allPeers.forEach((peer) => {
|
|
546
|
+
peer.gracefulShutdown();
|
|
547
|
+
});
|
|
548
|
+
node.syncManager.peers = {};
|
|
549
|
+
},
|
|
543
550
|
};
|
|
544
551
|
|
|
545
552
|
return ctx;
|
|
@@ -627,6 +634,22 @@ export async function setupTestAccount(
|
|
|
627
634
|
connectToSyncServer,
|
|
628
635
|
addStorage,
|
|
629
636
|
addAsyncStorage,
|
|
637
|
+
spawnNewSession: () => {
|
|
638
|
+
const { peer } = getSyncServerConnectedPeer({
|
|
639
|
+
peerId: ctx.node.getCurrentAgent().id,
|
|
640
|
+
});
|
|
641
|
+
|
|
642
|
+
ctx.node.syncManager.addPeer(peer);
|
|
643
|
+
|
|
644
|
+
return LocalNode.withLoadedAccount({
|
|
645
|
+
peers: [peer],
|
|
646
|
+
crypto: Crypto,
|
|
647
|
+
storage: opts.storage,
|
|
648
|
+
accountID: ctx.accountID,
|
|
649
|
+
accountSecret: ctx.accountSecret,
|
|
650
|
+
sessionID: Crypto.newRandomSessionID(ctx.accountID),
|
|
651
|
+
});
|
|
652
|
+
},
|
|
630
653
|
disconnect: () => {
|
|
631
654
|
const allPeers = ctx.node.syncManager.getPeers(ctx.accountID);
|
|
632
655
|
allPeers.forEach((peer) => {
|
|
@@ -715,8 +738,7 @@ export function createAccountInNode(node: LocalNode) {
|
|
|
715
738
|
|
|
716
739
|
const accountCoreEntry = node.getCoValue(accountOnTempNode.id);
|
|
717
740
|
|
|
718
|
-
const content =
|
|
719
|
-
accountOnTempNode.core.verified.newContentSince(undefined)?.[0]!;
|
|
741
|
+
const content = accountOnTempNode.core.newContentSince(undefined)?.[0]!;
|
|
720
742
|
|
|
721
743
|
node.syncManager.handleNewContent(content, "import");
|
|
722
744
|
|