@fluid-experimental/tree 0.59.2001 → 0.59.3000
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/.eslintrc.js +2 -0
- package/.vscode/SharedTree.code-workspace +15 -0
- package/.vscode/settings.json +6 -0
- package/dist/ChangeCompression.js +9 -9
- package/dist/ChangeCompression.js.map +1 -1
- package/dist/ChangeTypes.d.ts +1 -6
- package/dist/ChangeTypes.d.ts.map +1 -1
- package/dist/ChangeTypes.js +5 -5
- package/dist/ChangeTypes.js.map +1 -1
- package/dist/Checkout.js +14 -14
- package/dist/Checkout.js.map +1 -1
- package/dist/Common.d.ts +21 -3
- package/dist/Common.d.ts.map +1 -1
- package/dist/Common.js +29 -4
- package/dist/Common.js.map +1 -1
- package/dist/EditLog.js +26 -25
- package/dist/EditLog.js.map +1 -1
- package/dist/EditUtilities.js +17 -17
- package/dist/EditUtilities.js.map +1 -1
- package/dist/Forest.js +31 -31
- package/dist/Forest.js.map +1 -1
- package/dist/HistoryEditFactory.js +9 -9
- package/dist/HistoryEditFactory.js.map +1 -1
- package/dist/IdConversion.js +9 -9
- package/dist/IdConversion.js.map +1 -1
- package/dist/Identifiers.d.ts +4 -0
- package/dist/Identifiers.d.ts.map +1 -1
- package/dist/Identifiers.js.map +1 -1
- package/dist/LogViewer.d.ts +1 -5
- package/dist/LogViewer.d.ts.map +1 -1
- package/dist/LogViewer.js +11 -19
- package/dist/LogViewer.js.map +1 -1
- package/dist/MergeHealth.js +2 -2
- package/dist/MergeHealth.js.map +1 -1
- package/dist/NodeIdUtilities.js +2 -2
- package/dist/NodeIdUtilities.js.map +1 -1
- package/dist/PayloadUtilities.js +1 -1
- package/dist/PayloadUtilities.js.map +1 -1
- package/dist/RevisionValueCache.d.ts +13 -10
- package/dist/RevisionValueCache.d.ts.map +1 -1
- package/dist/RevisionValueCache.js +14 -11
- package/dist/RevisionValueCache.js.map +1 -1
- package/dist/RevisionView.js +4 -4
- package/dist/RevisionView.js.map +1 -1
- package/dist/SerializationUtilities.js +4 -4
- package/dist/SerializationUtilities.js.map +1 -1
- package/dist/SharedTree.d.ts +93 -31
- package/dist/SharedTree.d.ts.map +1 -1
- package/dist/SharedTree.js +160 -131
- package/dist/SharedTree.js.map +1 -1
- package/dist/SharedTreeEncoder.d.ts +3 -3
- package/dist/SharedTreeEncoder.d.ts.map +1 -1
- package/dist/SharedTreeEncoder.js +36 -36
- package/dist/SharedTreeEncoder.js.map +1 -1
- package/dist/StringInterner.js +1 -1
- package/dist/StringInterner.js.map +1 -1
- package/dist/Summary.js +1 -1
- package/dist/Summary.js.map +1 -1
- package/dist/SummaryBackCompatibility.js +8 -8
- package/dist/SummaryBackCompatibility.js.map +1 -1
- package/dist/Transaction.js +1 -1
- package/dist/Transaction.js.map +1 -1
- package/dist/TransactionInternal.js +17 -17
- package/dist/TransactionInternal.js.map +1 -1
- package/dist/TreeCompressor.d.ts.map +1 -1
- package/dist/TreeCompressor.js +6 -8
- package/dist/TreeCompressor.js.map +1 -1
- package/dist/TreeNodeHandle.js +4 -4
- package/dist/TreeNodeHandle.js.map +1 -1
- package/dist/TreeView.js +7 -7
- package/dist/TreeView.js.map +1 -1
- package/dist/TreeViewUtilities.js +2 -2
- package/dist/TreeViewUtilities.js.map +1 -1
- package/dist/UndoRedoHandler.js +1 -1
- package/dist/UndoRedoHandler.js.map +1 -1
- package/dist/UuidUtilities.d.ts +30 -0
- package/dist/UuidUtilities.d.ts.map +1 -0
- package/dist/UuidUtilities.js +106 -0
- package/dist/UuidUtilities.js.map +1 -0
- package/dist/id-compressor/AppendOnlySortedMap.d.ts +52 -28
- package/dist/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
- package/dist/id-compressor/AppendOnlySortedMap.js +167 -90
- package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/dist/id-compressor/IdCompressor.d.ts +43 -42
- package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
- package/dist/id-compressor/IdCompressor.js +179 -177
- package/dist/id-compressor/IdCompressor.js.map +1 -1
- package/dist/id-compressor/IdRange.js +1 -1
- package/dist/id-compressor/IdRange.js.map +1 -1
- package/dist/id-compressor/NumericUuid.d.ts +6 -14
- package/dist/id-compressor/NumericUuid.d.ts.map +1 -1
- package/dist/id-compressor/NumericUuid.js +15 -76
- package/dist/id-compressor/NumericUuid.js.map +1 -1
- package/dist/id-compressor/SessionIdNormalizer.d.ts +122 -0
- package/dist/id-compressor/SessionIdNormalizer.d.ts.map +1 -0
- package/dist/id-compressor/SessionIdNormalizer.js +418 -0
- package/dist/id-compressor/SessionIdNormalizer.js.map +1 -0
- package/dist/id-compressor/persisted-types/0.0.1.d.ts +6 -13
- package/dist/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
- package/dist/id-compressor/persisted-types/0.0.1.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/persisted-types/0.1.1.d.ts +1 -6
- package/dist/persisted-types/0.1.1.d.ts.map +1 -1
- package/dist/persisted-types/0.1.1.js +3 -3
- package/dist/persisted-types/0.1.1.js.map +1 -1
- package/lib/ChangeTypes.d.ts +1 -6
- package/lib/ChangeTypes.d.ts.map +1 -1
- package/lib/Checkout.js.map +1 -1
- package/lib/Common.d.ts +21 -3
- package/lib/Common.d.ts.map +1 -1
- package/lib/Common.js +25 -3
- package/lib/Common.js.map +1 -1
- package/lib/EditLog.js +2 -1
- package/lib/EditLog.js.map +1 -1
- package/lib/EditUtilities.js.map +1 -1
- package/lib/Forest.js.map +1 -1
- package/lib/HistoryEditFactory.js.map +1 -1
- package/lib/Identifiers.d.ts +4 -0
- package/lib/Identifiers.d.ts.map +1 -1
- package/lib/Identifiers.js.map +1 -1
- package/lib/LogViewer.d.ts +1 -5
- package/lib/LogViewer.d.ts.map +1 -1
- package/lib/LogViewer.js +5 -13
- package/lib/LogViewer.js.map +1 -1
- package/lib/MergeHealth.js.map +1 -1
- package/lib/NodeIdUtilities.js.map +1 -1
- package/lib/RevisionValueCache.d.ts +13 -10
- package/lib/RevisionValueCache.d.ts.map +1 -1
- package/lib/RevisionValueCache.js +10 -7
- package/lib/RevisionValueCache.js.map +1 -1
- package/lib/RevisionView.js.map +1 -1
- package/lib/SharedTree.d.ts +93 -31
- package/lib/SharedTree.d.ts.map +1 -1
- package/lib/SharedTree.js +107 -78
- package/lib/SharedTree.js.map +1 -1
- package/lib/SharedTreeEncoder.d.ts +3 -3
- package/lib/SharedTreeEncoder.d.ts.map +1 -1
- package/lib/SharedTreeEncoder.js +4 -4
- package/lib/SharedTreeEncoder.js.map +1 -1
- package/lib/StringInterner.js.map +1 -1
- package/lib/Summary.js.map +1 -1
- package/lib/TreeCompressor.d.ts.map +1 -1
- package/lib/TreeCompressor.js +1 -3
- package/lib/TreeCompressor.js.map +1 -1
- package/lib/TreeNodeHandle.js.map +1 -1
- package/lib/TreeView.js.map +1 -1
- package/lib/TreeViewUtilities.js.map +1 -1
- package/lib/UuidUtilities.d.ts +30 -0
- package/lib/UuidUtilities.d.ts.map +1 -0
- package/lib/UuidUtilities.js +98 -0
- package/lib/UuidUtilities.js.map +1 -0
- package/lib/id-compressor/AppendOnlySortedMap.d.ts +52 -28
- package/lib/id-compressor/AppendOnlySortedMap.d.ts.map +1 -1
- package/lib/id-compressor/AppendOnlySortedMap.js +165 -88
- package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/lib/id-compressor/IdCompressor.d.ts +43 -42
- package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
- package/lib/id-compressor/IdCompressor.js +97 -95
- package/lib/id-compressor/IdCompressor.js.map +1 -1
- package/lib/id-compressor/NumericUuid.d.ts +6 -14
- package/lib/id-compressor/NumericUuid.d.ts.map +1 -1
- package/lib/id-compressor/NumericUuid.js +11 -70
- package/lib/id-compressor/NumericUuid.js.map +1 -1
- package/lib/id-compressor/SessionIdNormalizer.d.ts +122 -0
- package/lib/id-compressor/SessionIdNormalizer.d.ts.map +1 -0
- package/lib/id-compressor/SessionIdNormalizer.js +414 -0
- package/lib/id-compressor/SessionIdNormalizer.js.map +1 -0
- package/lib/id-compressor/persisted-types/0.0.1.d.ts +6 -13
- package/lib/id-compressor/persisted-types/0.0.1.d.ts.map +1 -1
- package/lib/id-compressor/persisted-types/0.0.1.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/persisted-types/0.1.1.d.ts +1 -6
- package/lib/persisted-types/0.1.1.d.ts.map +1 -1
- package/lib/persisted-types/0.1.1.js.map +1 -1
- package/lib/test/AppendOnlySortedMap.perf.tests.d.ts +6 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.d.ts.map +1 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.js +49 -0
- package/lib/test/AppendOnlySortedMap.perf.tests.js.map +1 -0
- package/lib/test/AppendOnlySortedMap.tests.js +56 -14
- package/lib/test/AppendOnlySortedMap.tests.js.map +1 -1
- package/lib/test/Checkout.tests.js +2 -2
- package/lib/test/Checkout.tests.js.map +1 -1
- package/lib/test/Forest.tests.js.map +1 -1
- package/lib/test/IdCompressor.perf.tests.js +8 -2
- package/lib/test/IdCompressor.perf.tests.js.map +1 -1
- package/lib/test/IdCompressor.tests.js +75 -24
- package/lib/test/IdCompressor.tests.js.map +1 -1
- package/lib/test/LogViewer.tests.js +3 -5
- package/lib/test/LogViewer.tests.js.map +1 -1
- package/lib/test/NumericUuid.perf.tests.js +4 -4
- package/lib/test/NumericUuid.perf.tests.js.map +1 -1
- package/lib/test/NumericUuid.tests.js +5 -4
- package/lib/test/NumericUuid.tests.js.map +1 -1
- package/lib/test/RevisionValueCache.tests.js.map +1 -1
- package/lib/test/RevisionView.tests.js.map +1 -1
- package/lib/test/SessionIdNormalizer.tests.d.ts +6 -0
- package/lib/test/SessionIdNormalizer.tests.d.ts.map +1 -0
- package/lib/test/SessionIdNormalizer.tests.js +299 -0
- package/lib/test/SessionIdNormalizer.tests.js.map +1 -0
- package/lib/test/Summary.tests.js +1 -1
- package/lib/test/Summary.tests.js.map +1 -1
- package/lib/test/TreeCompression.tests.js +1 -1
- package/lib/test/TreeCompression.tests.js.map +1 -1
- package/lib/test/Virtualization.tests.js +1 -1
- package/lib/test/Virtualization.tests.js.map +1 -1
- package/lib/test/fuzz/Generators.d.ts +3 -14
- package/lib/test/fuzz/Generators.d.ts.map +1 -1
- package/lib/test/fuzz/Generators.js +60 -151
- package/lib/test/fuzz/Generators.js.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +10 -7
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.js +94 -104
- package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
- package/lib/test/fuzz/Types.d.ts +2 -9
- package/lib/test/fuzz/Types.d.ts.map +1 -1
- package/lib/test/fuzz/Types.js +1 -1
- package/lib/test/fuzz/Types.js.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts +57 -11
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.js +112 -98
- package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.js +2 -1
- package/lib/test/utilities/PendingLocalStateTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeTests.js +30 -1
- package/lib/test/utilities/SharedTreeTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.js +20 -0
- package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
- package/lib/test/utilities/SummaryLoadPerfTests.d.ts.map +1 -1
- package/lib/test/utilities/SummaryLoadPerfTests.js +6 -3
- package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -1
- package/lib/test/utilities/TestNode.js.map +1 -1
- package/lib/test/utilities/TestUtilities.d.ts +9 -1
- package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/TestUtilities.js +27 -13
- package/lib/test/utilities/TestUtilities.js.map +1 -1
- package/package.json +19 -17
- package/src/Common.ts +42 -4
- package/src/EditLog.ts +1 -1
- package/src/Identifiers.ts +5 -0
- package/src/LogViewer.ts +4 -20
- package/src/RevisionValueCache.ts +11 -8
- package/src/SharedTree.ts +222 -75
- package/src/SharedTreeEncoder.ts +17 -11
- package/src/TreeCompressor.ts +2 -4
- package/src/UuidUtilities.ts +123 -0
- package/src/id-compressor/AppendOnlySortedMap.ts +183 -94
- package/src/id-compressor/IdCompressor.ts +144 -132
- package/src/id-compressor/NumericUuid.ts +11 -80
- package/src/id-compressor/SessionIdNormalizer.ts +497 -0
- package/src/id-compressor/persisted-types/0.0.1.ts +12 -15
- package/src/index.ts +5 -0
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { expect } from 'chai';
|
|
6
6
|
import { v4, v5 } from 'uuid';
|
|
7
|
+
import { take } from '@fluid-internal/stochastic-test-utils';
|
|
7
8
|
import { IdCompressor, isFinalId, isLocalId, hasOngoingSession, legacySharedTreeInitialTreeId, } from '../id-compressor/IdCompressor';
|
|
8
9
|
import { assert, assertNotUndefined, fail } from '../Common';
|
|
9
|
-
import {
|
|
10
|
+
import { createSessionId, incrementUuid, numericUuidFromStableId, stableIdFromNumericUuid, } from '../id-compressor/NumericUuid';
|
|
10
11
|
import { getIds } from '../id-compressor/IdRange';
|
|
11
|
-
import {
|
|
12
|
+
import { assertIsStableId, generateStableId, isStableId } from '../UuidUtilities';
|
|
13
|
+
import { createCompressor, performFuzzActions, sessionIds, IdCompressorTestNetwork, Client, DestinationClient, MetaClient, expectSerializes, roundtrip, sessionNumericUuids, makeOpGenerator, attributionIds, } from './utilities/IdCompressorTestUtilities';
|
|
12
14
|
import { expectDefined } from './utilities/TestCommon';
|
|
13
15
|
describe('IdCompressor', () => {
|
|
14
16
|
it('detects invalid cluster sizes', () => {
|
|
@@ -174,12 +176,51 @@ describe('IdCompressor', () => {
|
|
|
174
176
|
expect(returnedIds).to.deep.equal(ids);
|
|
175
177
|
});
|
|
176
178
|
});
|
|
177
|
-
it('
|
|
178
|
-
const compressor = createCompressor(Client.Client1
|
|
179
|
+
it('has default attribution ID', () => {
|
|
180
|
+
const compressor = createCompressor(Client.Client1);
|
|
181
|
+
expectDefined(compressor.attributionId);
|
|
182
|
+
});
|
|
183
|
+
it('correctly uses explicit attribution ID', () => {
|
|
184
|
+
const attributionId = generateStableId();
|
|
185
|
+
const compressor = createCompressor(Client.Client1, 5, attributionId);
|
|
186
|
+
expect(compressor.attributionId).to.equal(attributionId);
|
|
179
187
|
const range1 = compressor.takeNextCreationRange();
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
188
|
+
expect(compressor.attributionId).to.equal(attributionId);
|
|
189
|
+
expect(range1.attributionId).to.equal(attributionId);
|
|
190
|
+
});
|
|
191
|
+
it('only sends attribution ID until the first ID is allocated', () => {
|
|
192
|
+
const compressor = createCompressor(Client.Client1, 5, generateStableId());
|
|
193
|
+
let range = compressor.takeNextCreationRange();
|
|
194
|
+
expectDefined(range.attributionId);
|
|
195
|
+
range = compressor.takeNextCreationRange();
|
|
196
|
+
expectDefined(range.attributionId);
|
|
197
|
+
compressor.generateCompressedId();
|
|
198
|
+
range = compressor.takeNextCreationRange();
|
|
199
|
+
expectDefined(range.attributionId);
|
|
200
|
+
range = compressor.takeNextCreationRange();
|
|
201
|
+
expect(range.attributionId).to.be.undefined;
|
|
202
|
+
});
|
|
203
|
+
it('does not send default attribution ID', () => {
|
|
204
|
+
const compressor = createCompressor(Client.Client1);
|
|
205
|
+
const range = compressor.takeNextCreationRange();
|
|
206
|
+
expect(range.attributionId).to.be.undefined;
|
|
207
|
+
});
|
|
208
|
+
it('attributes correctly after unification', () => {
|
|
209
|
+
const compressor1 = createCompressor(Client.Client1, undefined, attributionIds.get(Client.Client1));
|
|
210
|
+
const compressor2 = createCompressor(Client.Client2, undefined, attributionIds.get(Client.Client2));
|
|
211
|
+
const id1 = compressor1.generateCompressedId('override');
|
|
212
|
+
const id2 = compressor2.generateCompressedId('override');
|
|
213
|
+
const range1 = compressor1.takeNextCreationRange();
|
|
214
|
+
const range2 = compressor2.takeNextCreationRange();
|
|
215
|
+
compressor1.finalizeCreationRange(range2); // 2 gets sequenced first
|
|
216
|
+
compressor2.finalizeCreationRange(range2);
|
|
217
|
+
compressor1.finalizeCreationRange(range1);
|
|
218
|
+
compressor2.finalizeCreationRange(range1);
|
|
219
|
+
expect(compressor1.normalizeToOpSpace(id1)).to.equal(compressor2.normalizeToOpSpace(id2));
|
|
220
|
+
expect(compressor1.attributeId(id1)).to.equal(attributionIds.get(Client.Client2));
|
|
221
|
+
expect(compressor1.attributeId(compressor1.recompress(compressor2.decompress(id2)))).to.equal(attributionIds.get(Client.Client2));
|
|
222
|
+
expect(compressor2.attributeId(compressor2.recompress(compressor1.decompress(id1)))).to.equal(attributionIds.get(Client.Client2));
|
|
223
|
+
expect(compressor2.attributeId(id2)).to.equal(attributionIds.get(Client.Client2));
|
|
183
224
|
});
|
|
184
225
|
describe('can produce a creation range', () => {
|
|
185
226
|
const tests = [
|
|
@@ -467,8 +508,8 @@ describe('IdCompressor', () => {
|
|
|
467
508
|
expect(serializedNoSession.clusters.length).to.equal(0, 'reserved cluster should not be serialized');
|
|
468
509
|
});
|
|
469
510
|
it('correctly deserializes and resumes a session', () => {
|
|
470
|
-
const compressor1 = createCompressor(Client.Client1, undefined, Client.Client1);
|
|
471
|
-
const compressor2 = createCompressor(Client.Client2, undefined, Client.Client2);
|
|
511
|
+
const compressor1 = createCompressor(Client.Client1, undefined, attributionIds.get(Client.Client1));
|
|
512
|
+
const compressor2 = createCompressor(Client.Client2, undefined, attributionIds.get(Client.Client2));
|
|
472
513
|
compressor1.generateCompressedId();
|
|
473
514
|
const creationRange = compressor1.takeNextCreationRange();
|
|
474
515
|
compressor1.finalizeCreationRange(creationRange);
|
|
@@ -482,6 +523,16 @@ describe('IdCompressor', () => {
|
|
|
482
523
|
expect(IdCompressor.deserialize(compressor1.serialize(false), createSessionId()).equals(IdCompressor.deserialize(compressor2.serialize(false), createSessionId()), false // don't compare local state
|
|
483
524
|
)).to.be.true;
|
|
484
525
|
});
|
|
526
|
+
it('can serialize local state with attribution but no IDs', () => {
|
|
527
|
+
// This is a regression test for the scenario in which an ID compressor sends its first range, which
|
|
528
|
+
// includes its attribution ID, but has made no IDs. An incorrect optimization when serializing had
|
|
529
|
+
// omitted local state if no IDs had been allocated, but then also dropped the `sentAttribution` flag
|
|
530
|
+
const compressor = createCompressor(Client.Client1, undefined, attributionIds.get(Client.Client1));
|
|
531
|
+
const range = compressor.takeNextCreationRange();
|
|
532
|
+
expect(range.ids).to.be.undefined;
|
|
533
|
+
expect(range.attributionId).to.equal(attributionIds.get(Client.Client1));
|
|
534
|
+
expectSerializes(compressor);
|
|
535
|
+
});
|
|
485
536
|
});
|
|
486
537
|
// No validation, as these leave the network in a broken state
|
|
487
538
|
describeNetworkNoValidation('detects UUID collision', (itNetwork) => {
|
|
@@ -526,16 +577,16 @@ describe('IdCompressor', () => {
|
|
|
526
577
|
const compressor = network.getCompressor(Client.Client1);
|
|
527
578
|
network.allocateAndSendIds(Client.Client1, 1);
|
|
528
579
|
const id = network.getIdLog(Client.Client1)[0].id;
|
|
529
|
-
expect(compressor.attributeId(id)).to.equal(Client.Client1);
|
|
580
|
+
expect(compressor.attributeId(id)).to.equal(attributionIds.get(Client.Client1));
|
|
530
581
|
network.deliverOperations(Client.Client1);
|
|
531
|
-
expect(compressor.attributeId(id)).to.equal(Client.Client1);
|
|
582
|
+
expect(compressor.attributeId(id)).to.equal(attributionIds.get(Client.Client1));
|
|
532
583
|
});
|
|
533
584
|
itNetwork('final IDs from a remote session', (network) => {
|
|
534
585
|
const compressor = network.getCompressor(Client.Client1);
|
|
535
586
|
network.allocateAndSendIds(Client.Client2, 1);
|
|
536
587
|
network.deliverOperations(DestinationClient.All);
|
|
537
588
|
const id = network.getSequencedIdLog(Client.Client1)[0].id;
|
|
538
|
-
expect(compressor.attributeId(id)).to.equal(Client.Client2);
|
|
589
|
+
expect(compressor.attributeId(id)).to.equal(attributionIds.get(Client.Client2));
|
|
539
590
|
});
|
|
540
591
|
itNetwork('final IDs from multiple remote sessions', 1, (network) => {
|
|
541
592
|
const compressor = network.getCompressor(Client.Client1);
|
|
@@ -548,12 +599,12 @@ describe('IdCompressor', () => {
|
|
|
548
599
|
network.allocateAndSendIds(Client.Client3, compressor.clusterCapacity);
|
|
549
600
|
network.deliverOperations(DestinationClient.All);
|
|
550
601
|
const log = network.getSequencedIdLog(Client.Client1);
|
|
551
|
-
expect(compressor.attributeId(log[0].id)).to.equal(Client.Client1);
|
|
552
|
-
expect(compressor.attributeId(log[1].id)).to.equal(Client.Client2);
|
|
553
|
-
expect(compressor.attributeId(log[2].id)).to.equal(Client.Client3);
|
|
554
|
-
expect(compressor.attributeId(log[3].id)).to.equal(Client.Client1);
|
|
555
|
-
expect(compressor.attributeId(log[4].id)).to.equal(Client.Client2);
|
|
556
|
-
expect(compressor.attributeId(log[5].id)).to.equal(Client.Client3);
|
|
602
|
+
expect(compressor.attributeId(log[0].id)).to.equal(attributionIds.get(Client.Client1));
|
|
603
|
+
expect(compressor.attributeId(log[1].id)).to.equal(attributionIds.get(Client.Client2));
|
|
604
|
+
expect(compressor.attributeId(log[2].id)).to.equal(attributionIds.get(Client.Client3));
|
|
605
|
+
expect(compressor.attributeId(log[3].id)).to.equal(attributionIds.get(Client.Client1));
|
|
606
|
+
expect(compressor.attributeId(log[4].id)).to.equal(attributionIds.get(Client.Client2));
|
|
607
|
+
expect(compressor.attributeId(log[5].id)).to.equal(attributionIds.get(Client.Client3));
|
|
557
608
|
});
|
|
558
609
|
itNetwork('unified IDs', (network) => {
|
|
559
610
|
const override = 'override';
|
|
@@ -561,14 +612,14 @@ describe('IdCompressor', () => {
|
|
|
561
612
|
for (const [client, compressor] of allTargets) {
|
|
562
613
|
network.allocateAndSendIds(client, 1, { 0: override });
|
|
563
614
|
for (const { id } of network.getIdLog(client)) {
|
|
564
|
-
expect(compressor.attributeId(id)).to.equal(client);
|
|
615
|
+
expect(compressor.attributeId(id)).to.equal(attributionIds.get(client));
|
|
565
616
|
}
|
|
566
617
|
}
|
|
567
618
|
network.deliverOperations(DestinationClient.All);
|
|
568
619
|
const firstTarget = allTargets[0][0];
|
|
569
620
|
for (const [client, compressor] of allTargets) {
|
|
570
621
|
for (const { id } of network.getIdLog(client)) {
|
|
571
|
-
expect(compressor.attributeId(id)).to.equal(firstTarget);
|
|
622
|
+
expect(compressor.attributeId(id)).to.equal(attributionIds.get(firstTarget));
|
|
572
623
|
}
|
|
573
624
|
}
|
|
574
625
|
});
|
|
@@ -775,7 +826,8 @@ describe('IdCompressor', () => {
|
|
|
775
826
|
});
|
|
776
827
|
});
|
|
777
828
|
itNetwork('produces consistent IDs with large fuzz input', (network) => {
|
|
778
|
-
|
|
829
|
+
const generator = take(1000, makeOpGenerator({ includeOverrides: true }));
|
|
830
|
+
performFuzzActions(generator, network, 1984, undefined, true, (network) => network.assertNetworkState());
|
|
779
831
|
network.deliverOperations(DestinationClient.All);
|
|
780
832
|
});
|
|
781
833
|
itNetwork('can set the cluster size via constructor', 2, (network) => {
|
|
@@ -1015,7 +1067,8 @@ describe('IdCompressor', () => {
|
|
|
1015
1067
|
expectSequencedLogsAlign(network, Client.Client1, Client.Client2);
|
|
1016
1068
|
});
|
|
1017
1069
|
itNetwork('can serialize after a large fuzz input', 3, (network) => {
|
|
1018
|
-
|
|
1070
|
+
const generator = take(1000, makeOpGenerator({ includeOverrides: true }));
|
|
1071
|
+
performFuzzActions(generator, network, Math.PI, undefined, true, (network) => {
|
|
1019
1072
|
// Periodically check that everyone in the network has the same serialized state
|
|
1020
1073
|
network.deliverOperations(DestinationClient.All);
|
|
1021
1074
|
const compressors = network.getTargetCompressors(DestinationClient.All);
|
|
@@ -1048,9 +1101,7 @@ function createNetworkTestFunction(validateAfter) {
|
|
|
1048
1101
|
it(title, () => {
|
|
1049
1102
|
const hasCapacity = typeof testOrCapacity === 'number';
|
|
1050
1103
|
const capacity = hasCapacity ? testOrCapacity : undefined;
|
|
1051
|
-
// TODO: This cast can be removed on typescript 4.6
|
|
1052
1104
|
const network = new IdCompressorTestNetwork(capacity);
|
|
1053
|
-
// TODO: This cast can be removed on typescript 4.6
|
|
1054
1105
|
(hasCapacity ? assertNotUndefined(test) : testOrCapacity)(network);
|
|
1055
1106
|
if (validateAfter) {
|
|
1056
1107
|
network.deliverOperations(DestinationClient.All);
|