cojson 0.15.8 → 0.15.9
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 +10 -0
- package/dist/IncomingMessagesQueue.d.ts +27 -0
- package/dist/IncomingMessagesQueue.d.ts.map +1 -0
- package/dist/IncomingMessagesQueue.js +114 -0
- package/dist/IncomingMessagesQueue.js.map +1 -0
- package/dist/PeerState.d.ts +2 -10
- package/dist/PeerState.d.ts.map +1 -1
- package/dist/PeerState.js +9 -90
- package/dist/PeerState.js.map +1 -1
- package/dist/PriorityBasedMessageQueue.d.ts +2 -1
- package/dist/PriorityBasedMessageQueue.d.ts.map +1 -1
- package/dist/PriorityBasedMessageQueue.js +9 -6
- package/dist/PriorityBasedMessageQueue.js.map +1 -1
- package/dist/SyncStateManager.d.ts +1 -0
- package/dist/SyncStateManager.d.ts.map +1 -1
- package/dist/SyncStateManager.js +1 -1
- package/dist/SyncStateManager.js.map +1 -1
- package/dist/coValue.d.ts +1 -1
- package/dist/coValueCore/coValueCore.d.ts +9 -17
- package/dist/coValueCore/coValueCore.d.ts.map +1 -1
- package/dist/coValueCore/coValueCore.js +75 -50
- package/dist/coValueCore/coValueCore.js.map +1 -1
- package/dist/coValueCore/verifiedState.d.ts +10 -3
- package/dist/coValueCore/verifiedState.d.ts.map +1 -1
- package/dist/coValueCore/verifiedState.js +73 -14
- package/dist/coValueCore/verifiedState.js.map +1 -1
- package/dist/coValues/coMap.d.ts +3 -3
- package/dist/coValues/coStream.d.ts +2 -2
- package/dist/coValues/group.d.ts +1 -1
- package/dist/coValues/group.d.ts.map +1 -1
- package/dist/coValues/group.js +2 -4
- package/dist/coValues/group.js.map +1 -1
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto/WasmCrypto.d.ts.map +1 -1
- package/dist/crypto/WasmCrypto.js +2 -1
- package/dist/crypto/WasmCrypto.js.map +1 -1
- package/dist/exports.d.ts +18 -7
- package/dist/exports.d.ts.map +1 -1
- package/dist/exports.js +11 -8
- package/dist/exports.js.map +1 -1
- package/dist/localNode.d.ts +8 -2
- package/dist/localNode.d.ts.map +1 -1
- package/dist/localNode.js +19 -12
- package/dist/localNode.js.map +1 -1
- package/dist/storage/StoreQueue.d.ts +15 -0
- package/dist/storage/StoreQueue.d.ts.map +1 -0
- package/dist/storage/StoreQueue.js +35 -0
- package/dist/storage/StoreQueue.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/knownState.d.ts +18 -0
- package/dist/storage/knownState.d.ts.map +1 -0
- package/dist/storage/knownState.js +63 -0
- package/dist/storage/knownState.js.map +1 -0
- package/dist/storage/sqlite/client.d.ts +37 -0
- package/dist/storage/sqlite/client.d.ts.map +1 -0
- package/dist/storage/sqlite/client.js +89 -0
- package/dist/storage/sqlite/client.js.map +1 -0
- package/dist/storage/sqlite/index.d.ts +5 -0
- package/dist/storage/sqlite/index.d.ts.map +1 -0
- package/dist/storage/sqlite/index.js +13 -0
- package/dist/storage/sqlite/index.js.map +1 -0
- package/dist/storage/sqlite/sqliteMigrations.d.ts +3 -0
- package/dist/storage/sqlite/sqliteMigrations.d.ts.map +1 -0
- package/dist/storage/sqlite/sqliteMigrations.js +44 -0
- package/dist/storage/sqlite/sqliteMigrations.js.map +1 -0
- package/dist/storage/sqlite/types.d.ts +8 -0
- package/dist/storage/sqlite/types.d.ts.map +1 -0
- package/dist/storage/sqlite/types.js +2 -0
- package/dist/storage/sqlite/types.js.map +1 -0
- package/dist/storage/sqliteAsync/client.d.ts +37 -0
- package/dist/storage/sqliteAsync/client.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/client.js +88 -0
- package/dist/storage/sqliteAsync/client.js.map +1 -0
- package/dist/storage/sqliteAsync/index.d.ts +6 -0
- package/dist/storage/sqliteAsync/index.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/index.js +15 -0
- package/dist/storage/sqliteAsync/index.js.map +1 -0
- package/dist/storage/sqliteAsync/types.d.ts +9 -0
- package/dist/storage/sqliteAsync/types.d.ts.map +1 -0
- package/dist/storage/sqliteAsync/types.js +2 -0
- package/dist/storage/sqliteAsync/types.js.map +1 -0
- package/dist/storage/storageAsync.d.ts +22 -0
- package/dist/storage/storageAsync.d.ts.map +1 -0
- package/dist/storage/storageAsync.js +214 -0
- package/dist/storage/storageAsync.js.map +1 -0
- package/dist/storage/storageSync.d.ts +21 -0
- package/dist/storage/storageSync.d.ts.map +1 -0
- package/dist/storage/storageSync.js +206 -0
- package/dist/storage/storageSync.js.map +1 -0
- package/dist/storage/syncUtils.d.ts +13 -0
- package/dist/storage/syncUtils.d.ts.map +1 -0
- package/dist/storage/syncUtils.js +25 -0
- package/dist/storage/syncUtils.js.map +1 -0
- package/dist/storage/types.d.ts +82 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/streamUtils.d.ts +13 -9
- package/dist/streamUtils.d.ts.map +1 -1
- package/dist/streamUtils.js +46 -13
- package/dist/streamUtils.js.map +1 -1
- package/dist/sync.d.ts +22 -14
- package/dist/sync.d.ts.map +1 -1
- package/dist/sync.js +143 -125
- package/dist/sync.js.map +1 -1
- package/dist/tests/IncomingMessagesQueue.test.d.ts +2 -0
- package/dist/tests/IncomingMessagesQueue.test.d.ts.map +1 -0
- package/dist/tests/IncomingMessagesQueue.test.js +437 -0
- package/dist/tests/IncomingMessagesQueue.test.js.map +1 -0
- package/dist/tests/PeerState.test.js +6 -94
- package/dist/tests/PeerState.test.js.map +1 -1
- package/dist/tests/PriorityBasedMessageQueue.test.js +14 -14
- package/dist/tests/PriorityBasedMessageQueue.test.js.map +1 -1
- package/dist/tests/StoreQueue.test.d.ts +2 -0
- package/dist/tests/StoreQueue.test.d.ts.map +1 -0
- package/dist/tests/StoreQueue.test.js +208 -0
- package/dist/tests/StoreQueue.test.js.map +1 -0
- package/dist/tests/SyncStateManager.test.js +3 -1
- package/dist/tests/SyncStateManager.test.js.map +1 -1
- package/dist/tests/account.test.js +9 -9
- package/dist/tests/account.test.js.map +1 -1
- package/dist/tests/coStream.test.js +1 -1
- package/dist/tests/coStream.test.js.map +1 -1
- package/dist/tests/coValueCore.test.js +208 -1
- package/dist/tests/coValueCore.test.js.map +1 -1
- package/dist/tests/coValueCoreLoadingState.test.js +2 -2
- package/dist/tests/coValueCoreLoadingState.test.js.map +1 -1
- package/dist/tests/group.addMember.test.js.map +1 -1
- package/dist/tests/group.removeMember.test.js +1 -1
- package/dist/tests/group.removeMember.test.js.map +1 -1
- package/dist/tests/messagesTestUtils.js +1 -1
- package/dist/tests/messagesTestUtils.js.map +1 -1
- package/dist/tests/sync.auth.test.js +23 -15
- package/dist/tests/sync.auth.test.js.map +1 -1
- package/dist/tests/sync.invite.test.js +10 -16
- package/dist/tests/sync.invite.test.js.map +1 -1
- package/dist/tests/sync.load.test.js +52 -50
- package/dist/tests/sync.load.test.js.map +1 -1
- package/dist/tests/sync.mesh.test.js +173 -56
- package/dist/tests/sync.mesh.test.js.map +1 -1
- package/dist/tests/sync.peerReconciliation.test.js +42 -32
- package/dist/tests/sync.peerReconciliation.test.js.map +1 -1
- package/dist/tests/sync.storage.test.js +162 -62
- package/dist/tests/sync.storage.test.js.map +1 -1
- package/dist/tests/sync.storageAsync.test.d.ts +2 -0
- package/dist/tests/sync.storageAsync.test.d.ts.map +1 -0
- package/dist/tests/sync.storageAsync.test.js +361 -0
- package/dist/tests/sync.storageAsync.test.js.map +1 -0
- package/dist/tests/sync.test.js +16 -21
- package/dist/tests/sync.test.js.map +1 -1
- package/dist/tests/sync.upload.test.js +28 -25
- package/dist/tests/sync.upload.test.js.map +1 -1
- package/dist/tests/testStorage.d.ts +12 -0
- package/dist/tests/testStorage.d.ts.map +1 -0
- package/dist/tests/testStorage.js +151 -0
- package/dist/tests/testStorage.js.map +1 -0
- package/dist/tests/testUtils.d.ts +20 -15
- package/dist/tests/testUtils.d.ts.map +1 -1
- package/dist/tests/testUtils.js +79 -45
- package/dist/tests/testUtils.js.map +1 -1
- package/package.json +2 -2
- package/src/IncomingMessagesQueue.ts +142 -0
- package/src/PeerState.ts +11 -110
- package/src/PriorityBasedMessageQueue.ts +13 -5
- package/src/SyncStateManager.ts +1 -1
- package/src/coValueCore/coValueCore.ts +100 -66
- package/src/coValueCore/verifiedState.ts +91 -21
- package/src/coValues/group.ts +2 -4
- package/src/config.ts +26 -0
- package/src/crypto/WasmCrypto.ts +3 -1
- package/src/exports.ts +20 -27
- package/src/localNode.ts +27 -12
- package/src/storage/StoreQueue.ts +56 -0
- package/src/storage/index.ts +5 -0
- package/src/storage/knownState.ts +88 -0
- package/src/storage/sqlite/client.ts +180 -0
- package/src/storage/sqlite/index.ts +19 -0
- package/src/storage/sqlite/sqliteMigrations.ts +44 -0
- package/src/storage/sqlite/types.ts +7 -0
- package/src/storage/sqliteAsync/client.ts +179 -0
- package/src/storage/sqliteAsync/index.ts +25 -0
- package/src/storage/sqliteAsync/types.ts +8 -0
- package/src/storage/storageAsync.ts +367 -0
- package/src/storage/storageSync.ts +343 -0
- package/src/storage/syncUtils.ts +50 -0
- package/src/storage/types.ts +162 -0
- package/src/streamUtils.ts +61 -19
- package/src/sync.ts +191 -160
- package/src/tests/IncomingMessagesQueue.test.ts +626 -0
- package/src/tests/PeerState.test.ts +6 -118
- package/src/tests/PriorityBasedMessageQueue.test.ts +18 -14
- package/src/tests/StoreQueue.test.ts +283 -0
- package/src/tests/SyncStateManager.test.ts +4 -1
- package/src/tests/account.test.ts +11 -12
- package/src/tests/coStream.test.ts +1 -3
- package/src/tests/coValueCore.test.ts +270 -1
- package/src/tests/coValueCoreLoadingState.test.ts +2 -2
- package/src/tests/group.addMember.test.ts +1 -0
- package/src/tests/group.removeMember.test.ts +2 -8
- package/src/tests/messagesTestUtils.ts +2 -2
- package/src/tests/sync.auth.test.ts +24 -14
- package/src/tests/sync.invite.test.ts +11 -17
- package/src/tests/sync.load.test.ts +53 -49
- package/src/tests/sync.mesh.test.ts +198 -56
- package/src/tests/sync.peerReconciliation.test.ts +44 -34
- package/src/tests/sync.storage.test.ts +231 -64
- package/src/tests/sync.storageAsync.test.ts +486 -0
- package/src/tests/sync.test.ts +17 -23
- package/src/tests/sync.upload.test.ts +29 -24
- package/src/tests/testStorage.ts +216 -0
- package/src/tests/testUtils.ts +89 -54
|
@@ -3,6 +3,7 @@ import { beforeEach, describe, expect, test, vi } from "vitest";
|
|
|
3
3
|
import { expectMap } from "../coValue";
|
|
4
4
|
import {
|
|
5
5
|
SyncMessagesLog,
|
|
6
|
+
TEST_NODE_CONFIG,
|
|
6
7
|
blockMessageTypeOnOutgoingPeer,
|
|
7
8
|
connectedPeersWithMessagesTracking,
|
|
8
9
|
loadCoValueOrFail,
|
|
@@ -10,10 +11,13 @@ import {
|
|
|
10
11
|
waitFor,
|
|
11
12
|
} from "./testUtils";
|
|
12
13
|
|
|
14
|
+
// We want to simulate a real world communication that happens asynchronously
|
|
15
|
+
TEST_NODE_CONFIG.withAsyncPeers = true;
|
|
16
|
+
|
|
13
17
|
function setupMesh() {
|
|
14
18
|
const coreServer = setupTestNode();
|
|
15
19
|
|
|
16
|
-
coreServer.
|
|
20
|
+
coreServer.addStorage({
|
|
17
21
|
ourName: "core",
|
|
18
22
|
});
|
|
19
23
|
|
|
@@ -23,6 +27,9 @@ function setupMesh() {
|
|
|
23
27
|
syncServerName: "core",
|
|
24
28
|
syncServer: coreServer.node,
|
|
25
29
|
});
|
|
30
|
+
edgeItaly.addStorage({
|
|
31
|
+
ourName: "edge-italy",
|
|
32
|
+
});
|
|
26
33
|
|
|
27
34
|
const edgeFrance = setupTestNode();
|
|
28
35
|
edgeFrance.connectToSyncServer({
|
|
@@ -30,12 +37,15 @@ function setupMesh() {
|
|
|
30
37
|
syncServerName: "core",
|
|
31
38
|
syncServer: coreServer.node,
|
|
32
39
|
});
|
|
40
|
+
edgeFrance.addStorage({
|
|
41
|
+
ourName: "edge-france",
|
|
42
|
+
});
|
|
33
43
|
|
|
34
44
|
return { coreServer, edgeItaly, edgeFrance };
|
|
35
45
|
}
|
|
36
46
|
|
|
37
47
|
describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
38
|
-
let mesh
|
|
48
|
+
let mesh: ReturnType<typeof setupMesh>;
|
|
39
49
|
|
|
40
50
|
beforeEach(async () => {
|
|
41
51
|
SyncMessagesLog.clear();
|
|
@@ -50,6 +60,10 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
50
60
|
syncServer: mesh.edgeItaly.node,
|
|
51
61
|
});
|
|
52
62
|
|
|
63
|
+
await client.addAsyncStorage({
|
|
64
|
+
ourName: "client",
|
|
65
|
+
});
|
|
66
|
+
|
|
53
67
|
const group = mesh.edgeFrance.node.createGroup();
|
|
54
68
|
const map = group.createMap();
|
|
55
69
|
map.set("hello", "world", "trusting");
|
|
@@ -66,28 +80,32 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
66
80
|
}),
|
|
67
81
|
).toMatchInlineSnapshot(`
|
|
68
82
|
[
|
|
83
|
+
"edge-france -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
69
84
|
"edge-france -> core | CONTENT Group header: true new: After: 0 New: 3",
|
|
70
|
-
"
|
|
71
|
-
"core -> storage | LOAD Group sessions: header/3",
|
|
85
|
+
"edge-france -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
72
86
|
"edge-france -> core | CONTENT Map header: true new: After: 0 New: 1",
|
|
73
|
-
"
|
|
74
|
-
"core -> edge-france | KNOWN Map sessions: header/1",
|
|
75
|
-
"core -> storage | LOAD Map sessions: header/1",
|
|
76
|
-
"storage -> core | KNOWN Map sessions: empty",
|
|
87
|
+
"core -> edge-france | KNOWN Group sessions: header/3",
|
|
77
88
|
"core -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
78
|
-
"
|
|
89
|
+
"core -> edge-france | KNOWN Map sessions: header/1",
|
|
79
90
|
"core -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
91
|
+
"client -> storage | LOAD Map sessions: empty",
|
|
92
|
+
"storage -> client | KNOWN Map sessions: empty",
|
|
80
93
|
"client -> edge-italy | LOAD Map sessions: empty",
|
|
81
|
-
"
|
|
94
|
+
"edge-italy -> storage | LOAD Map sessions: empty",
|
|
95
|
+
"storage -> edge-italy | KNOWN Map sessions: empty",
|
|
82
96
|
"edge-italy -> core | LOAD Map sessions: empty",
|
|
83
97
|
"core -> edge-italy | CONTENT Group header: true new: After: 0 New: 3",
|
|
84
|
-
"edge-italy -> core | KNOWN Group sessions: header/3",
|
|
85
98
|
"core -> edge-italy | CONTENT Map header: true new: After: 0 New: 1",
|
|
99
|
+
"edge-italy -> core | KNOWN Group sessions: header/3",
|
|
100
|
+
"edge-italy -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
86
101
|
"edge-italy -> core | KNOWN Map sessions: header/1",
|
|
102
|
+
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
87
103
|
"edge-italy -> client | CONTENT Group header: true new: After: 0 New: 3",
|
|
88
|
-
"client -> edge-italy | KNOWN Group sessions: header/3",
|
|
89
104
|
"edge-italy -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
105
|
+
"client -> edge-italy | KNOWN Group sessions: header/3",
|
|
106
|
+
"client -> storage | CONTENT Group header: true new: After: 0 New: 3",
|
|
90
107
|
"client -> edge-italy | KNOWN Map sessions: header/1",
|
|
108
|
+
"client -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
91
109
|
]
|
|
92
110
|
`);
|
|
93
111
|
});
|
|
@@ -122,37 +140,36 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
122
140
|
}),
|
|
123
141
|
).toMatchInlineSnapshot(`
|
|
124
142
|
[
|
|
143
|
+
"edge-france -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
125
144
|
"edge-france -> core | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
126
|
-
"core -> edge-france | KNOWN ParentGroup sessions: header/6",
|
|
127
|
-
"core -> storage | LOAD ParentGroup sessions: header/6",
|
|
128
145
|
"edge-france -> core | CONTENT Group header: true new: After: 0 New: 5",
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"core -> storage | LOAD Group sessions: header/5",
|
|
146
|
+
"edge-france -> storage | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
147
|
+
"edge-france -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
132
148
|
"edge-france -> core | CONTENT Map header: true new: After: 0 New: 1",
|
|
133
|
-
"
|
|
149
|
+
"core -> edge-france | KNOWN ParentGroup sessions: header/6",
|
|
134
150
|
"core -> storage | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
135
|
-
"core -> edge-france | KNOWN
|
|
136
|
-
"storage -> core | KNOWN ParentGroup sessions: header/6",
|
|
137
|
-
"core -> storage | LOAD Map sessions: header/1",
|
|
138
|
-
"storage -> core | KNOWN Map sessions: empty",
|
|
151
|
+
"core -> edge-france | KNOWN Group sessions: header/5",
|
|
139
152
|
"core -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
140
|
-
"
|
|
153
|
+
"core -> edge-france | KNOWN Map sessions: header/1",
|
|
141
154
|
"core -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
142
155
|
"client -> edge-italy | LOAD Map sessions: empty",
|
|
143
|
-
"
|
|
156
|
+
"edge-italy -> storage | LOAD Map sessions: empty",
|
|
157
|
+
"storage -> edge-italy | KNOWN Map sessions: empty",
|
|
144
158
|
"edge-italy -> core | LOAD Map sessions: empty",
|
|
145
159
|
"core -> edge-italy | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
146
|
-
"edge-italy -> core | KNOWN ParentGroup sessions: header/6",
|
|
147
160
|
"core -> edge-italy | CONTENT Group header: true new: After: 0 New: 5",
|
|
148
|
-
"edge-italy -> core | KNOWN Group sessions: header/5",
|
|
149
161
|
"core -> edge-italy | CONTENT Map header: true new: After: 0 New: 1",
|
|
162
|
+
"edge-italy -> core | KNOWN ParentGroup sessions: header/6",
|
|
163
|
+
"edge-italy -> storage | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
164
|
+
"edge-italy -> core | KNOWN Group sessions: header/5",
|
|
165
|
+
"edge-italy -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
150
166
|
"edge-italy -> core | KNOWN Map sessions: header/1",
|
|
167
|
+
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
151
168
|
"edge-italy -> client | CONTENT ParentGroup header: true new: After: 0 New: 6",
|
|
152
|
-
"client -> edge-italy | KNOWN ParentGroup sessions: header/6",
|
|
153
169
|
"edge-italy -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
154
|
-
"client -> edge-italy | KNOWN Group sessions: header/5",
|
|
155
170
|
"edge-italy -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
171
|
+
"client -> edge-italy | KNOWN ParentGroup sessions: header/6",
|
|
172
|
+
"client -> edge-italy | KNOWN Group sessions: header/5",
|
|
156
173
|
"client -> edge-italy | KNOWN Map sessions: header/1",
|
|
157
174
|
]
|
|
158
175
|
`);
|
|
@@ -192,12 +209,13 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
192
209
|
[
|
|
193
210
|
"client -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
194
211
|
"edge-italy -> client | KNOWN Map sessions: header/2",
|
|
212
|
+
"edge-italy -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
195
213
|
"edge-italy -> core | CONTENT Map header: false new: After: 0 New: 1",
|
|
196
214
|
"core -> edge-italy | KNOWN Map sessions: header/2",
|
|
197
215
|
"core -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
198
216
|
"core -> edge-france | CONTENT Map header: false new: After: 0 New: 1",
|
|
199
|
-
"storage -> core | KNOWN Map sessions: header/2",
|
|
200
217
|
"edge-france -> core | KNOWN Map sessions: header/2",
|
|
218
|
+
"edge-france -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
201
219
|
]
|
|
202
220
|
`);
|
|
203
221
|
});
|
|
@@ -247,38 +265,34 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
247
265
|
).toMatchInlineSnapshot(`
|
|
248
266
|
[
|
|
249
267
|
"client -> edge-italy | LOAD Map sessions: empty",
|
|
268
|
+
"edge-italy -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
250
269
|
"edge-italy -> core | CONTENT Group header: true new: After: 0 New: 5",
|
|
251
|
-
"edge-italy ->
|
|
252
|
-
"core -> edge-italy | KNOWN Group sessions: header/5",
|
|
253
|
-
"core -> storage | LOAD Group sessions: header/5",
|
|
270
|
+
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
254
271
|
"edge-italy -> core | CONTENT Map header: true new: After: 0 New: 1",
|
|
255
|
-
"
|
|
272
|
+
"edge-italy -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
256
273
|
"edge-italy -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
257
|
-
"
|
|
258
|
-
"core -> edge-italy | KNOWN Map sessions: header/3",
|
|
259
|
-
"core -> storage | LOAD Map sessions: header/3",
|
|
260
|
-
"client -> edge-italy | KNOWN Map sessions: header/1",
|
|
261
|
-
"storage -> core | KNOWN Map sessions: empty",
|
|
274
|
+
"core -> edge-italy | KNOWN Group sessions: header/5",
|
|
262
275
|
"core -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
263
|
-
"
|
|
276
|
+
"core -> edge-italy | KNOWN Map sessions: header/1",
|
|
264
277
|
"core -> storage | CONTENT Map header: true new: After: 0 New: 1",
|
|
265
|
-
"
|
|
278
|
+
"client -> edge-italy | KNOWN Group sessions: header/5",
|
|
279
|
+
"client -> edge-italy | KNOWN Map sessions: header/1",
|
|
266
280
|
"client -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
267
281
|
"core -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
268
282
|
"core -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
269
283
|
"edge-italy -> client | KNOWN CORRECTION Map sessions: empty",
|
|
270
|
-
"storage -> core | KNOWN Map sessions: header/2",
|
|
271
284
|
"edge-italy -> core | KNOWN CORRECTION Map sessions: empty",
|
|
272
285
|
"client -> edge-italy | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
273
286
|
"core -> edge-italy | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
274
287
|
"edge-italy -> client | KNOWN Map sessions: header/2",
|
|
288
|
+
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
275
289
|
"edge-italy -> core | CONTENT Map header: false new: After: 0 New: 1",
|
|
290
|
+
"edge-italy -> core | KNOWN Map sessions: header/3",
|
|
291
|
+
"edge-italy -> storage | CONTENT Map header: true new: After: 0 New: 1 | After: 0 New: 1",
|
|
276
292
|
"edge-italy -> client | CONTENT Map header: false new: After: 0 New: 1",
|
|
277
293
|
"core -> edge-italy | KNOWN Map sessions: header/3",
|
|
278
294
|
"core -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
279
|
-
"edge-italy -> core | KNOWN Map sessions: header/3",
|
|
280
295
|
"client -> edge-italy | KNOWN Map sessions: header/3",
|
|
281
|
-
"storage -> core | KNOWN Map sessions: header/3",
|
|
282
296
|
]
|
|
283
297
|
`);
|
|
284
298
|
});
|
|
@@ -335,6 +349,7 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
335
349
|
[
|
|
336
350
|
"client -> edge-italy | CONTENT Map header: false new: After: 0 New: 1",
|
|
337
351
|
"edge-italy -> client | KNOWN Map sessions: header/1",
|
|
352
|
+
"edge-italy -> storage | CONTENT Map header: false new: After: 0 New: 1",
|
|
338
353
|
]
|
|
339
354
|
`);
|
|
340
355
|
});
|
|
@@ -351,14 +366,11 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
351
366
|
|
|
352
367
|
const storage = setupTestNode();
|
|
353
368
|
|
|
354
|
-
|
|
355
|
-
syncServerName: "
|
|
369
|
+
client.connectToSyncServer({
|
|
370
|
+
syncServerName: "another-server",
|
|
356
371
|
syncServer: storage.node,
|
|
357
372
|
});
|
|
358
373
|
|
|
359
|
-
storagePeer.role = "storage";
|
|
360
|
-
storagePeer.priority = 100;
|
|
361
|
-
|
|
362
374
|
const group = coreServer.node.createGroup();
|
|
363
375
|
const map = group.createMap();
|
|
364
376
|
|
|
@@ -391,14 +403,14 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
391
403
|
}),
|
|
392
404
|
).toMatchInlineSnapshot(`
|
|
393
405
|
[
|
|
394
|
-
"client ->
|
|
395
|
-
"
|
|
396
|
-
"
|
|
406
|
+
"client -> core | LOAD Map sessions: empty",
|
|
407
|
+
"client -> another-server | LOAD Map sessions: empty",
|
|
408
|
+
"core -> storage-of-client | CONTENT Map header: false new: After: 1 New: 1",
|
|
409
|
+
"another-server -> client | CONTENT Group header: true new: After: 0 New: 3",
|
|
410
|
+
"another-server -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
411
|
+
"client -> another-server | KNOWN Group sessions: header/3",
|
|
397
412
|
"client -> core | LOAD Group sessions: header/3",
|
|
398
|
-
"
|
|
399
|
-
"core -> client | KNOWN Group sessions: header/3",
|
|
400
|
-
"client -> storage | KNOWN Map sessions: header/1",
|
|
401
|
-
"client -> core | LOAD Map sessions: header/1",
|
|
413
|
+
"client -> another-server | KNOWN Map sessions: header/1",
|
|
402
414
|
]
|
|
403
415
|
`);
|
|
404
416
|
|
|
@@ -452,12 +464,142 @@ describe("multiple clients syncing with the a cloud-like server mesh", () => {
|
|
|
452
464
|
[
|
|
453
465
|
"client -> another-server | LOAD Map sessions: empty",
|
|
454
466
|
"another-server -> client | CONTENT Group header: true new: After: 0 New: 3",
|
|
455
|
-
"client -> another-server | KNOWN Group sessions: header/3",
|
|
456
467
|
"another-server -> client | CONTENT Map header: true new: After: 0 New: 1",
|
|
468
|
+
"client -> another-server | KNOWN Group sessions: header/3",
|
|
457
469
|
"client -> another-server | KNOWN Map sessions: header/1",
|
|
458
470
|
]
|
|
459
471
|
`);
|
|
460
472
|
|
|
461
473
|
expect(mapOnClient.get("hello")).toEqual("world");
|
|
462
474
|
});
|
|
475
|
+
|
|
476
|
+
test("large coValue streaming from an edge to the core server and a client at the same time", async () => {
|
|
477
|
+
const edge = setupTestNode();
|
|
478
|
+
|
|
479
|
+
const { storage } = edge.addStorage({
|
|
480
|
+
ourName: "edge",
|
|
481
|
+
});
|
|
482
|
+
|
|
483
|
+
const group = edge.node.createGroup();
|
|
484
|
+
group.addMember("everyone", "writer");
|
|
485
|
+
|
|
486
|
+
const largeMap = group.createMap();
|
|
487
|
+
|
|
488
|
+
// Generate a large amount of data (about 100MB)
|
|
489
|
+
const dataSize = 1 * 200 * 1024;
|
|
490
|
+
const chunkSize = 1024; // 1KB chunks
|
|
491
|
+
const chunks = dataSize / chunkSize;
|
|
492
|
+
|
|
493
|
+
const value = Buffer.alloc(chunkSize, `value$`).toString("base64");
|
|
494
|
+
|
|
495
|
+
for (let i = 0; i < chunks; i++) {
|
|
496
|
+
const key = `key${i}`;
|
|
497
|
+
largeMap.set(key, value, "trusting");
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
await largeMap.core.waitForSync();
|
|
501
|
+
|
|
502
|
+
expect(
|
|
503
|
+
SyncMessagesLog.getMessages({
|
|
504
|
+
Group: group.core,
|
|
505
|
+
Map: largeMap.core,
|
|
506
|
+
}),
|
|
507
|
+
).toMatchInlineSnapshot(`
|
|
508
|
+
[
|
|
509
|
+
"edge -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
510
|
+
"edge -> storage | CONTENT Map header: true new: expectContentUntil: header/200",
|
|
511
|
+
"edge -> storage | CONTENT Map header: false new: After: 0 New: 73",
|
|
512
|
+
"edge -> storage | CONTENT Map header: false new: After: 73 New: 73",
|
|
513
|
+
"edge -> storage | CONTENT Map header: false new: After: 146 New: 54",
|
|
514
|
+
]
|
|
515
|
+
`);
|
|
516
|
+
|
|
517
|
+
edge.restart();
|
|
518
|
+
|
|
519
|
+
edge.connectToSyncServer({
|
|
520
|
+
syncServerName: "core",
|
|
521
|
+
ourName: "edge",
|
|
522
|
+
syncServer: mesh.coreServer.node,
|
|
523
|
+
});
|
|
524
|
+
edge.addStorage({
|
|
525
|
+
storage,
|
|
526
|
+
});
|
|
527
|
+
|
|
528
|
+
SyncMessagesLog.clear();
|
|
529
|
+
|
|
530
|
+
const client = setupTestNode();
|
|
531
|
+
|
|
532
|
+
client.connectToSyncServer({
|
|
533
|
+
syncServerName: "edge",
|
|
534
|
+
syncServer: edge.node,
|
|
535
|
+
});
|
|
536
|
+
|
|
537
|
+
client.addStorage({
|
|
538
|
+
ourName: "client",
|
|
539
|
+
});
|
|
540
|
+
|
|
541
|
+
const mapOnClient = await loadCoValueOrFail(client.node, largeMap.id);
|
|
542
|
+
|
|
543
|
+
await waitFor(() => {
|
|
544
|
+
expect(mapOnClient.core.knownState()).toEqual(largeMap.core.knownState());
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
expect(
|
|
548
|
+
SyncMessagesLog.getMessages({
|
|
549
|
+
Group: group.core,
|
|
550
|
+
Map: largeMap.core,
|
|
551
|
+
}),
|
|
552
|
+
).toMatchInlineSnapshot(`
|
|
553
|
+
[
|
|
554
|
+
"client -> storage | LOAD Map sessions: empty",
|
|
555
|
+
"storage -> client | KNOWN Map sessions: empty",
|
|
556
|
+
"client -> edge | LOAD Map sessions: empty",
|
|
557
|
+
"edge -> storage | LOAD Map sessions: empty",
|
|
558
|
+
"storage -> edge | CONTENT Group header: true new: After: 0 New: 5",
|
|
559
|
+
"edge -> core | LOAD Group sessions: header/5",
|
|
560
|
+
"storage -> edge | CONTENT Map header: true new: After: 0 New: 73 expectContentUntil: header/200",
|
|
561
|
+
"edge -> core | LOAD Map sessions: header/200",
|
|
562
|
+
"edge -> client | CONTENT Group header: true new: After: 0 New: 5",
|
|
563
|
+
"edge -> client | CONTENT Map header: true new: expectContentUntil: header/200",
|
|
564
|
+
"edge -> client | CONTENT Map header: false new: After: 0 New: 73",
|
|
565
|
+
"core -> storage | LOAD Group sessions: empty",
|
|
566
|
+
"storage -> core | KNOWN Group sessions: empty",
|
|
567
|
+
"core -> edge | KNOWN Group sessions: empty",
|
|
568
|
+
"core -> storage | LOAD Map sessions: empty",
|
|
569
|
+
"storage -> core | KNOWN Map sessions: empty",
|
|
570
|
+
"core -> edge | KNOWN Map sessions: empty",
|
|
571
|
+
"client -> edge | KNOWN Group sessions: header/5",
|
|
572
|
+
"client -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
573
|
+
"client -> edge | KNOWN Map sessions: header/0",
|
|
574
|
+
"client -> storage | CONTENT Map header: true new: expectContentUntil: header/200",
|
|
575
|
+
"client -> edge | KNOWN Map sessions: header/73",
|
|
576
|
+
"client -> storage | CONTENT Map header: false new: After: 0 New: 73",
|
|
577
|
+
"storage -> edge | CONTENT Map header: true new: After: 73 New: 73",
|
|
578
|
+
"edge -> client | CONTENT Map header: false new: After: 73 New: 73",
|
|
579
|
+
"edge -> core | CONTENT Group header: true new: After: 0 New: 5",
|
|
580
|
+
"edge -> core | CONTENT Map header: true new: expectContentUntil: header/200",
|
|
581
|
+
"edge -> core | CONTENT Map header: false new: After: 0 New: 73",
|
|
582
|
+
"edge -> core | CONTENT Map header: false new: After: 73 New: 73",
|
|
583
|
+
"client -> edge | KNOWN Map sessions: header/146",
|
|
584
|
+
"client -> storage | CONTENT Map header: false new: After: 73 New: 73",
|
|
585
|
+
"storage -> edge | CONTENT Map header: true new: After: 146 New: 54",
|
|
586
|
+
"edge -> core | CONTENT Map header: false new: After: 146 New: 54",
|
|
587
|
+
"edge -> client | CONTENT Map header: false new: After: 146 New: 54",
|
|
588
|
+
"core -> edge | KNOWN Group sessions: header/5",
|
|
589
|
+
"core -> storage | CONTENT Group header: true new: After: 0 New: 5",
|
|
590
|
+
"core -> edge | KNOWN Map sessions: header/0",
|
|
591
|
+
"core -> storage | CONTENT Map header: true new: expectContentUntil: header/200",
|
|
592
|
+
"core -> edge | KNOWN Map sessions: header/73",
|
|
593
|
+
"core -> storage | CONTENT Map header: false new: After: 0 New: 73",
|
|
594
|
+
"core -> edge | KNOWN Map sessions: header/146",
|
|
595
|
+
"core -> storage | CONTENT Map header: false new: After: 73 New: 73",
|
|
596
|
+
"core -> edge | KNOWN Map sessions: header/200",
|
|
597
|
+
"core -> storage | CONTENT Map header: false new: After: 146 New: 54",
|
|
598
|
+
"client -> edge | KNOWN Map sessions: header/200",
|
|
599
|
+
"client -> storage | CONTENT Map header: false new: After: 146 New: 54",
|
|
600
|
+
]
|
|
601
|
+
`);
|
|
602
|
+
|
|
603
|
+
expect(mapOnClient.core.knownState()).toEqual(largeMap.core.knownState());
|
|
604
|
+
});
|
|
463
605
|
});
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import { assert, beforeEach, describe, expect, test } from "vitest";
|
|
1
|
+
import { assert, beforeEach, describe, expect, test, vi } from "vitest";
|
|
2
2
|
import { expectMap } from "../coValue";
|
|
3
|
-
import { CO_VALUE_LOADING_CONFIG } from "../coValueCore/coValueCore";
|
|
4
|
-
import { WasmCrypto } from "../crypto/WasmCrypto";
|
|
5
3
|
import { RawCoMap } from "../exports";
|
|
6
4
|
import {
|
|
7
5
|
SyncMessagesLog,
|
|
6
|
+
TEST_NODE_CONFIG,
|
|
8
7
|
setupTestAccount,
|
|
9
8
|
setupTestNode,
|
|
10
9
|
waitFor,
|
|
11
10
|
} from "./testUtils";
|
|
12
11
|
|
|
13
|
-
|
|
12
|
+
// We want to simulate a real world communication that happens asynchronously
|
|
13
|
+
TEST_NODE_CONFIG.withAsyncPeers = true;
|
|
14
|
+
|
|
15
|
+
let jazzCloud: ReturnType<typeof setupTestNode>;
|
|
14
16
|
|
|
15
17
|
beforeEach(async () => {
|
|
16
18
|
SyncMessagesLog.clear();
|
|
@@ -38,12 +40,12 @@ describe("peer reconciliation", () => {
|
|
|
38
40
|
).toMatchInlineSnapshot(`
|
|
39
41
|
[
|
|
40
42
|
"client -> server | LOAD Group sessions: header/3",
|
|
41
|
-
"server -> client | KNOWN Group sessions: empty",
|
|
42
43
|
"client -> server | LOAD Map sessions: header/1",
|
|
43
|
-
"server -> client | KNOWN Map sessions: empty",
|
|
44
44
|
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
45
|
-
"server -> client | KNOWN Group sessions: header/3",
|
|
46
45
|
"client -> server | CONTENT Map header: true new: After: 0 New: 1",
|
|
46
|
+
"server -> client | KNOWN Group sessions: empty",
|
|
47
|
+
"server -> client | KNOWN Map sessions: empty",
|
|
48
|
+
"server -> client | KNOWN Group sessions: header/3",
|
|
47
49
|
"server -> client | KNOWN Map sessions: header/1",
|
|
48
50
|
]
|
|
49
51
|
`);
|
|
@@ -87,10 +89,10 @@ describe("peer reconciliation", () => {
|
|
|
87
89
|
).toMatchInlineSnapshot(`
|
|
88
90
|
[
|
|
89
91
|
"client -> server | LOAD Group sessions: header/3",
|
|
90
|
-
"server -> client | KNOWN Group sessions: header/3",
|
|
91
92
|
"client -> server | LOAD Map sessions: header/2",
|
|
92
|
-
"server -> client | KNOWN Map sessions: header/1",
|
|
93
93
|
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
94
|
+
"server -> client | KNOWN Group sessions: header/3",
|
|
95
|
+
"server -> client | KNOWN Map sessions: header/1",
|
|
94
96
|
"server -> client | KNOWN Map sessions: header/2",
|
|
95
97
|
]
|
|
96
98
|
`);
|
|
@@ -142,11 +144,12 @@ describe("peer reconciliation", () => {
|
|
|
142
144
|
).toMatchInlineSnapshot(`
|
|
143
145
|
[
|
|
144
146
|
"client -> server | LOAD Group sessions: header/3",
|
|
147
|
+
"client -> server | LOAD Map sessions: header/2",
|
|
145
148
|
"client -> server | LOAD Group sessions: header/3",
|
|
146
|
-
"server -> client | KNOWN Group sessions: header/3",
|
|
147
149
|
"client -> server | LOAD Map sessions: header/2",
|
|
148
|
-
"server -> client | KNOWN Map sessions: header/1",
|
|
149
150
|
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
151
|
+
"server -> client | KNOWN Group sessions: header/3",
|
|
152
|
+
"server -> client | KNOWN Map sessions: header/1",
|
|
150
153
|
"server -> client | KNOWN Map sessions: header/2",
|
|
151
154
|
]
|
|
152
155
|
`);
|
|
@@ -188,20 +191,21 @@ describe("peer reconciliation", () => {
|
|
|
188
191
|
).toMatchInlineSnapshot(`
|
|
189
192
|
[
|
|
190
193
|
"client -> server | LOAD Group sessions: header/3",
|
|
194
|
+
"client -> server | LOAD Map sessions: header/1",
|
|
195
|
+
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
191
196
|
"server -> client | KNOWN Group sessions: empty",
|
|
197
|
+
"server -> client | KNOWN Map sessions: empty",
|
|
198
|
+
"client -> server | LOAD Group sessions: header/3",
|
|
192
199
|
"client -> server | LOAD Map sessions: header/2",
|
|
200
|
+
"server -> client | KNOWN Group sessions: empty",
|
|
193
201
|
"server -> client | KNOWN Map sessions: empty",
|
|
194
202
|
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
195
203
|
"server -> client | KNOWN CORRECTION Map sessions: empty",
|
|
196
204
|
"client -> server | CONTENT Map header: true new: After: 0 New: 2",
|
|
197
205
|
"server -> client | LOAD Group sessions: empty",
|
|
198
|
-
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
199
206
|
"server -> client | KNOWN Map sessions: empty",
|
|
207
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
200
208
|
"server -> client | KNOWN Group sessions: header/3",
|
|
201
|
-
"client -> server | LOAD Group sessions: header/3",
|
|
202
|
-
"server -> client | KNOWN Group sessions: header/3",
|
|
203
|
-
"client -> server | LOAD Map sessions: header/2",
|
|
204
|
-
"server -> client | KNOWN Map sessions: header/2",
|
|
205
209
|
]
|
|
206
210
|
`);
|
|
207
211
|
});
|
|
@@ -248,36 +252,42 @@ describe("peer reconciliation", () => {
|
|
|
248
252
|
).toMatchInlineSnapshot(`
|
|
249
253
|
[
|
|
250
254
|
"client -> server | LOAD Account sessions: header/4",
|
|
251
|
-
"server -> client | KNOWN Account sessions: empty",
|
|
252
255
|
"client -> server | LOAD ProfileGroup sessions: header/5",
|
|
253
|
-
"server -> client | KNOWN ProfileGroup sessions: empty",
|
|
254
256
|
"client -> server | LOAD Profile sessions: header/1",
|
|
255
|
-
"server -> client | KNOWN Profile sessions: empty",
|
|
256
257
|
"client -> server | LOAD Group sessions: header/3",
|
|
258
|
+
"client -> server | LOAD Map sessions: header/1",
|
|
259
|
+
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
260
|
+
"server -> client | KNOWN Account sessions: empty",
|
|
261
|
+
"server -> client | KNOWN ProfileGroup sessions: empty",
|
|
262
|
+
"server -> client | KNOWN Profile sessions: empty",
|
|
257
263
|
"server -> client | KNOWN Group sessions: empty",
|
|
264
|
+
"server -> client | KNOWN Map sessions: empty",
|
|
265
|
+
"client -> server | LOAD Account sessions: header/4",
|
|
266
|
+
"client -> server | LOAD ProfileGroup sessions: header/5",
|
|
267
|
+
"client -> server | LOAD Profile sessions: header/1",
|
|
268
|
+
"client -> server | LOAD Group sessions: header/3",
|
|
258
269
|
"client -> server | LOAD Map sessions: header/2",
|
|
270
|
+
"server -> client | KNOWN Account sessions: empty",
|
|
271
|
+
"server -> client | KNOWN ProfileGroup sessions: empty",
|
|
272
|
+
"server -> client | KNOWN Profile sessions: empty",
|
|
273
|
+
"server -> client | KNOWN Group sessions: empty",
|
|
259
274
|
"server -> client | KNOWN Map sessions: empty",
|
|
275
|
+
"client -> server | CONTENT ProfileGroup header: true new: After: 0 New: 5",
|
|
276
|
+
"client -> server | CONTENT Profile header: true new: After: 0 New: 1",
|
|
260
277
|
"client -> server | CONTENT Map header: false new: After: 1 New: 1",
|
|
261
|
-
"server -> client | KNOWN CORRECTION Map sessions: empty",
|
|
262
|
-
"client -> server | CONTENT Map header: true new: After: 0 New: 2",
|
|
263
278
|
"server -> client | LOAD Account sessions: empty",
|
|
279
|
+
"server -> client | KNOWN ProfileGroup sessions: empty",
|
|
280
|
+
"server -> client | KNOWN Profile sessions: empty",
|
|
281
|
+
"server -> client | KNOWN CORRECTION Map sessions: empty",
|
|
264
282
|
"client -> server | CONTENT Account header: true new: After: 0 New: 4",
|
|
265
|
-
"
|
|
266
|
-
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
267
|
-
"server -> client | KNOWN Map sessions: empty",
|
|
283
|
+
"client -> server | CONTENT Map header: true new: After: 0 New: 2",
|
|
268
284
|
"server -> client | KNOWN Account sessions: header/4",
|
|
285
|
+
"server -> client | KNOWN ProfileGroup sessions: header/5",
|
|
286
|
+
"server -> client | KNOWN Profile sessions: header/1",
|
|
287
|
+
"server -> client | LOAD Group sessions: empty",
|
|
269
288
|
"server -> client | KNOWN Map sessions: empty",
|
|
289
|
+
"client -> server | CONTENT Group header: true new: After: 0 New: 3",
|
|
270
290
|
"server -> client | KNOWN Group sessions: header/3",
|
|
271
|
-
"client -> server | LOAD Account sessions: header/4",
|
|
272
|
-
"server -> client | KNOWN Account sessions: header/4",
|
|
273
|
-
"client -> server | LOAD ProfileGroup sessions: header/5",
|
|
274
|
-
"server -> client | KNOWN ProfileGroup sessions: empty",
|
|
275
|
-
"client -> server | LOAD Profile sessions: header/1",
|
|
276
|
-
"server -> client | KNOWN Profile sessions: empty",
|
|
277
|
-
"client -> server | LOAD Group sessions: header/3",
|
|
278
|
-
"server -> client | KNOWN Group sessions: header/3",
|
|
279
|
-
"client -> server | LOAD Map sessions: header/2",
|
|
280
|
-
"server -> client | KNOWN Map sessions: header/2",
|
|
281
291
|
]
|
|
282
292
|
`);
|
|
283
293
|
});
|