@fluid-experimental/tree 2.0.0-rc.1.0.3 → 2.0.0-rc.2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{.eslintrc.js → .eslintrc.cjs} +1 -1
- package/{.mocharc.js → .mocharc.cjs} +1 -1
- package/.vscode/settings.json +1 -1
- package/CHANGELOG.md +4 -0
- package/api-report/experimental-tree.api.md +4 -15
- package/dist/ChangeCompression.d.ts +5 -5
- package/dist/ChangeCompression.d.ts.map +1 -1
- package/dist/ChangeCompression.js +24 -24
- package/dist/ChangeCompression.js.map +1 -1
- package/dist/ChangeTypes.d.ts +3 -3
- package/dist/ChangeTypes.d.ts.map +1 -1
- package/dist/ChangeTypes.js +9 -9
- package/dist/ChangeTypes.js.map +1 -1
- package/dist/Checkout.d.ts +7 -7
- package/dist/Checkout.d.ts.map +1 -1
- package/dist/Checkout.js +27 -27
- package/dist/Checkout.js.map +1 -1
- package/dist/Common.d.ts +2 -2
- package/dist/Common.d.ts.map +1 -1
- package/dist/Common.js.map +1 -1
- package/dist/EagerCheckout.d.ts +3 -3
- package/dist/EagerCheckout.d.ts.map +1 -1
- package/dist/EagerCheckout.js +2 -2
- package/dist/EagerCheckout.js.map +1 -1
- package/dist/EditLog.d.ts +4 -6
- package/dist/EditLog.d.ts.map +1 -1
- package/dist/EditLog.js +9 -9
- package/dist/EditLog.js.map +1 -1
- package/dist/EditUtilities.d.ts +6 -6
- package/dist/EditUtilities.d.ts.map +1 -1
- package/dist/EditUtilities.js +28 -28
- package/dist/EditUtilities.js.map +1 -1
- package/dist/Forest.d.ts +2 -2
- package/dist/Forest.d.ts.map +1 -1
- package/dist/Forest.js +13 -13
- package/dist/Forest.js.map +1 -1
- package/dist/HistoryEditFactory.d.ts +3 -3
- package/dist/HistoryEditFactory.d.ts.map +1 -1
- package/dist/HistoryEditFactory.js +36 -36
- package/dist/HistoryEditFactory.js.map +1 -1
- package/dist/IdConversion.d.ts +3 -3
- package/dist/IdConversion.d.ts.map +1 -1
- package/dist/IdConversion.js +23 -23
- package/dist/IdConversion.js.map +1 -1
- package/dist/InitialTree.d.ts +1 -1
- package/dist/InitialTree.d.ts.map +1 -1
- package/dist/InitialTree.js +2 -2
- package/dist/InitialTree.js.map +1 -1
- package/dist/LazyCheckout.d.ts +5 -5
- package/dist/LazyCheckout.d.ts.map +1 -1
- package/dist/LazyCheckout.js +2 -2
- package/dist/LazyCheckout.js.map +1 -1
- package/dist/LogViewer.d.ts +7 -7
- package/dist/LogViewer.d.ts.map +1 -1
- package/dist/LogViewer.js +25 -25
- package/dist/LogViewer.js.map +1 -1
- package/dist/MergeHealth.d.ts +1 -1
- package/dist/MergeHealth.d.ts.map +1 -1
- package/dist/MergeHealth.js +32 -32
- package/dist/MergeHealth.js.map +1 -1
- package/dist/NodeIdUtilities.d.ts +3 -3
- package/dist/NodeIdUtilities.d.ts.map +1 -1
- package/dist/NodeIdUtilities.js +4 -4
- package/dist/NodeIdUtilities.js.map +1 -1
- package/dist/PayloadUtilities.d.ts +1 -1
- package/dist/PayloadUtilities.d.ts.map +1 -1
- package/dist/PayloadUtilities.js.map +1 -1
- package/dist/ReconciliationPath.d.ts +3 -3
- package/dist/ReconciliationPath.d.ts.map +1 -1
- package/dist/ReconciliationPath.js.map +1 -1
- package/dist/RevisionValueCache.js +5 -5
- package/dist/RevisionValueCache.js.map +1 -1
- package/dist/RevisionView.d.ts +5 -5
- package/dist/RevisionView.d.ts.map +1 -1
- package/dist/RevisionView.js +11 -11
- package/dist/RevisionView.js.map +1 -1
- package/dist/SerializationUtilities.d.ts +4 -4
- package/dist/SerializationUtilities.d.ts.map +1 -1
- package/dist/SerializationUtilities.js +5 -5
- package/dist/SerializationUtilities.js.map +1 -1
- package/dist/SharedTree.d.ts +15 -18
- package/dist/SharedTree.d.ts.map +1 -1
- package/dist/SharedTree.js +154 -166
- package/dist/SharedTree.js.map +1 -1
- package/dist/SharedTreeEncoder.d.ts +8 -8
- package/dist/SharedTreeEncoder.d.ts.map +1 -1
- package/dist/SharedTreeEncoder.js +67 -67
- package/dist/SharedTreeEncoder.js.map +1 -1
- package/dist/StringInterner.d.ts +1 -1
- package/dist/StringInterner.d.ts.map +1 -1
- package/dist/StringInterner.js +2 -2
- package/dist/StringInterner.js.map +1 -1
- package/dist/Summary.d.ts +4 -4
- package/dist/Summary.d.ts.map +1 -1
- package/dist/Summary.js +2 -2
- package/dist/Summary.js.map +1 -1
- package/dist/SummaryBackCompatibility.d.ts +3 -3
- package/dist/SummaryBackCompatibility.d.ts.map +1 -1
- package/dist/SummaryBackCompatibility.js +13 -13
- package/dist/SummaryBackCompatibility.js.map +1 -1
- package/dist/SummaryTestUtilities.d.ts +2 -2
- package/dist/SummaryTestUtilities.d.ts.map +1 -1
- package/dist/SummaryTestUtilities.js.map +1 -1
- package/dist/Transaction.d.ts +4 -4
- package/dist/Transaction.d.ts.map +1 -1
- package/dist/Transaction.js +10 -10
- package/dist/Transaction.js.map +1 -1
- package/dist/TransactionInternal.d.ts +7 -7
- package/dist/TransactionInternal.d.ts.map +1 -1
- package/dist/TransactionInternal.js +87 -87
- package/dist/TransactionInternal.js.map +1 -1
- package/dist/TreeCompressor.d.ts +4 -4
- package/dist/TreeCompressor.d.ts.map +1 -1
- package/dist/TreeCompressor.js +6 -6
- package/dist/TreeCompressor.js.map +1 -1
- package/dist/TreeNodeHandle.d.ts +3 -3
- package/dist/TreeNodeHandle.d.ts.map +1 -1
- package/dist/TreeNodeHandle.js +5 -5
- package/dist/TreeNodeHandle.js.map +1 -1
- package/dist/TreeView.d.ts +3 -3
- package/dist/TreeView.d.ts.map +1 -1
- package/dist/TreeView.js +10 -10
- package/dist/TreeView.js.map +1 -1
- package/dist/TreeViewUtilities.d.ts +2 -2
- package/dist/TreeViewUtilities.d.ts.map +1 -1
- package/dist/TreeViewUtilities.js +3 -3
- package/dist/TreeViewUtilities.js.map +1 -1
- package/dist/UndoRedoHandler.d.ts +2 -2
- package/dist/UndoRedoHandler.d.ts.map +1 -1
- package/dist/UndoRedoHandler.js +5 -5
- package/dist/UndoRedoHandler.js.map +1 -1
- package/dist/UuidUtilities.d.ts +1 -1
- package/dist/UuidUtilities.d.ts.map +1 -1
- package/dist/UuidUtilities.js +3 -3
- package/dist/UuidUtilities.js.map +1 -1
- package/dist/id-compressor/AppendOnlySortedMap.js +4 -4
- package/dist/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/dist/id-compressor/IdCompressor.d.ts +2 -2
- package/dist/id-compressor/IdCompressor.d.ts.map +1 -1
- package/dist/id-compressor/IdCompressor.js +78 -78
- package/dist/id-compressor/IdCompressor.js.map +1 -1
- package/dist/id-compressor/IdRange.d.ts +1 -1
- package/dist/id-compressor/IdRange.d.ts.map +1 -1
- package/dist/id-compressor/IdRange.js.map +1 -1
- package/dist/id-compressor/NumericUuid.d.ts +1 -1
- package/dist/id-compressor/NumericUuid.d.ts.map +1 -1
- package/dist/id-compressor/NumericUuid.js +6 -6
- package/dist/id-compressor/NumericUuid.js.map +1 -1
- package/dist/id-compressor/SessionIdNormalizer.d.ts +2 -2
- package/dist/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
- package/dist/id-compressor/SessionIdNormalizer.js +14 -14
- package/dist/id-compressor/SessionIdNormalizer.js.map +1 -1
- package/dist/id-compressor/index.d.ts +4 -4
- package/dist/id-compressor/index.d.ts.map +1 -1
- package/dist/id-compressor/index.js +11 -11
- package/dist/id-compressor/index.js.map +1 -1
- package/dist/id-compressor/persisted-types/0.0.1.d.ts +1 -1
- 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/id-compressor/persisted-types/index.d.ts +1 -1
- package/dist/id-compressor/persisted-types/index.d.ts.map +1 -1
- package/dist/id-compressor/persisted-types/index.js.map +1 -1
- package/dist/index.d.ts +29 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +73 -73
- package/dist/index.js.map +1 -1
- package/dist/migration-shim/migrationDeltaHandler.d.ts +1 -1
- package/dist/migration-shim/migrationDeltaHandler.d.ts.map +1 -1
- package/dist/migration-shim/migrationDeltaHandler.js +5 -8
- package/dist/migration-shim/migrationDeltaHandler.js.map +1 -1
- package/dist/migration-shim/migrationShim.d.ts +1 -1
- package/dist/migration-shim/migrationShim.d.ts.map +1 -1
- package/dist/migration-shim/migrationShim.js +1 -1
- package/dist/migration-shim/migrationShim.js.map +1 -1
- package/dist/migration-shim/migrationShimFactory.d.ts +1 -1
- package/dist/migration-shim/migrationShimFactory.d.ts.map +1 -1
- package/dist/migration-shim/migrationShimFactory.js.map +1 -1
- package/dist/migration-shim/sharedTreeDeltaHandler.d.ts +1 -1
- package/dist/migration-shim/sharedTreeDeltaHandler.d.ts.map +1 -1
- package/dist/migration-shim/sharedTreeDeltaHandler.js +2 -5
- package/dist/migration-shim/sharedTreeDeltaHandler.js.map +1 -1
- package/dist/migration-shim/types.d.ts +1 -1
- package/dist/migration-shim/types.d.ts.map +1 -1
- package/dist/migration-shim/types.js.map +1 -1
- package/dist/package.json +3 -0
- package/dist/persisted-types/0.0.2.d.ts +1 -1
- package/dist/persisted-types/0.0.2.d.ts.map +1 -1
- package/dist/persisted-types/0.0.2.js.map +1 -1
- package/dist/persisted-types/0.1.1.d.ts +4 -4
- package/dist/persisted-types/0.1.1.d.ts.map +1 -1
- package/dist/persisted-types/0.1.1.js +13 -13
- package/dist/persisted-types/0.1.1.js.map +1 -1
- package/dist/persisted-types/index.d.ts +2 -2
- package/dist/persisted-types/index.d.ts.map +1 -1
- package/dist/persisted-types/index.js +13 -13
- package/dist/persisted-types/index.js.map +1 -1
- package/dist/tree-alpha.d.ts +5 -8
- package/dist/tree-beta.d.ts +5 -1
- package/dist/tree-public.d.ts +5 -1
- package/dist/tree-untrimmed.d.ts +5 -8
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/ChangeCompression.d.ts +5 -5
- package/lib/ChangeCompression.d.ts.map +1 -1
- package/lib/ChangeCompression.js +3 -3
- package/lib/ChangeCompression.js.map +1 -1
- package/lib/ChangeTypes.d.ts +3 -3
- package/lib/ChangeTypes.d.ts.map +1 -1
- package/lib/ChangeTypes.js +3 -3
- package/lib/ChangeTypes.js.map +1 -1
- package/lib/Checkout.d.ts +7 -7
- package/lib/Checkout.d.ts.map +1 -1
- package/lib/Checkout.js +6 -6
- package/lib/Checkout.js.map +1 -1
- package/lib/Common.d.ts +2 -2
- package/lib/Common.d.ts.map +1 -1
- package/lib/Common.js.map +1 -1
- package/lib/EagerCheckout.d.ts +3 -3
- package/lib/EagerCheckout.d.ts.map +1 -1
- package/lib/EagerCheckout.js +1 -1
- package/lib/EagerCheckout.js.map +1 -1
- package/lib/EditLog.d.ts +4 -6
- package/lib/EditLog.d.ts.map +1 -1
- package/lib/EditLog.js +1 -1
- package/lib/EditLog.js.map +1 -1
- package/lib/EditUtilities.d.ts +6 -6
- package/lib/EditUtilities.d.ts.map +1 -1
- package/lib/EditUtilities.js +7 -7
- package/lib/EditUtilities.js.map +1 -1
- package/lib/Forest.d.ts +2 -2
- package/lib/Forest.d.ts.map +1 -1
- package/lib/Forest.js +2 -2
- package/lib/Forest.js.map +1 -1
- package/lib/HistoryEditFactory.d.ts +3 -3
- package/lib/HistoryEditFactory.d.ts.map +1 -1
- package/lib/HistoryEditFactory.js +7 -7
- package/lib/HistoryEditFactory.js.map +1 -1
- package/lib/IdConversion.d.ts +3 -3
- package/lib/IdConversion.d.ts.map +1 -1
- package/lib/IdConversion.js +4 -4
- package/lib/IdConversion.js.map +1 -1
- package/lib/InitialTree.d.ts +1 -1
- package/lib/InitialTree.d.ts.map +1 -1
- package/lib/InitialTree.js +1 -1
- package/lib/InitialTree.js.map +1 -1
- package/lib/LazyCheckout.d.ts +5 -5
- package/lib/LazyCheckout.d.ts.map +1 -1
- package/lib/LazyCheckout.js +1 -1
- package/lib/LazyCheckout.js.map +1 -1
- package/lib/LogViewer.d.ts +7 -7
- package/lib/LogViewer.d.ts.map +1 -1
- package/lib/LogViewer.js +4 -4
- package/lib/LogViewer.js.map +1 -1
- package/lib/MergeHealth.d.ts +1 -1
- package/lib/MergeHealth.d.ts.map +1 -1
- package/lib/MergeHealth.js +5 -5
- package/lib/MergeHealth.js.map +1 -1
- package/lib/NodeIdUtilities.d.ts +3 -3
- package/lib/NodeIdUtilities.d.ts.map +1 -1
- package/lib/NodeIdUtilities.js +2 -2
- package/lib/NodeIdUtilities.js.map +1 -1
- package/lib/PayloadUtilities.d.ts +1 -1
- package/lib/PayloadUtilities.d.ts.map +1 -1
- package/lib/PayloadUtilities.js.map +1 -1
- package/lib/ReconciliationPath.d.ts +3 -3
- package/lib/ReconciliationPath.d.ts.map +1 -1
- package/lib/ReconciliationPath.js.map +1 -1
- package/lib/RevisionValueCache.js +1 -1
- package/lib/RevisionValueCache.js.map +1 -1
- package/lib/RevisionView.d.ts +5 -5
- package/lib/RevisionView.d.ts.map +1 -1
- package/lib/RevisionView.js +3 -3
- package/lib/RevisionView.js.map +1 -1
- package/lib/SerializationUtilities.d.ts +4 -4
- package/lib/SerializationUtilities.d.ts.map +1 -1
- package/lib/SerializationUtilities.js +1 -1
- package/lib/SerializationUtilities.js.map +1 -1
- package/lib/SharedTree.d.ts +15 -18
- package/lib/SharedTree.d.ts.map +1 -1
- package/lib/SharedTree.js +28 -40
- package/lib/SharedTree.js.map +1 -1
- package/lib/SharedTreeEncoder.d.ts +8 -8
- package/lib/SharedTreeEncoder.d.ts.map +1 -1
- package/lib/SharedTreeEncoder.js +12 -12
- package/lib/SharedTreeEncoder.js.map +1 -1
- package/lib/StringInterner.d.ts +1 -1
- package/lib/StringInterner.d.ts.map +1 -1
- package/lib/StringInterner.js +1 -1
- package/lib/StringInterner.js.map +1 -1
- package/lib/Summary.d.ts +4 -4
- package/lib/Summary.d.ts.map +1 -1
- package/lib/Summary.js +1 -1
- package/lib/Summary.js.map +1 -1
- package/lib/SummaryBackCompatibility.d.ts +3 -3
- package/lib/SummaryBackCompatibility.d.ts.map +1 -1
- package/lib/SummaryBackCompatibility.js +3 -3
- package/lib/SummaryBackCompatibility.js.map +1 -1
- package/lib/SummaryTestUtilities.d.ts +2 -2
- package/lib/SummaryTestUtilities.d.ts.map +1 -1
- package/lib/SummaryTestUtilities.js.map +1 -1
- package/lib/Transaction.d.ts +4 -4
- package/lib/Transaction.d.ts.map +1 -1
- package/lib/Transaction.js +5 -5
- package/lib/Transaction.js.map +1 -1
- package/lib/TransactionInternal.d.ts +7 -7
- package/lib/TransactionInternal.d.ts.map +1 -1
- package/lib/TransactionInternal.js +5 -5
- package/lib/TransactionInternal.js.map +1 -1
- package/lib/TreeCompressor.d.ts +4 -4
- package/lib/TreeCompressor.d.ts.map +1 -1
- package/lib/TreeCompressor.js +2 -2
- package/lib/TreeCompressor.js.map +1 -1
- package/lib/TreeNodeHandle.d.ts +3 -3
- package/lib/TreeNodeHandle.d.ts.map +1 -1
- package/lib/TreeNodeHandle.js +1 -1
- package/lib/TreeNodeHandle.js.map +1 -1
- package/lib/TreeView.d.ts +3 -3
- package/lib/TreeView.d.ts.map +1 -1
- package/lib/TreeView.js +3 -3
- package/lib/TreeView.js.map +1 -1
- package/lib/TreeViewUtilities.d.ts +2 -2
- package/lib/TreeViewUtilities.d.ts.map +1 -1
- package/lib/TreeViewUtilities.js +1 -1
- package/lib/TreeViewUtilities.js.map +1 -1
- package/lib/UndoRedoHandler.d.ts +2 -2
- package/lib/UndoRedoHandler.d.ts.map +1 -1
- package/lib/UndoRedoHandler.js +2 -2
- package/lib/UndoRedoHandler.js.map +1 -1
- package/lib/UuidUtilities.d.ts +1 -1
- package/lib/UuidUtilities.d.ts.map +1 -1
- package/lib/UuidUtilities.js +1 -1
- package/lib/UuidUtilities.js.map +1 -1
- package/lib/id-compressor/AppendOnlySortedMap.js +1 -1
- package/lib/id-compressor/AppendOnlySortedMap.js.map +1 -1
- package/lib/id-compressor/IdCompressor.d.ts +2 -2
- package/lib/id-compressor/IdCompressor.d.ts.map +1 -1
- package/lib/id-compressor/IdCompressor.js +6 -6
- package/lib/id-compressor/IdCompressor.js.map +1 -1
- package/lib/id-compressor/IdRange.d.ts +1 -1
- package/lib/id-compressor/IdRange.d.ts.map +1 -1
- package/lib/id-compressor/IdRange.js.map +1 -1
- package/lib/id-compressor/NumericUuid.d.ts +1 -1
- package/lib/id-compressor/NumericUuid.d.ts.map +1 -1
- package/lib/id-compressor/NumericUuid.js +2 -2
- package/lib/id-compressor/NumericUuid.js.map +1 -1
- package/lib/id-compressor/SessionIdNormalizer.d.ts +2 -2
- package/lib/id-compressor/SessionIdNormalizer.d.ts.map +1 -1
- package/lib/id-compressor/SessionIdNormalizer.js +2 -2
- package/lib/id-compressor/SessionIdNormalizer.js.map +1 -1
- package/lib/id-compressor/index.d.ts +4 -4
- package/lib/id-compressor/index.d.ts.map +1 -1
- package/lib/id-compressor/index.js +3 -3
- package/lib/id-compressor/index.js.map +1 -1
- package/lib/id-compressor/persisted-types/0.0.1.d.ts +1 -1
- 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/id-compressor/persisted-types/index.d.ts +1 -1
- package/lib/id-compressor/persisted-types/index.d.ts.map +1 -1
- package/lib/id-compressor/persisted-types/index.js.map +1 -1
- package/lib/index.d.ts +29 -29
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +22 -22
- package/lib/index.js.map +1 -1
- package/lib/migration-shim/migrationDeltaHandler.d.ts +1 -1
- package/lib/migration-shim/migrationDeltaHandler.d.ts.map +1 -1
- package/lib/migration-shim/migrationDeltaHandler.js +5 -8
- package/lib/migration-shim/migrationDeltaHandler.js.map +1 -1
- package/lib/migration-shim/migrationShim.d.ts +1 -1
- package/lib/migration-shim/migrationShim.d.ts.map +1 -1
- package/lib/migration-shim/migrationShim.js +1 -1
- package/lib/migration-shim/migrationShim.js.map +1 -1
- package/lib/migration-shim/migrationShimFactory.d.ts +1 -1
- package/lib/migration-shim/migrationShimFactory.d.ts.map +1 -1
- package/lib/migration-shim/migrationShimFactory.js.map +1 -1
- package/lib/migration-shim/sharedTreeDeltaHandler.d.ts +1 -1
- package/lib/migration-shim/sharedTreeDeltaHandler.d.ts.map +1 -1
- package/lib/migration-shim/sharedTreeDeltaHandler.js +2 -5
- package/lib/migration-shim/sharedTreeDeltaHandler.js.map +1 -1
- package/lib/migration-shim/types.d.ts +1 -1
- package/lib/migration-shim/types.d.ts.map +1 -1
- package/lib/migration-shim/types.js.map +1 -1
- package/lib/persisted-types/0.0.2.d.ts +1 -1
- package/lib/persisted-types/0.0.2.d.ts.map +1 -1
- package/lib/persisted-types/0.0.2.js.map +1 -1
- package/lib/persisted-types/0.1.1.d.ts +4 -4
- package/lib/persisted-types/0.1.1.d.ts.map +1 -1
- package/lib/persisted-types/0.1.1.js +2 -2
- package/lib/persisted-types/0.1.1.js.map +1 -1
- package/lib/persisted-types/index.d.ts +2 -2
- package/lib/persisted-types/index.d.ts.map +1 -1
- package/lib/persisted-types/index.js +2 -2
- package/lib/persisted-types/index.js.map +1 -1
- package/lib/test/AppendOnlySortedMap.perf.tests.js +2 -2
- package/lib/test/AppendOnlySortedMap.perf.tests.js.map +1 -1
- package/lib/test/AppendOnlySortedMap.tests.js +2 -2
- package/lib/test/AppendOnlySortedMap.tests.js.map +1 -1
- package/lib/test/ChangeCompression.tests.js +9 -9
- package/lib/test/ChangeCompression.tests.js.map +1 -1
- package/lib/test/Checkout.tests.d.ts +1 -1
- package/lib/test/Checkout.tests.d.ts.map +1 -1
- package/lib/test/Checkout.tests.js +2 -2
- package/lib/test/Checkout.tests.js.map +1 -1
- package/lib/test/Common.tests.js +1 -1
- package/lib/test/Common.tests.js.map +1 -1
- package/lib/test/EagerCheckout.tests.js +4 -4
- package/lib/test/EagerCheckout.tests.js.map +1 -1
- package/lib/test/Edit.tests.js +2 -2
- package/lib/test/Edit.tests.js.map +1 -1
- package/lib/test/EditLog.perf.tests.js +4 -4
- package/lib/test/EditLog.perf.tests.js.map +1 -1
- package/lib/test/EditLog.tests.js +3 -3
- package/lib/test/EditLog.tests.js.map +1 -1
- package/lib/test/EditUtilities.tests.js +6 -6
- package/lib/test/EditUtilities.tests.js.map +1 -1
- package/lib/test/Forest.perf.tests.js +4 -4
- package/lib/test/Forest.perf.tests.js.map +1 -1
- package/lib/test/Forest.tests.js +2 -2
- package/lib/test/Forest.tests.js.map +1 -1
- package/lib/test/GenericTransaction.tests.js +3 -3
- package/lib/test/GenericTransaction.tests.js.map +1 -1
- package/lib/test/HistoryEditFactory.tests.js +4 -4
- package/lib/test/HistoryEditFactory.tests.js.map +1 -1
- package/lib/test/IdCompressor.perf.tests.js +4 -4
- package/lib/test/IdCompressor.perf.tests.js.map +1 -1
- package/lib/test/IdCompressor.tests.js +7 -7
- package/lib/test/IdCompressor.tests.js.map +1 -1
- package/lib/test/IdConversion.tests.js +3 -3
- package/lib/test/IdConversion.tests.js.map +1 -1
- package/lib/test/LazyCheckout.tests.js +4 -4
- package/lib/test/LazyCheckout.tests.js.map +1 -1
- package/lib/test/LogViewer.tests.js +12 -12
- package/lib/test/LogViewer.tests.js.map +1 -1
- package/lib/test/MergeHealthTelemetryHeartbeat.tests.js +6 -6
- package/lib/test/MergeHealthTelemetryHeartbeat.tests.js.map +1 -1
- package/lib/test/NumericUuid.perf.tests.js +3 -3
- package/lib/test/NumericUuid.perf.tests.js.map +1 -1
- package/lib/test/NumericUuid.tests.js +4 -4
- package/lib/test/NumericUuid.tests.js.map +1 -1
- package/lib/test/RevisionValueCache.tests.js +2 -2
- package/lib/test/RevisionValueCache.tests.js.map +1 -1
- package/lib/test/RevisionView.tests.js +6 -6
- package/lib/test/RevisionView.tests.js.map +1 -1
- package/lib/test/SessionIdNormalizer.tests.js +3 -3
- package/lib/test/SessionIdNormalizer.tests.js.map +1 -1
- package/lib/test/SharedTree.fuzz.tests.js +1 -1
- package/lib/test/SharedTree.fuzz.tests.js.map +1 -1
- package/lib/test/SharedTree.perf.tests.js +2 -2
- package/lib/test/SharedTree.perf.tests.js.map +1 -1
- package/lib/test/SharedTree.tests.js +7 -7
- package/lib/test/SharedTree.tests.js.map +1 -1
- package/lib/test/StringInterner.tests.js +1 -1
- package/lib/test/StringInterner.tests.js.map +1 -1
- package/lib/test/Summary.tests.d.ts +2 -2
- package/lib/test/Summary.tests.d.ts.map +1 -1
- package/lib/test/Summary.tests.js +14 -14
- package/lib/test/Summary.tests.js.map +1 -1
- package/lib/test/Transaction.tests.js +5 -5
- package/lib/test/Transaction.tests.js.map +1 -1
- package/lib/test/TransactionInternal.tests.js +7 -7
- package/lib/test/TransactionInternal.tests.js.map +1 -1
- package/lib/test/TreeCompression.tests.js +8 -8
- package/lib/test/TreeCompression.tests.js.map +1 -1
- package/lib/test/TreeView.tests.js +3 -3
- package/lib/test/TreeView.tests.js.map +1 -1
- package/lib/test/UndoRedoHandler.tests.js +2 -2
- package/lib/test/UndoRedoHandler.tests.js.map +1 -1
- package/lib/test/fuzz/Generators.d.ts +1 -1
- package/lib/test/fuzz/Generators.d.ts.map +1 -1
- package/lib/test/fuzz/Generators.js +4 -4
- package/lib/test/fuzz/Generators.js.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.d.ts.map +1 -1
- package/lib/test/fuzz/SharedTreeFuzzTests.js +5 -5
- package/lib/test/fuzz/SharedTreeFuzzTests.js.map +1 -1
- package/lib/test/fuzz/Types.d.ts +6 -6
- package/lib/test/fuzz/Types.d.ts.map +1 -1
- package/lib/test/fuzz/Types.js.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts +6 -6
- package/lib/test/utilities/IdCompressorTestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/IdCompressorTestUtilities.js +6 -6
- package/lib/test/utilities/IdCompressorTestUtilities.js.map +1 -1
- package/lib/test/utilities/MockTransaction.d.ts +4 -4
- package/lib/test/utilities/MockTransaction.d.ts.map +1 -1
- package/lib/test/utilities/MockTransaction.js +3 -3
- package/lib/test/utilities/MockTransaction.js.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts +1 -1
- package/lib/test/utilities/PendingLocalStateTests.d.ts.map +1 -1
- package/lib/test/utilities/PendingLocalStateTests.js +5 -5
- package/lib/test/utilities/PendingLocalStateTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeTests.d.ts +2 -2
- package/lib/test/utilities/SharedTreeTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeTests.js +22 -22
- package/lib/test/utilities/SharedTreeTests.js.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.d.ts.map +1 -1
- package/lib/test/utilities/SharedTreeVersioningTests.js +10 -10
- package/lib/test/utilities/SharedTreeVersioningTests.js.map +1 -1
- package/lib/test/utilities/SummaryLoadPerfTests.js +6 -6
- package/lib/test/utilities/SummaryLoadPerfTests.js.map +1 -1
- package/lib/test/utilities/SummarySizeTests.d.ts +1 -1
- package/lib/test/utilities/SummarySizeTests.d.ts.map +1 -1
- package/lib/test/utilities/SummarySizeTests.js +5 -5
- package/lib/test/utilities/SummarySizeTests.js.map +1 -1
- package/lib/test/utilities/TestNode.d.ts +6 -6
- package/lib/test/utilities/TestNode.d.ts.map +1 -1
- package/lib/test/utilities/TestNode.js +5 -5
- package/lib/test/utilities/TestNode.js.map +1 -1
- package/lib/test/utilities/TestUtilities.d.ts +12 -12
- package/lib/test/utilities/TestUtilities.d.ts.map +1 -1
- package/lib/test/utilities/TestUtilities.js +18 -19
- package/lib/test/utilities/TestUtilities.js.map +1 -1
- package/lib/test/utilities/UndoRedoTests.d.ts +2 -2
- package/lib/test/utilities/UndoRedoTests.d.ts.map +1 -1
- package/lib/test/utilities/UndoRedoTests.js +7 -7
- package/lib/test/utilities/UndoRedoTests.js.map +1 -1
- package/package.json +57 -31
- package/src/ChangeCompression.ts +7 -7
- package/src/ChangeTypes.ts +5 -5
- package/src/Checkout.ts +13 -13
- package/src/Common.ts +2 -2
- package/src/EagerCheckout.ts +3 -3
- package/src/EditLog.ts +6 -7
- package/src/EditUtilities.ts +10 -10
- package/src/Forest.ts +4 -4
- package/src/HistoryEditFactory.ts +11 -11
- package/src/IdConversion.ts +4 -4
- package/src/InitialTree.ts +3 -3
- package/src/LazyCheckout.ts +5 -5
- package/src/LogViewer.ts +8 -8
- package/src/MergeHealth.ts +6 -6
- package/src/NodeIdUtilities.ts +4 -4
- package/src/PayloadUtilities.ts +1 -1
- package/src/ReconciliationPath.ts +3 -3
- package/src/RevisionValueCache.ts +1 -1
- package/src/RevisionView.ts +7 -7
- package/src/SerializationUtilities.ts +5 -5
- package/src/SharedTree.ts +34 -54
- package/src/SharedTreeEncoder.ts +15 -15
- package/src/StringInterner.ts +2 -2
- package/src/Summary.ts +5 -5
- package/src/SummaryBackCompatibility.ts +10 -5
- package/src/SummaryTestUtilities.ts +3 -3
- package/src/Transaction.ts +8 -8
- package/src/TransactionInternal.ts +8 -8
- package/src/TreeCompressor.ts +6 -6
- package/src/TreeNodeHandle.ts +4 -4
- package/src/TreeView.ts +4 -4
- package/src/TreeViewUtilities.ts +3 -3
- package/src/UndoRedoHandler.ts +4 -4
- package/src/UuidUtilities.ts +2 -2
- package/src/id-compressor/AppendOnlySortedMap.ts +1 -1
- package/src/id-compressor/IdCompressor.ts +8 -8
- package/src/id-compressor/IdRange.ts +1 -1
- package/src/id-compressor/NumericUuid.ts +3 -3
- package/src/id-compressor/SessionIdNormalizer.ts +4 -4
- package/src/id-compressor/index.ts +4 -4
- package/src/id-compressor/persisted-types/0.0.1.ts +1 -1
- package/src/id-compressor/persisted-types/index.ts +1 -1
- package/src/index.ts +29 -29
- package/src/migration-shim/migrationDeltaHandler.ts +9 -10
- package/src/migration-shim/migrationShim.ts +7 -5
- package/src/migration-shim/migrationShimFactory.ts +4 -1
- package/src/migration-shim/sharedTreeDeltaHandler.ts +7 -6
- package/src/migration-shim/types.ts +1 -1
- package/src/persisted-types/0.0.2.ts +1 -1
- package/src/persisted-types/0.1.1.ts +4 -4
- package/src/persisted-types/index.ts +2 -2
- package/tsconfig.esnext.json +1 -2
- package/tsconfig.json +3 -0
- package/lib/test/Attach.tests.d.ts +0 -6
- package/lib/test/Attach.tests.d.ts.map +0 -1
- package/lib/test/Attach.tests.js +0 -52
- package/lib/test/Attach.tests.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Generators.js","sourceRoot":"","sources":["../../../src/test/fuzz/Generators.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IsoBuffer } from '@fluid-internal/client-utils';\nimport { IFluidHandle } from '@fluidframework/core-interfaces';\nimport {\n\tAcceptanceCondition,\n\tAsyncGenerator,\n\tAsyncWeights,\n\tIRandom,\n\tcreateWeightedAsyncGenerator,\n\tdone,\n\tmakeRandom,\n} from '@fluid-private/stochastic-test-utils';\nimport { Side, TraitMap, WriteFormat } from '../../persisted-types';\nimport { BuildNode, ChangeType, StablePlace, StableRange } from '../../ChangeTypes';\nimport { TraitLocation, TreeView, TreeViewRange } from '../../TreeView';\nimport { Definition, DetachedSequenceId, NodeId, TraitLabel } from '../../Identifiers';\nimport { fail } from '../../Common';\nimport { rangeFromStableRange } from '../../TreeViewUtilities';\nimport {\n\tEditGenerationConfig,\n\tFuzzChange,\n\tFuzzDelete,\n\tFuzzInsert,\n\tFuzzMove,\n\tFuzzTestState,\n\tInsertGenerationConfig,\n\tJoinGenerationConfig,\n\tOperation,\n\tOperationGenerationConfig,\n\tTreeContext,\n\tTreeLeave,\n} from './Types';\n\nconst defaultJoinConfig: Required<JoinGenerationConfig> = {\n\tmaximumActiveCollaborators: 10,\n\tmaximumPassiveCollaborators: 10,\n\twriteFormat: [WriteFormat.v0_0_2, WriteFormat.v0_1_1],\n\tsummarizeHistory: [false],\n};\n\nfunction makeJoinGenerator(passedConfig: JoinGenerationConfig): AsyncGenerator<Operation, FuzzTestState> {\n\tconst config = { ...defaultJoinConfig, ...passedConfig };\n\treturn async ({ random, activeCollaborators, passiveCollaborators }) => {\n\t\tconst activeAllowed = activeCollaborators.length < config.maximumActiveCollaborators;\n\t\tconst passiveAllowed = passiveCollaborators.length < config.maximumPassiveCollaborators;\n\t\tconst isObserver =\n\t\t\tactiveAllowed && passiveAllowed\n\t\t\t\t? random.bool()\n\t\t\t\t: activeAllowed\n\t\t\t\t? false\n\t\t\t\t: passiveAllowed\n\t\t\t\t? true\n\t\t\t\t: fail(\n\t\t\t\t\t\t'Cannot generate join op when both active and passive collaborators are at the configured limit.'\n\t\t\t\t );\n\t\treturn {\n\t\t\ttype: 'join',\n\t\t\tsummarizeHistory: random.pick(config.summarizeHistory),\n\t\t\twriteFormat: random.pick(config.writeFormat),\n\t\t\tisObserver,\n\t\t};\n\t};\n}\n\nasync function leaveGenerator({\n\trandom,\n\tactiveCollaborators,\n\tpassiveCollaborators,\n}: FuzzTestState): Promise<TreeLeave> {\n\tconst canUsePassive = passiveCollaborators.length > 0;\n\tconst canUseActive = activeCollaborators.length > 0;\n\tconst isObserver =\n\t\tcanUsePassive && canUseActive\n\t\t\t? random.bool()\n\t\t\t: canUsePassive\n\t\t\t? true\n\t\t\t: canUseActive\n\t\t\t? false\n\t\t\t: fail('Cannot generate a leave op when there are no clients.');\n\tconst index = random.integer(0, (isObserver ? passiveCollaborators : activeCollaborators).length - 1);\n\treturn { type: 'leave', isObserver, index };\n}\n\nconst defaultInsertConfig: Required<InsertGenerationConfig> = {\n\tdefinitionPoolSize: 20,\n\tmaxTreeSequenceSize: 3,\n};\n\nconst defaultEditConfig: Required<EditGenerationConfig> = {\n\tmaxTreeSize: Number.POSITIVE_INFINITY,\n\tinsertWeight: 3,\n\tinsertConfig: defaultInsertConfig,\n\tdeleteWeight: 1,\n\tmoveWeight: 1,\n\tsetPayloadWeight: 1,\n\ttraitLabelPoolSize: 20,\n};\n\nconst makeEditGenerator = (\n\tpassedConfig: EditGenerationConfig,\n\tpassedJoinConfig: JoinGenerationConfig,\n\tstashOps = false\n): AsyncGenerator<Operation, FuzzTestState> => {\n\tconst config = { ...defaultEditConfig, ...passedConfig };\n\tconst insertConfig = { ...defaultInsertConfig, ...config.insertConfig };\n\tconst poolRand = makeRandom(0);\n\tconst traitLabelPool = Array.from({ length: config.traitLabelPoolSize }, () => poolRand.uuid4() as TraitLabel);\n\tconst traitLabelGenerator = ({ random }: FuzzTestState) => random.pick(traitLabelPool);\n\n\tconst definitionPool = Array.from(\n\t\t{ length: insertConfig.definitionPoolSize },\n\t\t() => poolRand.uuid4() as Definition\n\t);\n\tconst definitionGenerator = ({ random }: FuzzTestState) => random.pick(definitionPool);\n\ttype EditState = FuzzTestState & TreeContext;\n\n\tfunction traitGenerator(state: EditState): TraitLocation {\n\t\tconst { idList, random, view } = state;\n\t\tconst id = random.pick(idList);\n\t\treturn view.tryGetTraitLocation(id) ?? { parent: id, label: traitLabelGenerator(state) };\n\t}\n\n\tfunction placeGenerator(state: EditState): StablePlace {\n\t\tconst { idList, random, view } = state;\n\t\t// Note: this gives a 50% chance of adding to a new trait; we may want to tune this at some point\n\t\tif (random.bool()) {\n\t\t\tconst parent = random.pick(idList);\n\t\t\treturn StablePlace.atStartOf({ parent, label: traitLabelGenerator(state) });\n\t\t}\n\t\tconst traitLocation = traitGenerator(state);\n\t\tconst trait = view.getTrait(traitLocation);\n\t\tinterface Descriptor {\n\t\t\tindex: number;\n\t\t\tside: Side;\n\t\t}\n\t\t// For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.\n\t\t// index === trait.length is treated as either the start or end of the trait.\n\t\tconst makeDescriptor = (): Descriptor => ({\n\t\t\tindex: random.integer(0, trait.length),\n\t\t\tside: random.bool() ? Side.Before : Side.After,\n\t\t});\n\t\tconst descriptor = makeDescriptor();\n\n\t\tconst placeFromDescriptor = ({ index, side }: Descriptor): StablePlace =>\n\t\t\tindex === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };\n\t\treturn placeFromDescriptor(descriptor);\n\t}\n\n\tfunction rangeGenerator(state: EditState): StableRange {\n\t\tconst { random, view } = state;\n\t\tconst traitLocation = traitGenerator(state);\n\t\tconst trait = view.getTrait(traitLocation);\n\t\tinterface Descriptor {\n\t\t\tindex: number;\n\t\t\tside: Side;\n\t\t}\n\t\t// For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.\n\t\t// index === trait.length is treated as either the start or end of the trait.\n\t\tconst makeDescriptor = (): Descriptor => ({\n\t\t\tindex: random.integer(0, trait.length),\n\t\t\tside: random.bool() ? Side.Before : Side.After,\n\t\t});\n\t\tconst descriptor1 = makeDescriptor();\n\t\tlet descriptor2: Descriptor;\n\t\tdo {\n\t\t\tdescriptor2 = makeDescriptor();\n\t\t} while (descriptor1.index === descriptor2.index && descriptor1.side === descriptor2.side);\n\n\t\tconst sortedDescriptors = [descriptor1, descriptor2];\n\t\tsortedDescriptors.sort((a, b) => {\n\t\t\tif (a.index === b.index && a.side === b.side) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (a.index === trait.length) {\n\t\t\t\tif (a.side === Side.After) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (b.index === trait.length) {\n\t\t\t\tif (b.side === Side.After) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (a.index < b.index) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn a.side === Side.Before ? -1 : 1;\n\t\t});\n\t\tconst [startDescriptor, endDescriptor] = sortedDescriptors;\n\t\tconst placeFromDescriptor = ({ index, side }: Descriptor): StablePlace =>\n\t\t\tindex === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };\n\t\tconst start = placeFromDescriptor(startDescriptor);\n\t\tconst end = placeFromDescriptor(endDescriptor);\n\t\treturn StableRange.from(start).to(end);\n\t}\n\n\tfunction treeGenerator(state: EditState): BuildNode {\n\t\tconst { random, idGenerator } = state;\n\t\tconst treeType = random.pick(['leaf', 'stick', 'balanced']);\n\t\tconst makeNode = (traits?: TraitMap<BuildNode>): BuildNode => ({\n\t\t\tidentifier: idGenerator.generateNodeId(),\n\t\t\tdefinition: definitionGenerator(state),\n\t\t\ttraits: traits ?? {},\n\t\t});\n\t\tswitch (treeType) {\n\t\t\tcase 'leaf':\n\t\t\t\treturn makeNode();\n\t\t\tcase 'stick':\n\t\t\t\treturn makeNode({\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode({ [traitLabelGenerator(state)]: [makeNode()] })],\n\t\t\t\t});\n\t\t\tcase 'balanced':\n\t\t\t\treturn makeNode({\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode()],\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode()],\n\t\t\t\t});\n\t\t\tdefault:\n\t\t\t\tfail(`Unexpected treeType ${treeType}`);\n\t\t}\n\t}\n\n\tasync function insertGenerator(state: EditState): Promise<FuzzInsert> {\n\t\tconst { maxTreeSequenceSize } = insertConfig;\n\t\tconst id = 1 as DetachedSequenceId;\n\t\tconst { view } = state;\n\t\tconst isValidInsertPlace = (destination: StablePlace): boolean => {\n\t\t\t// Disallow insertion adjacent to the root node.\n\t\t\tif (destination.referenceSibling === view.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tlet destination: StablePlace;\n\t\tdo {\n\t\t\tdestination = placeGenerator(state);\n\t\t} while (!isValidInsertPlace(destination));\n\n\t\treturn {\n\t\t\tfuzzType: 'insert',\n\t\t\tbuild: {\n\t\t\t\ttype: ChangeType.Build,\n\t\t\t\tdestination: id,\n\t\t\t\tsource: Array.from({ length: state.random.integer(1, maxTreeSequenceSize) }, () =>\n\t\t\t\t\ttreeGenerator(state)\n\t\t\t\t),\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\ttype: ChangeType.Insert,\n\t\t\t\tdestination,\n\t\t\t\tsource: id,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function deleteGenerator(state: EditState): Promise<FuzzDelete> {\n\t\tconst { view } = state;\n\t\tconst isValidDeleteRange = (source: StableRange): boolean => {\n\t\t\t// Disallow deletion of the root node.\n\t\t\tif (source.start.referenceSibling === view.root || source.end.referenceSibling === view.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tlet source: StableRange;\n\t\tdo {\n\t\t\tsource = rangeGenerator(state);\n\t\t} while (!isValidDeleteRange(source));\n\n\t\treturn {\n\t\t\tfuzzType: 'delete',\n\t\t\ttype: ChangeType.Detach,\n\t\t\tsource,\n\t\t};\n\t}\n\n\tasync function moveGenerator(state: EditState): Promise<FuzzMove> {\n\t\tconst id = 1 as DetachedSequenceId;\n\t\tconst { view } = state;\n\n\t\tconst isValidMoveRange = ({ start, end }: TreeViewRange, destination: StablePlace): boolean => {\n\t\t\t// An ancestor cannot be moved to be a sibling of its descendant.\n\t\t\tconst forbiddenDescendantId =\n\t\t\t\tdestination.referenceTrait?.parent ?? destination.referenceSibling ?? fail('Invalid place');\n\n\t\t\tconst startIndex = view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = view.findIndexWithinTrait(end);\n\t\t\tconst idsInSource = new Set(view.getTrait(start.trait).slice(startIndex, endIndex));\n\t\t\tfor (\n\t\t\t\tlet current: NodeId | undefined = forbiddenDescendantId;\n\t\t\t\tcurrent !== undefined;\n\t\t\t\tcurrent = view.tryGetParentViewNode(current)?.identifier\n\t\t\t) {\n\t\t\t\tif (idsInSource.has(current)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tlet source: StableRange;\n\t\tlet destination: StablePlace;\n\t\tdo {\n\t\t\tsource = rangeGenerator(state);\n\t\t\tdestination = placeGenerator(state);\n\t\t} while (!isValidMoveRange(rangeFromStableRange(view, source), destination));\n\n\t\treturn {\n\t\t\tfuzzType: 'move',\n\t\t\tdetach: {\n\t\t\t\ttype: ChangeType.Detach,\n\t\t\t\tdestination: id,\n\t\t\t\tsource,\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\ttype: ChangeType.Insert,\n\t\t\t\tdestination,\n\t\t\t\tsource: id,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function setPayloadGenerator({ dataStoreRuntime, idList, random, view }: EditState): Promise<FuzzChange> {\n\t\tconst nodeToModify = random.pick(idList);\n\t\tconst getPayloadContents = async (\n\t\t\trandom: IRandom\n\t\t): Promise<string | { blob: IFluidHandle<ArrayBufferLike> }> => {\n\t\t\tif (random.bool()) {\n\t\t\t\treturn random.string(4);\n\t\t\t}\n\t\t\tconst handle = await dataStoreRuntime.uploadBlob(IsoBuffer.from(random.string(10)));\n\t\t\treturn { blob: handle };\n\t\t};\n\n\t\tconst viewNode = view.getViewNode(nodeToModify);\n\t\tconst payload =\n\t\t\tviewNode.payload !== undefined ? (random.bool() ? await getPayloadContents(random) : undefined) : undefined;\n\t\treturn {\n\t\t\tfuzzType: 'setPayload',\n\t\t\ttype: ChangeType.SetValue,\n\t\t\tnodeToModify: random.pick(idList),\n\t\t\tpayload,\n\t\t};\n\t}\n\n\tconst baseEditGenerator = createWeightedAsyncGenerator<FuzzChange, EditState>([\n\t\t[insertGenerator, config.insertWeight, ({ idList }) => idList.length < config.maxTreeSize],\n\t\t[deleteGenerator, config.deleteWeight, ({ idList }) => idList.length > 1],\n\t\t[moveGenerator, config.moveWeight, ({ idList }) => idList.length > 1],\n\t\t[setPayloadGenerator, config.setPayloadWeight],\n\t]);\n\n\treturn async (state: FuzzTestState): Promise<Operation | typeof done> => {\n\t\tconst { random, activeCollaborators } = state;\n\t\tconst index = random.integer(0, activeCollaborators.length - 1);\n\t\tconst { tree } = activeCollaborators[index];\n\t\tconst view = tree.currentView;\n\t\tconst idList = getIdList(view);\n\t\tconst contents = await baseEditGenerator({\n\t\t\t...state,\n\t\t\tview,\n\t\t\tidList,\n\t\t\tdataStoreRuntime: tree.getRuntime(),\n\t\t\tidGenerator: tree,\n\t\t});\n\t\tif (contents === done) {\n\t\t\treturn done;\n\t\t}\n\n\t\tif (stashOps) {\n\t\t\tconst joinConfig = { ...defaultJoinConfig, ...passedJoinConfig };\n\t\t\treturn {\n\t\t\t\ttype: 'stash',\n\t\t\t\tcontents,\n\t\t\t\tindex,\n\t\t\t\tsummarizeHistory: random.pick(joinConfig.summarizeHistory),\n\t\t\t\twriteFormat: random.pick(joinConfig.writeFormat),\n\t\t\t};\n\t\t}\n\n\t\treturn { type: 'edit', contents, index };\n\t};\n};\n\nconst defaultOpConfig: Required<OperationGenerationConfig> = {\n\teditConfig: defaultEditConfig,\n\tjoinConfig: defaultJoinConfig,\n\teditWeight: 100,\n\tjoinWeight: 10,\n\tleaveWeight: 10,\n\tstashWeight: 1,\n\tsynchronizeWeight: 10,\n};\n\nexport function makeOpGenerator(passedConfig: OperationGenerationConfig): AsyncGenerator<Operation, FuzzTestState> {\n\tconst config = {\n\t\t...defaultOpConfig,\n\t\t...passedConfig,\n\t};\n\n\tconst { maximumPassiveCollaborators, maximumActiveCollaborators } = { ...defaultJoinConfig, ...config.joinConfig };\n\tconst maximumCollaborators = maximumPassiveCollaborators + maximumActiveCollaborators;\n\n\tconst collaboratorsMatches =\n\t\t(criteria: (collaboratorCount: number) => boolean): AcceptanceCondition<FuzzTestState> =>\n\t\t({ activeCollaborators, passiveCollaborators }) =>\n\t\t\tcriteria(activeCollaborators.length + passiveCollaborators.length);\n\tconst atLeastOneClient = collaboratorsMatches((count) => count > 0);\n\tconst atLeastOneActiveClient: AcceptanceCondition<FuzzTestState> = ({ activeCollaborators }) =>\n\t\tactiveCollaborators.length > 0;\n\tconst opWeights: AsyncWeights<Operation, FuzzTestState> = [\n\t\t[makeEditGenerator(config.editConfig, config.joinConfig), config.editWeight, atLeastOneActiveClient],\n\t\t[\n\t\t\tmakeJoinGenerator(config.joinConfig),\n\t\t\tconfig.joinWeight,\n\t\t\tcollaboratorsMatches((count) => count < maximumCollaborators),\n\t\t],\n\t\t[leaveGenerator, config.leaveWeight, atLeastOneClient],\n\t\t// TODO:#5357: Re-enable stashed ops tests\n\t\t// [makeEditGenerator(config.editConfig, config.joinConfig, true), config.stashWeight, atLeastOneActiveClient],\n\t\t[{ type: 'synchronize' }, config.synchronizeWeight, atLeastOneClient],\n\t];\n\treturn createWeightedAsyncGenerator(opWeights);\n}\n\nfunction getIdList(tree: TreeView): NodeId[] {\n\tconst allIds: NodeId[] = [];\n\tconst toVisit: NodeId[] = [tree.root];\n\twhile (toVisit.length > 0) {\n\t\tconst id = toVisit.pop() ?? fail();\n\t\tallIds.push(id);\n\t\tconst node = tree.getViewNode(id);\n\t\tfor (const [_, childIds] of node.traits) {\n\t\t\ttoVisit.push(...childIds);\n\t\t}\n\t}\n\treturn allIds;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Generators.js","sourceRoot":"","sources":["../../../src/test/fuzz/Generators.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IsoBuffer } from '@fluid-internal/client-utils';\nimport { IFluidHandle } from '@fluidframework/core-interfaces';\nimport {\n\tAcceptanceCondition,\n\tAsyncGenerator,\n\tAsyncWeights,\n\tIRandom,\n\tcreateWeightedAsyncGenerator,\n\tdone,\n\tmakeRandom,\n} from '@fluid-private/stochastic-test-utils';\nimport { Side, TraitMap, WriteFormat } from '../../persisted-types/index.js';\nimport { BuildNode, ChangeType, StablePlace, StableRange } from '../../ChangeTypes.js';\nimport { TraitLocation, TreeView, TreeViewRange } from '../../TreeView.js';\nimport { Definition, DetachedSequenceId, NodeId, TraitLabel } from '../../Identifiers.js';\nimport { fail } from '../../Common.js';\nimport { rangeFromStableRange } from '../../TreeViewUtilities.js';\nimport {\n\tEditGenerationConfig,\n\tFuzzChange,\n\tFuzzDelete,\n\tFuzzInsert,\n\tFuzzMove,\n\tFuzzTestState,\n\tInsertGenerationConfig,\n\tJoinGenerationConfig,\n\tOperation,\n\tOperationGenerationConfig,\n\tTreeContext,\n\tTreeLeave,\n} from './Types.js';\n\nconst defaultJoinConfig: Required<JoinGenerationConfig> = {\n\tmaximumActiveCollaborators: 10,\n\tmaximumPassiveCollaborators: 10,\n\twriteFormat: [WriteFormat.v0_0_2, WriteFormat.v0_1_1],\n\tsummarizeHistory: [false],\n};\n\nfunction makeJoinGenerator(passedConfig: JoinGenerationConfig): AsyncGenerator<Operation, FuzzTestState> {\n\tconst config = { ...defaultJoinConfig, ...passedConfig };\n\treturn async ({ random, activeCollaborators, passiveCollaborators }) => {\n\t\tconst activeAllowed = activeCollaborators.length < config.maximumActiveCollaborators;\n\t\tconst passiveAllowed = passiveCollaborators.length < config.maximumPassiveCollaborators;\n\t\tconst isObserver =\n\t\t\tactiveAllowed && passiveAllowed\n\t\t\t\t? random.bool()\n\t\t\t\t: activeAllowed\n\t\t\t\t? false\n\t\t\t\t: passiveAllowed\n\t\t\t\t? true\n\t\t\t\t: fail(\n\t\t\t\t\t\t'Cannot generate join op when both active and passive collaborators are at the configured limit.'\n\t\t\t\t );\n\t\treturn {\n\t\t\ttype: 'join',\n\t\t\tsummarizeHistory: random.pick(config.summarizeHistory),\n\t\t\twriteFormat: random.pick(config.writeFormat),\n\t\t\tisObserver,\n\t\t};\n\t};\n}\n\nasync function leaveGenerator({\n\trandom,\n\tactiveCollaborators,\n\tpassiveCollaborators,\n}: FuzzTestState): Promise<TreeLeave> {\n\tconst canUsePassive = passiveCollaborators.length > 0;\n\tconst canUseActive = activeCollaborators.length > 0;\n\tconst isObserver =\n\t\tcanUsePassive && canUseActive\n\t\t\t? random.bool()\n\t\t\t: canUsePassive\n\t\t\t? true\n\t\t\t: canUseActive\n\t\t\t? false\n\t\t\t: fail('Cannot generate a leave op when there are no clients.');\n\tconst index = random.integer(0, (isObserver ? passiveCollaborators : activeCollaborators).length - 1);\n\treturn { type: 'leave', isObserver, index };\n}\n\nconst defaultInsertConfig: Required<InsertGenerationConfig> = {\n\tdefinitionPoolSize: 20,\n\tmaxTreeSequenceSize: 3,\n};\n\nconst defaultEditConfig: Required<EditGenerationConfig> = {\n\tmaxTreeSize: Number.POSITIVE_INFINITY,\n\tinsertWeight: 3,\n\tinsertConfig: defaultInsertConfig,\n\tdeleteWeight: 1,\n\tmoveWeight: 1,\n\tsetPayloadWeight: 1,\n\ttraitLabelPoolSize: 20,\n};\n\nconst makeEditGenerator = (\n\tpassedConfig: EditGenerationConfig,\n\tpassedJoinConfig: JoinGenerationConfig,\n\tstashOps = false\n): AsyncGenerator<Operation, FuzzTestState> => {\n\tconst config = { ...defaultEditConfig, ...passedConfig };\n\tconst insertConfig = { ...defaultInsertConfig, ...config.insertConfig };\n\tconst poolRand = makeRandom(0);\n\tconst traitLabelPool = Array.from({ length: config.traitLabelPoolSize }, () => poolRand.uuid4() as TraitLabel);\n\tconst traitLabelGenerator = ({ random }: FuzzTestState) => random.pick(traitLabelPool);\n\n\tconst definitionPool = Array.from(\n\t\t{ length: insertConfig.definitionPoolSize },\n\t\t() => poolRand.uuid4() as Definition\n\t);\n\tconst definitionGenerator = ({ random }: FuzzTestState) => random.pick(definitionPool);\n\ttype EditState = FuzzTestState & TreeContext;\n\n\tfunction traitGenerator(state: EditState): TraitLocation {\n\t\tconst { idList, random, view } = state;\n\t\tconst id = random.pick(idList);\n\t\treturn view.tryGetTraitLocation(id) ?? { parent: id, label: traitLabelGenerator(state) };\n\t}\n\n\tfunction placeGenerator(state: EditState): StablePlace {\n\t\tconst { idList, random, view } = state;\n\t\t// Note: this gives a 50% chance of adding to a new trait; we may want to tune this at some point\n\t\tif (random.bool()) {\n\t\t\tconst parent = random.pick(idList);\n\t\t\treturn StablePlace.atStartOf({ parent, label: traitLabelGenerator(state) });\n\t\t}\n\t\tconst traitLocation = traitGenerator(state);\n\t\tconst trait = view.getTrait(traitLocation);\n\t\tinterface Descriptor {\n\t\t\tindex: number;\n\t\t\tside: Side;\n\t\t}\n\t\t// For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.\n\t\t// index === trait.length is treated as either the start or end of the trait.\n\t\tconst makeDescriptor = (): Descriptor => ({\n\t\t\tindex: random.integer(0, trait.length),\n\t\t\tside: random.bool() ? Side.Before : Side.After,\n\t\t});\n\t\tconst descriptor = makeDescriptor();\n\n\t\tconst placeFromDescriptor = ({ index, side }: Descriptor): StablePlace =>\n\t\t\tindex === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };\n\t\treturn placeFromDescriptor(descriptor);\n\t}\n\n\tfunction rangeGenerator(state: EditState): StableRange {\n\t\tconst { random, view } = state;\n\t\tconst traitLocation = traitGenerator(state);\n\t\tconst trait = view.getTrait(traitLocation);\n\t\tinterface Descriptor {\n\t\t\tindex: number;\n\t\t\tside: Side;\n\t\t}\n\t\t// For a trait of length N, there are 2N + 2valid places: start, before index 1, after index 1, etc.\n\t\t// index === trait.length is treated as either the start or end of the trait.\n\t\tconst makeDescriptor = (): Descriptor => ({\n\t\t\tindex: random.integer(0, trait.length),\n\t\t\tside: random.bool() ? Side.Before : Side.After,\n\t\t});\n\t\tconst descriptor1 = makeDescriptor();\n\t\tlet descriptor2: Descriptor;\n\t\tdo {\n\t\t\tdescriptor2 = makeDescriptor();\n\t\t} while (descriptor1.index === descriptor2.index && descriptor1.side === descriptor2.side);\n\n\t\tconst sortedDescriptors = [descriptor1, descriptor2];\n\t\tsortedDescriptors.sort((a, b) => {\n\t\t\tif (a.index === b.index && a.side === b.side) {\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\tif (a.index === trait.length) {\n\t\t\t\tif (a.side === Side.After) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\tif (b.index === trait.length) {\n\t\t\t\tif (b.side === Side.After) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif (a.index < b.index) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\treturn a.side === Side.Before ? -1 : 1;\n\t\t});\n\t\tconst [startDescriptor, endDescriptor] = sortedDescriptors;\n\t\tconst placeFromDescriptor = ({ index, side }: Descriptor): StablePlace =>\n\t\t\tindex === trait.length ? { referenceTrait: traitLocation, side } : { referenceSibling: trait[index], side };\n\t\tconst start = placeFromDescriptor(startDescriptor);\n\t\tconst end = placeFromDescriptor(endDescriptor);\n\t\treturn StableRange.from(start).to(end);\n\t}\n\n\tfunction treeGenerator(state: EditState): BuildNode {\n\t\tconst { random, idGenerator } = state;\n\t\tconst treeType = random.pick(['leaf', 'stick', 'balanced']);\n\t\tconst makeNode = (traits?: TraitMap<BuildNode>): BuildNode => ({\n\t\t\tidentifier: idGenerator.generateNodeId(),\n\t\t\tdefinition: definitionGenerator(state),\n\t\t\ttraits: traits ?? {},\n\t\t});\n\t\tswitch (treeType) {\n\t\t\tcase 'leaf':\n\t\t\t\treturn makeNode();\n\t\t\tcase 'stick':\n\t\t\t\treturn makeNode({\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode({ [traitLabelGenerator(state)]: [makeNode()] })],\n\t\t\t\t});\n\t\t\tcase 'balanced':\n\t\t\t\treturn makeNode({\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode()],\n\t\t\t\t\t[traitLabelGenerator(state)]: [makeNode()],\n\t\t\t\t});\n\t\t\tdefault:\n\t\t\t\tfail(`Unexpected treeType ${treeType}`);\n\t\t}\n\t}\n\n\tasync function insertGenerator(state: EditState): Promise<FuzzInsert> {\n\t\tconst { maxTreeSequenceSize } = insertConfig;\n\t\tconst id = 1 as DetachedSequenceId;\n\t\tconst { view } = state;\n\t\tconst isValidInsertPlace = (destination: StablePlace): boolean => {\n\t\t\t// Disallow insertion adjacent to the root node.\n\t\t\tif (destination.referenceSibling === view.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tlet destination: StablePlace;\n\t\tdo {\n\t\t\tdestination = placeGenerator(state);\n\t\t} while (!isValidInsertPlace(destination));\n\n\t\treturn {\n\t\t\tfuzzType: 'insert',\n\t\t\tbuild: {\n\t\t\t\ttype: ChangeType.Build,\n\t\t\t\tdestination: id,\n\t\t\t\tsource: Array.from({ length: state.random.integer(1, maxTreeSequenceSize) }, () =>\n\t\t\t\t\ttreeGenerator(state)\n\t\t\t\t),\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\ttype: ChangeType.Insert,\n\t\t\t\tdestination,\n\t\t\t\tsource: id,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function deleteGenerator(state: EditState): Promise<FuzzDelete> {\n\t\tconst { view } = state;\n\t\tconst isValidDeleteRange = (source: StableRange): boolean => {\n\t\t\t// Disallow deletion of the root node.\n\t\t\tif (source.start.referenceSibling === view.root || source.end.referenceSibling === view.root) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn true;\n\t\t};\n\n\t\tlet source: StableRange;\n\t\tdo {\n\t\t\tsource = rangeGenerator(state);\n\t\t} while (!isValidDeleteRange(source));\n\n\t\treturn {\n\t\t\tfuzzType: 'delete',\n\t\t\ttype: ChangeType.Detach,\n\t\t\tsource,\n\t\t};\n\t}\n\n\tasync function moveGenerator(state: EditState): Promise<FuzzMove> {\n\t\tconst id = 1 as DetachedSequenceId;\n\t\tconst { view } = state;\n\n\t\tconst isValidMoveRange = ({ start, end }: TreeViewRange, destination: StablePlace): boolean => {\n\t\t\t// An ancestor cannot be moved to be a sibling of its descendant.\n\t\t\tconst forbiddenDescendantId =\n\t\t\t\tdestination.referenceTrait?.parent ?? destination.referenceSibling ?? fail('Invalid place');\n\n\t\t\tconst startIndex = view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = view.findIndexWithinTrait(end);\n\t\t\tconst idsInSource = new Set(view.getTrait(start.trait).slice(startIndex, endIndex));\n\t\t\tfor (\n\t\t\t\tlet current: NodeId | undefined = forbiddenDescendantId;\n\t\t\t\tcurrent !== undefined;\n\t\t\t\tcurrent = view.tryGetParentViewNode(current)?.identifier\n\t\t\t) {\n\t\t\t\tif (idsInSource.has(current)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tlet source: StableRange;\n\t\tlet destination: StablePlace;\n\t\tdo {\n\t\t\tsource = rangeGenerator(state);\n\t\t\tdestination = placeGenerator(state);\n\t\t} while (!isValidMoveRange(rangeFromStableRange(view, source), destination));\n\n\t\treturn {\n\t\t\tfuzzType: 'move',\n\t\t\tdetach: {\n\t\t\t\ttype: ChangeType.Detach,\n\t\t\t\tdestination: id,\n\t\t\t\tsource,\n\t\t\t},\n\t\t\tinsert: {\n\t\t\t\ttype: ChangeType.Insert,\n\t\t\t\tdestination,\n\t\t\t\tsource: id,\n\t\t\t},\n\t\t};\n\t}\n\n\tasync function setPayloadGenerator({ dataStoreRuntime, idList, random, view }: EditState): Promise<FuzzChange> {\n\t\tconst nodeToModify = random.pick(idList);\n\t\tconst getPayloadContents = async (\n\t\t\trandom: IRandom\n\t\t): Promise<string | { blob: IFluidHandle<ArrayBufferLike> }> => {\n\t\t\tif (random.bool()) {\n\t\t\t\treturn random.string(4);\n\t\t\t}\n\t\t\tconst handle = await dataStoreRuntime.uploadBlob(IsoBuffer.from(random.string(10)));\n\t\t\treturn { blob: handle };\n\t\t};\n\n\t\tconst viewNode = view.getViewNode(nodeToModify);\n\t\tconst payload =\n\t\t\tviewNode.payload !== undefined ? (random.bool() ? await getPayloadContents(random) : undefined) : undefined;\n\t\treturn {\n\t\t\tfuzzType: 'setPayload',\n\t\t\ttype: ChangeType.SetValue,\n\t\t\tnodeToModify: random.pick(idList),\n\t\t\tpayload,\n\t\t};\n\t}\n\n\tconst baseEditGenerator = createWeightedAsyncGenerator<FuzzChange, EditState>([\n\t\t[insertGenerator, config.insertWeight, ({ idList }) => idList.length < config.maxTreeSize],\n\t\t[deleteGenerator, config.deleteWeight, ({ idList }) => idList.length > 1],\n\t\t[moveGenerator, config.moveWeight, ({ idList }) => idList.length > 1],\n\t\t[setPayloadGenerator, config.setPayloadWeight],\n\t]);\n\n\treturn async (state: FuzzTestState): Promise<Operation | typeof done> => {\n\t\tconst { random, activeCollaborators } = state;\n\t\tconst index = random.integer(0, activeCollaborators.length - 1);\n\t\tconst { tree } = activeCollaborators[index];\n\t\tconst view = tree.currentView;\n\t\tconst idList = getIdList(view);\n\t\tconst contents = await baseEditGenerator({\n\t\t\t...state,\n\t\t\tview,\n\t\t\tidList,\n\t\t\tdataStoreRuntime: tree.getRuntime(),\n\t\t\tidGenerator: tree,\n\t\t});\n\t\tif (contents === done) {\n\t\t\treturn done;\n\t\t}\n\n\t\tif (stashOps) {\n\t\t\tconst joinConfig = { ...defaultJoinConfig, ...passedJoinConfig };\n\t\t\treturn {\n\t\t\t\ttype: 'stash',\n\t\t\t\tcontents,\n\t\t\t\tindex,\n\t\t\t\tsummarizeHistory: random.pick(joinConfig.summarizeHistory),\n\t\t\t\twriteFormat: random.pick(joinConfig.writeFormat),\n\t\t\t};\n\t\t}\n\n\t\treturn { type: 'edit', contents, index };\n\t};\n};\n\nconst defaultOpConfig: Required<OperationGenerationConfig> = {\n\teditConfig: defaultEditConfig,\n\tjoinConfig: defaultJoinConfig,\n\teditWeight: 100,\n\tjoinWeight: 10,\n\tleaveWeight: 10,\n\tstashWeight: 1,\n\tsynchronizeWeight: 10,\n};\n\nexport function makeOpGenerator(passedConfig: OperationGenerationConfig): AsyncGenerator<Operation, FuzzTestState> {\n\tconst config = {\n\t\t...defaultOpConfig,\n\t\t...passedConfig,\n\t};\n\n\tconst { maximumPassiveCollaborators, maximumActiveCollaborators } = { ...defaultJoinConfig, ...config.joinConfig };\n\tconst maximumCollaborators = maximumPassiveCollaborators + maximumActiveCollaborators;\n\n\tconst collaboratorsMatches =\n\t\t(criteria: (collaboratorCount: number) => boolean): AcceptanceCondition<FuzzTestState> =>\n\t\t({ activeCollaborators, passiveCollaborators }) =>\n\t\t\tcriteria(activeCollaborators.length + passiveCollaborators.length);\n\tconst atLeastOneClient = collaboratorsMatches((count) => count > 0);\n\tconst atLeastOneActiveClient: AcceptanceCondition<FuzzTestState> = ({ activeCollaborators }) =>\n\t\tactiveCollaborators.length > 0;\n\tconst opWeights: AsyncWeights<Operation, FuzzTestState> = [\n\t\t[makeEditGenerator(config.editConfig, config.joinConfig), config.editWeight, atLeastOneActiveClient],\n\t\t[\n\t\t\tmakeJoinGenerator(config.joinConfig),\n\t\t\tconfig.joinWeight,\n\t\t\tcollaboratorsMatches((count) => count < maximumCollaborators),\n\t\t],\n\t\t[leaveGenerator, config.leaveWeight, atLeastOneClient],\n\t\t// TODO:#5357: Re-enable stashed ops tests\n\t\t// [makeEditGenerator(config.editConfig, config.joinConfig, true), config.stashWeight, atLeastOneActiveClient],\n\t\t[{ type: 'synchronize' }, config.synchronizeWeight, atLeastOneClient],\n\t];\n\treturn createWeightedAsyncGenerator(opWeights);\n}\n\nfunction getIdList(tree: TreeView): NodeId[] {\n\tconst allIds: NodeId[] = [];\n\tconst toVisit: NodeId[] = [tree.root];\n\twhile (toVisit.length > 0) {\n\t\tconst id = toVisit.pop() ?? fail();\n\t\tallIds.push(id);\n\t\tconst node = tree.getViewNode(id);\n\t\tfor (const [_, childIds] of node.traits) {\n\t\t\ttoVisit.push(...childIds);\n\t\t}\n\t}\n\treturn allIds;\n}\n"]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
import { AsyncGenerator } from '@fluid-private/stochastic-test-utils';
|
|
6
|
-
import { FuzzTestState, Operation } from './Types';
|
|
6
|
+
import { FuzzTestState, Operation } from './Types.js';
|
|
7
7
|
/**
|
|
8
8
|
* Performs random actions on a set of clients.
|
|
9
9
|
* @param generator - finite generator for a sequence of Operations to test. The test will run until this generator is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharedTreeFuzzTests.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,cAAc,EAMd,MAAM,sCAAsC,CAAC;AAU9C,OAAO,EAAE,aAAa,EAAwB,SAAS,EAAc,MAAM,
|
|
1
|
+
{"version":3,"file":"SharedTreeFuzzTests.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,cAAc,EAMd,MAAM,sCAAsC,CAAC;AAU9C,OAAO,EAAE,aAAa,EAAwB,SAAS,EAAc,MAAM,YAAY,CAAC;AASxF;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACvC,SAAS,EAAE,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,EACnD,IAAI,EAAE,MAAM,EACZ,gBAAgB,GAAE,OAAc,EAChC,QAAQ,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAgIlC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAiI1D"}
|
|
@@ -6,11 +6,11 @@ import { existsSync, mkdirSync } from 'fs';
|
|
|
6
6
|
import { join } from 'path';
|
|
7
7
|
import { expect } from 'chai';
|
|
8
8
|
import { chainAsync as chain, describeFuzz, makeRandom, takeAsync as take, performFuzzActionsAsync as performFuzzActionsBase, } from '@fluid-private/stochastic-test-utils';
|
|
9
|
-
import { setUpLocalServerTestSharedTree, testDocumentsPathBase, withContainerOffline, } from '../utilities/TestUtilities';
|
|
10
|
-
import { WriteFormat } from '../../persisted-types';
|
|
11
|
-
import { fail } from '../../Common';
|
|
12
|
-
import { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';
|
|
13
|
-
import { makeOpGenerator } from './Generators';
|
|
9
|
+
import { setUpLocalServerTestSharedTree, testDocumentsPathBase, withContainerOffline, } from '../utilities/TestUtilities.js';
|
|
10
|
+
import { WriteFormat } from '../../persisted-types/index.js';
|
|
11
|
+
import { fail } from '../../Common.js';
|
|
12
|
+
import { areRevisionViewsSemanticallyEqual } from '../../EditUtilities.js';
|
|
13
|
+
import { makeOpGenerator } from './Generators.js';
|
|
14
14
|
const directory = join(testDocumentsPathBase, 'fuzz-tests');
|
|
15
15
|
// TODO: Kludge: Use this to change the seed such that the tests avoid hitting bugs in the Fluid Framework.
|
|
16
16
|
// Should be removed once fuzz tests pass reliably with any seed.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SharedTreeFuzzTests.js","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { existsSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport { expect } from 'chai';\nimport {\n\tAsyncGenerator,\n\tchainAsync as chain,\n\tdescribeFuzz,\n\tmakeRandom,\n\ttakeAsync as take,\n\tperformFuzzActionsAsync as performFuzzActionsBase,\n} from '@fluid-private/stochastic-test-utils';\nimport {\n\tsetUpLocalServerTestSharedTree,\n\ttestDocumentsPathBase,\n\twithContainerOffline,\n} from '../utilities/TestUtilities';\nimport { WriteFormat } from '../../persisted-types';\nimport { fail } from '../../Common';\nimport { areRevisionViewsSemanticallyEqual } from '../../EditUtilities';\nimport { SharedTree } from '../../SharedTree';\nimport { FuzzTestState, EditGenerationConfig, Operation, FuzzChange } from './Types';\nimport { makeOpGenerator } from './Generators';\n\nconst directory = join(testDocumentsPathBase, 'fuzz-tests');\n\n// TODO: Kludge: Use this to change the seed such that the tests avoid hitting bugs in the Fluid Framework.\n// Should be removed once fuzz tests pass reliably with any seed.\nconst adjustSeed = 0;\n\n/**\n * Performs random actions on a set of clients.\n * @param generator - finite generator for a sequence of Operations to test. The test will run until this generator is\n * exhausted.\n * @param seed - the seed for the random generation of the fuzz actions\n * @param synchronizeAtEnd - if provided, all client will have all operations delivered from the server at the end of\n * the test\n * @param saveInfo - optionally provide an operation number at which a history of all operations will be saved to disk\n * at a given filepath. This can be useful for debugging why a fuzz test may have failed.\n */\nexport async function performFuzzActions(\n\tgenerator: AsyncGenerator<Operation, FuzzTestState>,\n\tseed: number,\n\tsynchronizeAtEnd: boolean = true,\n\tsaveInfo?: { saveAt?: number; saveOnFailure: boolean; filepath: string }\n): Promise<Required<FuzzTestState>> {\n\tconst random = makeRandom(seed);\n\n\t// Note: the direct fields of `state` aren't mutated, but it is mutated transitively.\n\tconst initialState: FuzzTestState = { random, passiveCollaborators: [], activeCollaborators: [] };\n\tconst finalState = await performFuzzActionsBase(\n\t\tgenerator,\n\t\t{\n\t\t\tedit: async (state, operation) => {\n\t\t\t\tconst { index, contents } = operation;\n\t\t\t\tconst { tree } = state.activeCollaborators[index];\n\t\t\t\tapplyFuzzChange(tree, contents);\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tjoin: async (state, operation) => {\n\t\t\t\tconst { isObserver, summarizeHistory, writeFormat } = operation;\n\t\t\t\tconst { container, tree, testObjectProvider } = await setUpLocalServerTestSharedTree({\n\t\t\t\t\twriteFormat,\n\t\t\t\t\tsummarizeHistory,\n\t\t\t\t\ttestObjectProvider: state.testObjectProvider,\n\t\t\t\t});\n\t\t\t\t(isObserver ? state.passiveCollaborators : state.activeCollaborators).push({ container, tree });\n\t\t\t\treturn { ...state, testObjectProvider };\n\t\t\t},\n\t\t\tleave: async (state, operation) => {\n\t\t\t\tconst { index, isObserver } = operation;\n\t\t\t\tconst treeList = isObserver ? state.passiveCollaborators : state.activeCollaborators;\n\t\t\t\ttreeList[index].container.close();\n\t\t\t\ttreeList.splice(index, 1);\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tstash: async (state, operation) => {\n\t\t\t\tconst { index, contents, writeFormat, summarizeHistory } = operation;\n\t\t\t\tconst testObjectProvider =\n\t\t\t\t\tstate.testObjectProvider ?? fail('Attempted to synchronize with undefined testObjectProvider');\n\n\t\t\t\tconst { container, tree } = state.activeCollaborators[index];\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\tconst { pendingLocalState } = await withContainerOffline(testObjectProvider, container, () => {\n\t\t\t\t\tapplyFuzzChange(tree, contents);\n\t\t\t\t});\n\n\t\t\t\tconst {\n\t\t\t\t\tcontainer: newContainer,\n\t\t\t\t\ttree: newTree,\n\t\t\t\t\ttestObjectProvider: newTestObjectProvider,\n\t\t\t\t} = await setUpLocalServerTestSharedTree({\n\t\t\t\t\twriteFormat,\n\t\t\t\t\tsummarizeHistory,\n\t\t\t\t\ttestObjectProvider,\n\t\t\t\t\tpendingLocalState,\n\t\t\t\t});\n\n\t\t\t\tstate.activeCollaborators.splice(index, 1, { container: newContainer, tree: newTree });\n\t\t\t\tawait newTestObjectProvider.ensureSynchronized();\n\t\t\t\tawait newTestObjectProvider.ensureSynchronized(); // Synchronize twice in case stashed ops caused an upgrade round-trip\n\t\t\t\treturn { ...state, testObjectProvider: newTestObjectProvider };\n\t\t\t},\n\t\t\tsynchronize: async (state) => {\n\t\t\t\tconst { testObjectProvider } = state;\n\t\t\t\tif (testObjectProvider === undefined) {\n\t\t\t\t\tfail('Attempted to synchronize with undefined testObjectProvider');\n\t\t\t\t}\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\tconst trees = [...state.activeCollaborators, ...state.passiveCollaborators];\n\t\t\t\tif (trees.length > 1) {\n\t\t\t\t\tconst first = trees[0].tree;\n\t\t\t\t\tfor (let i = 1; i < trees.length; i++) {\n\t\t\t\t\t\tconst tree = trees[i].tree;\n\t\t\t\t\t\tconst editLogA = first.edits;\n\t\t\t\t\t\tconst editLogB = tree.edits;\n\t\t\t\t\t\tconst minEdits = Math.min(editLogA.length, editLogB.length);\n\t\t\t\t\t\tfor (let j = 0; j < minEdits - 1; j++) {\n\t\t\t\t\t\t\tconst editA = editLogA.tryGetEditAtIndex(editLogA.length - j - 1);\n\t\t\t\t\t\t\tconst editB = editLogB.tryGetEditAtIndex(editLogB.length - j - 1);\n\t\t\t\t\t\t\texpect(editA).to.not.be.undefined;\n\t\t\t\t\t\t\texpect(editA?.id).to.equal(editB?.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\texpect(areRevisionViewsSemanticallyEqual(tree.currentView, tree, first.currentView, first)).to\n\t\t\t\t\t\t\t.be.true;\n\n\t\t\t\t\t\tfor (const node of tree.currentView) {\n\t\t\t\t\t\t\texpect(tree.attributeNodeId(node.identifier)).to.equal(\n\t\t\t\t\t\t\t\tfirst.attributeNodeId(\n\t\t\t\t\t\t\t\t\tfirst.convertToNodeId(tree.convertToStableNodeId(node.identifier))\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state;\n\t\t\t},\n\t\t},\n\t\tinitialState,\n\t\tsaveInfo\n\t);\n\n\tif (synchronizeAtEnd) {\n\t\tif (finalState.testObjectProvider !== undefined) {\n\t\t\tawait finalState.testObjectProvider.ensureSynchronized();\n\t\t\tconst events = finalState.testObjectProvider.logger.reportAndClearTrackedEvents();\n\t\t\texpect(events.expectedNotFound.length).to.equal(0);\n\t\t\tfor (const event of events.unexpectedErrors) {\n\t\t\t\tswitch (event.eventName) {\n\t\t\t\t\t// Tolerate failed edit chunk uploads, because they are fire-and-forget and can fail (e.g. the uploading client leaves before upload completes).\n\t\t\t\t\tcase 'fluid:telemetry:FluidDataStoreRuntime:SharedTree:EditChunkUploadFailure':\n\t\t\t\t\t// TODO:#1120\n\t\t\t\t\tcase 'fluid:telemetry:OrderedClientElection:InitialElectedClientNotFound':\n\t\t\t\t\t// Summary nacks can happen as part of normal operation and are handled by the framework\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:Running:SummaryNack':\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:summarizingError':\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:Running:Summarize_cancel':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\texpect.fail(`Unexpected error event: ${event.eventName}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst trees = [\n\t\t\t...finalState.activeCollaborators.map(({ tree }) => tree),\n\t\t\t...finalState.passiveCollaborators.map(({ tree }) => tree),\n\t\t];\n\t\tfor (let i = 0; i < trees.length - 1; i++) {\n\t\t\texpect(trees[i].equals(trees[i + 1]));\n\t\t}\n\t}\n\n\treturn finalState as Required<FuzzTestState>;\n}\n\nexport function runSharedTreeFuzzTests(title: string): void {\n\t// Some useful tips for debugging fuzz tests:\n\t// - A JSON dump of the operation sequence can be written to disk by passing `true` for `saveOnFailure`.\n\t// - Different shared-tree instances can be distinguished (e.g. in logs) by using `tree.getRuntime().clientId`\n\tdescribeFuzz(title, ({ testCount }) => {\n\t\tfunction runTest(\n\t\t\tgeneratorFactory: () => AsyncGenerator<Operation, FuzzTestState>,\n\t\t\tseed: number,\n\t\t\tsaveOnFailure?: boolean\n\t\t): void {\n\t\t\tit(`with seed ${seed}`, async () => {\n\t\t\t\tconst saveInfo =\n\t\t\t\t\tsaveOnFailure !== undefined\n\t\t\t\t\t\t? { filepath: join(directory, `test-history-${seed}.json`), saveOnFailure }\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (saveInfo !== undefined && !existsSync(directory)) {\n\t\t\t\t\tmkdirSync(directory);\n\t\t\t\t}\n\t\t\t\tawait performFuzzActions(generatorFactory(), seed + adjustSeed, true, saveInfo);\n\t\t\t}).timeout(10000);\n\t\t}\n\n\t\tfunction runMixedVersionTests(summarizeHistory: boolean, testsPerSuite: number, testLength: number): void {\n\t\t\tdescribe('using 0.0.2 and 0.1.1 trees', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(testLength, makeOpGenerator({ joinConfig: { summarizeHistory: [summarizeHistory] } })),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.0.2', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\ttestLength,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.1.1', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\ttestLength,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('upgrading halfway through', () => {\n\t\t\t\tconst maximumActiveCollaborators = 10;\n\t\t\t\tconst maximumPassiveCollaborators = 5;\n\t\t\t\tconst editConfig: EditGenerationConfig = { maxTreeSize: 1000 };\n\t\t\t\tconst generatorFactory = () =>\n\t\t\t\t\tchain(\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2 - 1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators: maximumActiveCollaborators + 1,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\teditWeight: 0,\n\t\t\t\t\t\t\t\tjoinWeight: 1,\n\t\t\t\t\t\t\t\tleaveWeight: 0,\n\t\t\t\t\t\t\t\tsynchronizeWeight: 0,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(generatorFactory, seed);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst testLength = 200;\n\t\tdescribe('with no-history summarization', () => {\n\t\t\trunMixedVersionTests(false, testCount, testLength);\n\t\t});\n\n\t\tdescribe('with history summarization', () => {\n\t\t\trunMixedVersionTests(true, testCount, testLength);\n\t\t});\n\t});\n}\n\nfunction applyFuzzChange(tree: SharedTree, contents: FuzzChange): void {\n\tswitch (contents.fuzzType) {\n\t\tcase 'insert':\n\t\t\ttree.applyEdit(contents.build, contents.insert);\n\t\t\tbreak;\n\n\t\tcase 'delete':\n\t\t\ttree.applyEdit(contents);\n\t\t\tbreak;\n\n\t\tcase 'move':\n\t\t\ttree.applyEdit(contents.detach, contents.insert);\n\t\t\tbreak;\n\n\t\tcase 'setPayload':\n\t\t\ttree.applyEdit(contents);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail('Invalid edit.');\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"SharedTreeFuzzTests.js","sourceRoot":"","sources":["../../../src/test/fuzz/SharedTreeFuzzTests.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { existsSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport { expect } from 'chai';\nimport {\n\tAsyncGenerator,\n\tchainAsync as chain,\n\tdescribeFuzz,\n\tmakeRandom,\n\ttakeAsync as take,\n\tperformFuzzActionsAsync as performFuzzActionsBase,\n} from '@fluid-private/stochastic-test-utils';\nimport {\n\tsetUpLocalServerTestSharedTree,\n\ttestDocumentsPathBase,\n\twithContainerOffline,\n} from '../utilities/TestUtilities.js';\nimport { WriteFormat } from '../../persisted-types/index.js';\nimport { fail } from '../../Common.js';\nimport { areRevisionViewsSemanticallyEqual } from '../../EditUtilities.js';\nimport { SharedTree } from '../../SharedTree.js';\nimport { FuzzTestState, EditGenerationConfig, Operation, FuzzChange } from './Types.js';\nimport { makeOpGenerator } from './Generators.js';\n\nconst directory = join(testDocumentsPathBase, 'fuzz-tests');\n\n// TODO: Kludge: Use this to change the seed such that the tests avoid hitting bugs in the Fluid Framework.\n// Should be removed once fuzz tests pass reliably with any seed.\nconst adjustSeed = 0;\n\n/**\n * Performs random actions on a set of clients.\n * @param generator - finite generator for a sequence of Operations to test. The test will run until this generator is\n * exhausted.\n * @param seed - the seed for the random generation of the fuzz actions\n * @param synchronizeAtEnd - if provided, all client will have all operations delivered from the server at the end of\n * the test\n * @param saveInfo - optionally provide an operation number at which a history of all operations will be saved to disk\n * at a given filepath. This can be useful for debugging why a fuzz test may have failed.\n */\nexport async function performFuzzActions(\n\tgenerator: AsyncGenerator<Operation, FuzzTestState>,\n\tseed: number,\n\tsynchronizeAtEnd: boolean = true,\n\tsaveInfo?: { saveAt?: number; saveOnFailure: boolean; filepath: string }\n): Promise<Required<FuzzTestState>> {\n\tconst random = makeRandom(seed);\n\n\t// Note: the direct fields of `state` aren't mutated, but it is mutated transitively.\n\tconst initialState: FuzzTestState = { random, passiveCollaborators: [], activeCollaborators: [] };\n\tconst finalState = await performFuzzActionsBase(\n\t\tgenerator,\n\t\t{\n\t\t\tedit: async (state, operation) => {\n\t\t\t\tconst { index, contents } = operation;\n\t\t\t\tconst { tree } = state.activeCollaborators[index];\n\t\t\t\tapplyFuzzChange(tree, contents);\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tjoin: async (state, operation) => {\n\t\t\t\tconst { isObserver, summarizeHistory, writeFormat } = operation;\n\t\t\t\tconst { container, tree, testObjectProvider } = await setUpLocalServerTestSharedTree({\n\t\t\t\t\twriteFormat,\n\t\t\t\t\tsummarizeHistory,\n\t\t\t\t\ttestObjectProvider: state.testObjectProvider,\n\t\t\t\t});\n\t\t\t\t(isObserver ? state.passiveCollaborators : state.activeCollaborators).push({ container, tree });\n\t\t\t\treturn { ...state, testObjectProvider };\n\t\t\t},\n\t\t\tleave: async (state, operation) => {\n\t\t\t\tconst { index, isObserver } = operation;\n\t\t\t\tconst treeList = isObserver ? state.passiveCollaborators : state.activeCollaborators;\n\t\t\t\ttreeList[index].container.close();\n\t\t\t\ttreeList.splice(index, 1);\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tstash: async (state, operation) => {\n\t\t\t\tconst { index, contents, writeFormat, summarizeHistory } = operation;\n\t\t\t\tconst testObjectProvider =\n\t\t\t\t\tstate.testObjectProvider ?? fail('Attempted to synchronize with undefined testObjectProvider');\n\n\t\t\t\tconst { container, tree } = state.activeCollaborators[index];\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\tconst { pendingLocalState } = await withContainerOffline(testObjectProvider, container, () => {\n\t\t\t\t\tapplyFuzzChange(tree, contents);\n\t\t\t\t});\n\n\t\t\t\tconst {\n\t\t\t\t\tcontainer: newContainer,\n\t\t\t\t\ttree: newTree,\n\t\t\t\t\ttestObjectProvider: newTestObjectProvider,\n\t\t\t\t} = await setUpLocalServerTestSharedTree({\n\t\t\t\t\twriteFormat,\n\t\t\t\t\tsummarizeHistory,\n\t\t\t\t\ttestObjectProvider,\n\t\t\t\t\tpendingLocalState,\n\t\t\t\t});\n\n\t\t\t\tstate.activeCollaborators.splice(index, 1, { container: newContainer, tree: newTree });\n\t\t\t\tawait newTestObjectProvider.ensureSynchronized();\n\t\t\t\tawait newTestObjectProvider.ensureSynchronized(); // Synchronize twice in case stashed ops caused an upgrade round-trip\n\t\t\t\treturn { ...state, testObjectProvider: newTestObjectProvider };\n\t\t\t},\n\t\t\tsynchronize: async (state) => {\n\t\t\t\tconst { testObjectProvider } = state;\n\t\t\t\tif (testObjectProvider === undefined) {\n\t\t\t\t\tfail('Attempted to synchronize with undefined testObjectProvider');\n\t\t\t\t}\n\t\t\t\tawait testObjectProvider.ensureSynchronized();\n\t\t\t\tconst trees = [...state.activeCollaborators, ...state.passiveCollaborators];\n\t\t\t\tif (trees.length > 1) {\n\t\t\t\t\tconst first = trees[0].tree;\n\t\t\t\t\tfor (let i = 1; i < trees.length; i++) {\n\t\t\t\t\t\tconst tree = trees[i].tree;\n\t\t\t\t\t\tconst editLogA = first.edits;\n\t\t\t\t\t\tconst editLogB = tree.edits;\n\t\t\t\t\t\tconst minEdits = Math.min(editLogA.length, editLogB.length);\n\t\t\t\t\t\tfor (let j = 0; j < minEdits - 1; j++) {\n\t\t\t\t\t\t\tconst editA = editLogA.tryGetEditAtIndex(editLogA.length - j - 1);\n\t\t\t\t\t\t\tconst editB = editLogB.tryGetEditAtIndex(editLogB.length - j - 1);\n\t\t\t\t\t\t\texpect(editA).to.not.be.undefined;\n\t\t\t\t\t\t\texpect(editA?.id).to.equal(editB?.id);\n\t\t\t\t\t\t}\n\t\t\t\t\t\texpect(areRevisionViewsSemanticallyEqual(tree.currentView, tree, first.currentView, first)).to\n\t\t\t\t\t\t\t.be.true;\n\n\t\t\t\t\t\tfor (const node of tree.currentView) {\n\t\t\t\t\t\t\texpect(tree.attributeNodeId(node.identifier)).to.equal(\n\t\t\t\t\t\t\t\tfirst.attributeNodeId(\n\t\t\t\t\t\t\t\t\tfirst.convertToNodeId(tree.convertToStableNodeId(node.identifier))\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn state;\n\t\t\t},\n\t\t},\n\t\tinitialState,\n\t\tsaveInfo\n\t);\n\n\tif (synchronizeAtEnd) {\n\t\tif (finalState.testObjectProvider !== undefined) {\n\t\t\tawait finalState.testObjectProvider.ensureSynchronized();\n\t\t\tconst events = finalState.testObjectProvider.logger.reportAndClearTrackedEvents();\n\t\t\texpect(events.expectedNotFound.length).to.equal(0);\n\t\t\tfor (const event of events.unexpectedErrors) {\n\t\t\t\tswitch (event.eventName) {\n\t\t\t\t\t// Tolerate failed edit chunk uploads, because they are fire-and-forget and can fail (e.g. the uploading client leaves before upload completes).\n\t\t\t\t\tcase 'fluid:telemetry:FluidDataStoreRuntime:SharedTree:EditChunkUploadFailure':\n\t\t\t\t\t// TODO:#1120\n\t\t\t\t\tcase 'fluid:telemetry:OrderedClientElection:InitialElectedClientNotFound':\n\t\t\t\t\t// Summary nacks can happen as part of normal operation and are handled by the framework\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:Running:SummaryNack':\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:summarizingError':\n\t\t\t\t\tcase 'fluid:telemetry:Summarizer:Running:Summarize_cancel':\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\texpect.fail(`Unexpected error event: ${event.eventName}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst trees = [\n\t\t\t...finalState.activeCollaborators.map(({ tree }) => tree),\n\t\t\t...finalState.passiveCollaborators.map(({ tree }) => tree),\n\t\t];\n\t\tfor (let i = 0; i < trees.length - 1; i++) {\n\t\t\texpect(trees[i].equals(trees[i + 1]));\n\t\t}\n\t}\n\n\treturn finalState as Required<FuzzTestState>;\n}\n\nexport function runSharedTreeFuzzTests(title: string): void {\n\t// Some useful tips for debugging fuzz tests:\n\t// - A JSON dump of the operation sequence can be written to disk by passing `true` for `saveOnFailure`.\n\t// - Different shared-tree instances can be distinguished (e.g. in logs) by using `tree.getRuntime().clientId`\n\tdescribeFuzz(title, ({ testCount }) => {\n\t\tfunction runTest(\n\t\t\tgeneratorFactory: () => AsyncGenerator<Operation, FuzzTestState>,\n\t\t\tseed: number,\n\t\t\tsaveOnFailure?: boolean\n\t\t): void {\n\t\t\tit(`with seed ${seed}`, async () => {\n\t\t\t\tconst saveInfo =\n\t\t\t\t\tsaveOnFailure !== undefined\n\t\t\t\t\t\t? { filepath: join(directory, `test-history-${seed}.json`), saveOnFailure }\n\t\t\t\t\t\t: undefined;\n\t\t\t\tif (saveInfo !== undefined && !existsSync(directory)) {\n\t\t\t\t\tmkdirSync(directory);\n\t\t\t\t}\n\t\t\t\tawait performFuzzActions(generatorFactory(), seed + adjustSeed, true, saveInfo);\n\t\t\t}).timeout(10000);\n\t\t}\n\n\t\tfunction runMixedVersionTests(summarizeHistory: boolean, testsPerSuite: number, testLength: number): void {\n\t\t\tdescribe('using 0.0.2 and 0.1.1 trees', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(testLength, makeOpGenerator({ joinConfig: { summarizeHistory: [summarizeHistory] } })),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.0.2', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\ttestLength,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('using only version 0.1.1', () => {\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t\ttestLength,\n\t\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\tseed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tdescribe('upgrading halfway through', () => {\n\t\t\t\tconst maximumActiveCollaborators = 10;\n\t\t\t\tconst maximumPassiveCollaborators = 5;\n\t\t\t\tconst editConfig: EditGenerationConfig = { maxTreeSize: 1000 };\n\t\t\t\tconst generatorFactory = () =>\n\t\t\t\t\tchain(\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2 - 1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_0_2],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators: maximumActiveCollaborators + 1,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\twriteFormat: [WriteFormat.v0_1_1],\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\teditWeight: 0,\n\t\t\t\t\t\t\t\tjoinWeight: 1,\n\t\t\t\t\t\t\t\tleaveWeight: 0,\n\t\t\t\t\t\t\t\tsynchronizeWeight: 0,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t\ttake(\n\t\t\t\t\t\t\ttestLength / 2,\n\t\t\t\t\t\t\tmakeOpGenerator({\n\t\t\t\t\t\t\t\teditConfig,\n\t\t\t\t\t\t\t\tjoinConfig: {\n\t\t\t\t\t\t\t\t\tmaximumActiveCollaborators,\n\t\t\t\t\t\t\t\t\tmaximumPassiveCollaborators,\n\t\t\t\t\t\t\t\t\tsummarizeHistory: [summarizeHistory],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\t\t\t\tfor (let seed = 0; seed < testsPerSuite; seed++) {\n\t\t\t\t\trunTest(generatorFactory, seed);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tconst testLength = 200;\n\t\tdescribe('with no-history summarization', () => {\n\t\t\trunMixedVersionTests(false, testCount, testLength);\n\t\t});\n\n\t\tdescribe('with history summarization', () => {\n\t\t\trunMixedVersionTests(true, testCount, testLength);\n\t\t});\n\t});\n}\n\nfunction applyFuzzChange(tree: SharedTree, contents: FuzzChange): void {\n\tswitch (contents.fuzzType) {\n\t\tcase 'insert':\n\t\t\ttree.applyEdit(contents.build, contents.insert);\n\t\t\tbreak;\n\n\t\tcase 'delete':\n\t\t\ttree.applyEdit(contents);\n\t\t\tbreak;\n\n\t\tcase 'move':\n\t\t\ttree.applyEdit(contents.detach, contents.insert);\n\t\t\tbreak;\n\n\t\tcase 'setPayload':\n\t\t\ttree.applyEdit(contents);\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tfail('Invalid edit.');\n\t}\n}\n"]}
|
package/lib/test/fuzz/Types.d.ts
CHANGED
|
@@ -6,12 +6,12 @@ import type { TestObjectProvider } from '@fluidframework/test-utils';
|
|
|
6
6
|
import type { IContainer } from '@fluidframework/container-definitions';
|
|
7
7
|
import type { BaseFuzzTestState } from '@fluid-private/stochastic-test-utils';
|
|
8
8
|
import type { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';
|
|
9
|
-
import type { SharedTree } from '../../SharedTree';
|
|
10
|
-
import type { WriteFormat } from '../../persisted-types';
|
|
11
|
-
import type { Build, Detach, Insert, SetValue } from '../../ChangeTypes';
|
|
12
|
-
import type { TreeView } from '../../TreeView';
|
|
13
|
-
import type { NodeId } from '../../Identifiers';
|
|
14
|
-
import type { NodeIdGenerator } from '../../NodeIdUtilities';
|
|
9
|
+
import type { SharedTree } from '../../SharedTree.js';
|
|
10
|
+
import type { WriteFormat } from '../../persisted-types/index.js';
|
|
11
|
+
import type { Build, Detach, Insert, SetValue } from '../../ChangeTypes.js';
|
|
12
|
+
import type { TreeView } from '../../TreeView.js';
|
|
13
|
+
import type { NodeId } from '../../Identifiers.js';
|
|
14
|
+
import type { NodeIdGenerator } from '../../NodeIdUtilities.js';
|
|
15
15
|
export interface FuzzTestState extends BaseFuzzTestState {
|
|
16
16
|
testObjectProvider?: TestObjectProvider;
|
|
17
17
|
activeCollaborators: Collaborator[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"Types.d.ts","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { TestObjectProvider } from '@fluidframework/test-utils';\nimport type { IContainer } from '@fluidframework/container-definitions';\nimport type { BaseFuzzTestState } from '@fluid-private/stochastic-test-utils';\nimport type { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';\nimport type { SharedTree } from '../../SharedTree';\nimport type { WriteFormat } from '../../persisted-types';\nimport type { Build, Detach, Insert, SetValue } from '../../ChangeTypes';\nimport type { TreeView } from '../../TreeView';\nimport type { NodeId } from '../../Identifiers';\nimport type { NodeIdGenerator } from '../../NodeIdUtilities';\n\nexport interface FuzzTestState extends BaseFuzzTestState {\n\ttestObjectProvider?: TestObjectProvider;\n\tactiveCollaborators: Collaborator[];\n\tpassiveCollaborators: Collaborator[];\n}\n\nexport interface Collaborator {\n\tcontainer: IContainer;\n\ttree: SharedTree;\n}\n\nexport interface TreeEdit {\n\ttype: 'edit';\n\tcontents: FuzzChange;\n\t/** index of the tree to apply the edit to. */\n\tindex: number;\n}\n\nexport interface TreeJoin {\n\ttype: 'join';\n\tsummarizeHistory: boolean;\n\twriteFormat: WriteFormat;\n\tisObserver: boolean;\n}\n\nexport interface TreeLeave {\n\ttype: 'leave';\n\tisObserver: boolean;\n\tindex: number;\n}\n\n/** Applies an edit after disconnecting the container, then rejoins */\nexport interface TreeStash {\n\ttype: 'stash';\n\tcontents: FuzzChange;\n\tsummarizeHistory: boolean;\n\twriteFormat: WriteFormat;\n\tindex: number;\n}\n\nexport interface Synchronize {\n\ttype: 'synchronize';\n}\n\n/**\n * Operations:\n * - Any valid edit on any shared tree\n * - New SharedTree joins session with some initial params\n * - Existing SharedTree leaves session\n * - Local server synchronizes connected clients\n *\n * Note that these objects should be JSON serializable for ease in debugging fuzz tests.\n * Future potential work:\n * - More fine-grained control of summarization processes\n */\nexport type Operation = TreeEdit | TreeJoin | TreeLeave | TreeStash | Synchronize;\n\nexport interface FuzzInsert {\n\tfuzzType: 'insert';\n\tbuild: Build;\n\tinsert: Insert;\n}\n\nexport type FuzzDelete = Detach & { fuzzType: 'delete' };\n\nexport interface FuzzMove {\n\tfuzzType: 'move';\n\tdetach: Detach;\n\tinsert: Insert;\n}\n\nexport type FuzzSetPayload = SetValue & { fuzzType: 'setPayload' };\n\nexport type FuzzChange = FuzzInsert | FuzzDelete | FuzzMove | FuzzSetPayload;\n\nexport interface TreeContext {\n\tview: TreeView;\n\tidGenerator: NodeIdGenerator;\n\tidList: NodeId[];\n\tdataStoreRuntime: IFluidDataStoreRuntime;\n}\n\nexport interface InsertGenerationConfig {\n\t/** default: 3 */\n\tmaxTreeSequenceSize?: number;\n\t/** The number of possible definitions. Default: 20. */\n\tdefinitionPoolSize?: number;\n}\n\nexport interface EditGenerationConfig {\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaxTreeSize?: number;\n\t/** default: 3 */\n\tinsertWeight?: number;\n\t/** default: 1 */\n\tdeleteWeight?: number;\n\t/** default: 1 */\n\tmoveWeight?: number;\n\t/** default: 1 */\n\tsetPayloadWeight?: number;\n\tinsertConfig?: InsertGenerationConfig;\n\t/** The number of possible trait labels. Default: 20. */\n\ttraitLabelPoolSize?: number;\n}\n\nexport interface JoinGenerationConfig {\n\t/**\n\t * Valid `summarizeHistory` values. Defaults to [false].\n\t */\n\tsummarizeHistory?: boolean[];\n\t/**\n\t * Valid `writeFormat` values. Defaults to 0.0.2 and 0.1.1.\n\t */\n\twriteFormat?: WriteFormat[];\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumPassiveCollaborators?: number;\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumActiveCollaborators?: number;\n}\n\nexport interface OperationGenerationConfig {\n\teditConfig?: EditGenerationConfig;\n\tjoinConfig?: JoinGenerationConfig;\n\t/** default: 100 */\n\teditWeight?: number;\n\t/** default: 10 */\n\tjoinWeight?: number;\n\t/** default: 10 */\n\tleaveWeight?: number;\n\t/** default: 1 */\n\tstashWeight?: number;\n\t/** default: 10 */\n\tsynchronizeWeight?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../src/test/fuzz/Types.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type { TestObjectProvider } from '@fluidframework/test-utils';\nimport type { IContainer } from '@fluidframework/container-definitions';\nimport type { BaseFuzzTestState } from '@fluid-private/stochastic-test-utils';\nimport type { IFluidDataStoreRuntime } from '@fluidframework/datastore-definitions';\nimport type { SharedTree } from '../../SharedTree.js';\nimport type { WriteFormat } from '../../persisted-types/index.js';\nimport type { Build, Detach, Insert, SetValue } from '../../ChangeTypes.js';\nimport type { TreeView } from '../../TreeView.js';\nimport type { NodeId } from '../../Identifiers.js';\nimport type { NodeIdGenerator } from '../../NodeIdUtilities.js';\n\nexport interface FuzzTestState extends BaseFuzzTestState {\n\ttestObjectProvider?: TestObjectProvider;\n\tactiveCollaborators: Collaborator[];\n\tpassiveCollaborators: Collaborator[];\n}\n\nexport interface Collaborator {\n\tcontainer: IContainer;\n\ttree: SharedTree;\n}\n\nexport interface TreeEdit {\n\ttype: 'edit';\n\tcontents: FuzzChange;\n\t/** index of the tree to apply the edit to. */\n\tindex: number;\n}\n\nexport interface TreeJoin {\n\ttype: 'join';\n\tsummarizeHistory: boolean;\n\twriteFormat: WriteFormat;\n\tisObserver: boolean;\n}\n\nexport interface TreeLeave {\n\ttype: 'leave';\n\tisObserver: boolean;\n\tindex: number;\n}\n\n/** Applies an edit after disconnecting the container, then rejoins */\nexport interface TreeStash {\n\ttype: 'stash';\n\tcontents: FuzzChange;\n\tsummarizeHistory: boolean;\n\twriteFormat: WriteFormat;\n\tindex: number;\n}\n\nexport interface Synchronize {\n\ttype: 'synchronize';\n}\n\n/**\n * Operations:\n * - Any valid edit on any shared tree\n * - New SharedTree joins session with some initial params\n * - Existing SharedTree leaves session\n * - Local server synchronizes connected clients\n *\n * Note that these objects should be JSON serializable for ease in debugging fuzz tests.\n * Future potential work:\n * - More fine-grained control of summarization processes\n */\nexport type Operation = TreeEdit | TreeJoin | TreeLeave | TreeStash | Synchronize;\n\nexport interface FuzzInsert {\n\tfuzzType: 'insert';\n\tbuild: Build;\n\tinsert: Insert;\n}\n\nexport type FuzzDelete = Detach & { fuzzType: 'delete' };\n\nexport interface FuzzMove {\n\tfuzzType: 'move';\n\tdetach: Detach;\n\tinsert: Insert;\n}\n\nexport type FuzzSetPayload = SetValue & { fuzzType: 'setPayload' };\n\nexport type FuzzChange = FuzzInsert | FuzzDelete | FuzzMove | FuzzSetPayload;\n\nexport interface TreeContext {\n\tview: TreeView;\n\tidGenerator: NodeIdGenerator;\n\tidList: NodeId[];\n\tdataStoreRuntime: IFluidDataStoreRuntime;\n}\n\nexport interface InsertGenerationConfig {\n\t/** default: 3 */\n\tmaxTreeSequenceSize?: number;\n\t/** The number of possible definitions. Default: 20. */\n\tdefinitionPoolSize?: number;\n}\n\nexport interface EditGenerationConfig {\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaxTreeSize?: number;\n\t/** default: 3 */\n\tinsertWeight?: number;\n\t/** default: 1 */\n\tdeleteWeight?: number;\n\t/** default: 1 */\n\tmoveWeight?: number;\n\t/** default: 1 */\n\tsetPayloadWeight?: number;\n\tinsertConfig?: InsertGenerationConfig;\n\t/** The number of possible trait labels. Default: 20. */\n\ttraitLabelPoolSize?: number;\n}\n\nexport interface JoinGenerationConfig {\n\t/**\n\t * Valid `summarizeHistory` values. Defaults to [false].\n\t */\n\tsummarizeHistory?: boolean[];\n\t/**\n\t * Valid `writeFormat` values. Defaults to 0.0.2 and 0.1.1.\n\t */\n\twriteFormat?: WriteFormat[];\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumPassiveCollaborators?: number;\n\t/** default: Number.POSITIVE_INFINITY (no max size) */\n\tmaximumActiveCollaborators?: number;\n}\n\nexport interface OperationGenerationConfig {\n\teditConfig?: EditGenerationConfig;\n\tjoinConfig?: JoinGenerationConfig;\n\t/** default: 100 */\n\teditWeight?: number;\n\t/** default: 10 */\n\tjoinWeight?: number;\n\t/** default: 10 */\n\tleaveWeight?: number;\n\t/** default: 1 */\n\tstashWeight?: number;\n\t/** default: 10 */\n\tsynchronizeWeight?: number;\n}\n"]}
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import { Generator, SaveInfo, BaseFuzzTestState } from '@fluid-private/stochastic-test-utils';
|
|
6
6
|
import { ITelemetryBaseLogger } from '@fluidframework/core-interfaces';
|
|
7
|
-
import { ClosedMap } from '../../Common';
|
|
8
|
-
import { IdCompressor } from '../../id-compressor/IdCompressor';
|
|
9
|
-
import { NumericUuid } from '../../id-compressor/NumericUuid';
|
|
10
|
-
import { SessionId, StableId, SessionSpaceCompressedId, AttributionId, OpSpaceCompressedId } from '../../Identifiers';
|
|
11
|
-
import type { IdCreationRange, SerializedIdCompressorWithOngoingSession, SerializedIdCompressorWithNoSession } from '../../id-compressor';
|
|
7
|
+
import { ClosedMap } from '../../Common.js';
|
|
8
|
+
import { IdCompressor } from '../../id-compressor/IdCompressor.js';
|
|
9
|
+
import { NumericUuid } from '../../id-compressor/NumericUuid.js';
|
|
10
|
+
import { SessionId, StableId, SessionSpaceCompressedId, AttributionId, OpSpaceCompressedId } from '../../Identifiers.js';
|
|
11
|
+
import type { IdCreationRange, SerializedIdCompressorWithOngoingSession, SerializedIdCompressorWithNoSession } from '../../id-compressor/index.js';
|
|
12
12
|
/** Identifies a compressor in a network */
|
|
13
13
|
export declare enum Client {
|
|
14
14
|
Client1 = "Client1",
|
|
@@ -58,7 +58,7 @@ export declare const sessionIds: ClientMap<SessionId>;
|
|
|
58
58
|
* An array of session uuids corresponding to all non-local `Client` entries.
|
|
59
59
|
*/
|
|
60
60
|
export declare const sessionNumericUuids: ClientMap<NumericUuid>;
|
|
61
|
-
export declare const attributionIds: ClientMap<import("../../Identifiers").UuidString>;
|
|
61
|
+
export declare const attributionIds: ClientMap<import("../../Identifiers.js").UuidString>;
|
|
62
62
|
/** An immutable view of an `IdCompressor` */
|
|
63
63
|
export interface ReadonlyIdCompressor extends Omit<IdCompressor, 'generateCompressedId' | 'generateCompressedIdRange' | 'takeNextCreationRange' | 'finalizeCreationRange'> {
|
|
64
64
|
readonly clusterCapacity: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IdCompressorTestUtilities.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/IdCompressorTestUtilities.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EACN,SAAS,EAMT,QAAQ,EAER,iBAAiB,EACjB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAsB,SAAS,EAAqB,MAAM,
|
|
1
|
+
{"version":3,"file":"IdCompressorTestUtilities.d.ts","sourceRoot":"","sources":["../../../src/test/utilities/IdCompressorTestUtilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
/* eslint-disable no-bitwise */
|
|
6
6
|
import { expect, assert } from 'chai';
|
|
7
7
|
import { createWeightedGenerator, interleave, makeRandom, performFuzzActions as performFuzzActionsBase, repeat, take, } from '@fluid-private/stochastic-test-utils';
|
|
8
|
-
import { assertNotUndefined, fail, getOrCreate } from '../../Common';
|
|
9
|
-
import { IdCompressor, isLocalId } from '../../id-compressor/IdCompressor';
|
|
10
|
-
import { createSessionId, ensureSessionUuid, numericUuidFromStableId, stableIdFromNumericUuid, } from '../../id-compressor/NumericUuid';
|
|
11
|
-
import { getIds } from '../../id-compressor/IdRange';
|
|
12
|
-
import { assertIsStableId, assertIsUuidString } from '../../UuidUtilities';
|
|
13
|
-
import { expectDefined } from './TestCommon';
|
|
8
|
+
import { assertNotUndefined, fail, getOrCreate } from '../../Common.js';
|
|
9
|
+
import { IdCompressor, isLocalId } from '../../id-compressor/IdCompressor.js';
|
|
10
|
+
import { createSessionId, ensureSessionUuid, numericUuidFromStableId, stableIdFromNumericUuid, } from '../../id-compressor/NumericUuid.js';
|
|
11
|
+
import { getIds } from '../../id-compressor/IdRange.js';
|
|
12
|
+
import { assertIsStableId, assertIsUuidString } from '../../UuidUtilities.js';
|
|
13
|
+
import { expectDefined } from './TestCommon.js';
|
|
14
14
|
/** Identifies a compressor in a network */
|
|
15
15
|
export var Client;
|
|
16
16
|
(function (Client) {
|