@fluidframework/container-runtime 2.0.0-rc.2.0.2 → 2.0.0-rc.3.0.1
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/CHANGELOG.md +23 -0
- package/api-report/container-runtime.api.md +471 -52
- package/dist/batchTracker.d.ts +1 -1
- package/dist/batchTracker.d.ts.map +1 -1
- package/dist/batchTracker.js +4 -4
- package/dist/batchTracker.js.map +1 -1
- package/dist/blobManager.d.ts +33 -30
- package/dist/blobManager.d.ts.map +1 -1
- package/dist/blobManager.js +82 -107
- package/dist/blobManager.js.map +1 -1
- package/dist/channelCollection.d.ts +27 -22
- package/dist/channelCollection.d.ts.map +1 -1
- package/dist/channelCollection.js +155 -165
- package/dist/channelCollection.js.map +1 -1
- package/dist/connectionTelemetry.d.ts +3 -3
- package/dist/connectionTelemetry.d.ts.map +1 -1
- package/dist/connectionTelemetry.js +17 -17
- package/dist/connectionTelemetry.js.map +1 -1
- package/dist/containerHandleContext.d.ts.map +1 -1
- package/dist/containerHandleContext.js +2 -2
- package/dist/containerHandleContext.js.map +1 -1
- package/dist/containerRuntime.d.ts +42 -39
- package/dist/containerRuntime.d.ts.map +1 -1
- package/dist/containerRuntime.js +425 -292
- package/dist/containerRuntime.js.map +1 -1
- package/dist/dataStore.d.ts +1 -1
- package/dist/dataStore.d.ts.map +1 -1
- package/dist/dataStore.js +8 -8
- package/dist/dataStore.js.map +1 -1
- package/dist/dataStoreContext.d.ts +58 -19
- package/dist/dataStoreContext.d.ts.map +1 -1
- package/dist/dataStoreContext.js +169 -114
- package/dist/dataStoreContext.js.map +1 -1
- package/dist/dataStoreContexts.d.ts +1 -0
- package/dist/dataStoreContexts.d.ts.map +1 -1
- package/dist/dataStoreContexts.js +12 -11
- package/dist/dataStoreContexts.js.map +1 -1
- package/dist/dataStoreRegistry.d.ts +5 -1
- package/dist/dataStoreRegistry.d.ts.map +1 -1
- package/dist/dataStoreRegistry.js +4 -4
- package/dist/dataStoreRegistry.js.map +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts +1 -1
- package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/dist/deltaManagerSummarizerProxy.js.map +1 -1
- package/dist/deltaScheduler.d.ts +1 -1
- package/dist/deltaScheduler.d.ts.map +1 -1
- package/dist/deltaScheduler.js +6 -6
- package/dist/deltaScheduler.js.map +1 -1
- package/dist/error.d.ts +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +4 -4
- package/dist/error.js.map +1 -1
- package/dist/gc/garbageCollection.d.ts +3 -2
- package/dist/gc/garbageCollection.d.ts.map +1 -1
- package/dist/gc/garbageCollection.js +23 -23
- package/dist/gc/garbageCollection.js.map +1 -1
- package/dist/gc/gcConfigs.d.ts +2 -2
- package/dist/gc/gcConfigs.d.ts.map +1 -1
- package/dist/gc/gcConfigs.js +4 -5
- package/dist/gc/gcConfigs.js.map +1 -1
- package/dist/gc/gcDefinitions.d.ts +4 -5
- package/dist/gc/gcDefinitions.d.ts.map +1 -1
- package/dist/gc/gcDefinitions.js.map +1 -1
- package/dist/gc/gcHelpers.d.ts +5 -1
- package/dist/gc/gcHelpers.d.ts.map +1 -1
- package/dist/gc/gcHelpers.js +21 -12
- package/dist/gc/gcHelpers.js.map +1 -1
- package/dist/gc/gcSummaryStateTracker.d.ts +2 -2
- package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/dist/gc/gcSummaryStateTracker.js +11 -11
- package/dist/gc/gcSummaryStateTracker.js.map +1 -1
- package/dist/gc/gcTelemetry.d.ts +2 -1
- package/dist/gc/gcTelemetry.d.ts.map +1 -1
- package/dist/gc/gcTelemetry.js +11 -9
- package/dist/gc/gcTelemetry.js.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/dist/gc/gcUnreferencedStateTracker.js +6 -6
- package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/dist/gc/index.d.ts +1 -1
- package/dist/gc/index.d.ts.map +1 -1
- package/dist/gc/index.js +2 -1
- package/dist/gc/index.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +91 -0
- package/dist/messageTypes.d.ts +11 -5
- package/dist/messageTypes.d.ts.map +1 -1
- package/dist/messageTypes.js +4 -0
- package/dist/messageTypes.js.map +1 -1
- package/dist/opLifecycle/batchManager.d.ts.map +1 -1
- package/dist/opLifecycle/batchManager.js.map +1 -1
- package/dist/opLifecycle/definitions.d.ts +2 -20
- package/dist/opLifecycle/definitions.d.ts.map +1 -1
- package/dist/opLifecycle/definitions.js.map +1 -1
- package/dist/opLifecycle/index.d.ts +3 -3
- package/dist/opLifecycle/index.d.ts.map +1 -1
- package/dist/opLifecycle/index.js +3 -1
- package/dist/opLifecycle/index.js.map +1 -1
- package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opCompressor.js +5 -6
- package/dist/opLifecycle/opCompressor.js.map +1 -1
- package/dist/opLifecycle/opDecompressor.d.ts +15 -4
- package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/dist/opLifecycle/opDecompressor.js +62 -63
- package/dist/opLifecycle/opDecompressor.js.map +1 -1
- package/dist/opLifecycle/opGroupingManager.d.ts +2 -1
- package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/dist/opLifecycle/opGroupingManager.js +14 -16
- package/dist/opLifecycle/opGroupingManager.js.map +1 -1
- package/dist/opLifecycle/opSplitter.d.ts +12 -4
- package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
- package/dist/opLifecycle/opSplitter.js +63 -53
- package/dist/opLifecycle/opSplitter.js.map +1 -1
- package/dist/opLifecycle/outbox.d.ts +2 -1
- package/dist/opLifecycle/outbox.d.ts.map +1 -1
- package/dist/opLifecycle/outbox.js +30 -29
- package/dist/opLifecycle/outbox.js.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/dist/opLifecycle/remoteMessageProcessor.js +36 -32
- package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/pendingStateManager.d.ts +1 -1
- package/dist/pendingStateManager.d.ts.map +1 -1
- package/dist/pendingStateManager.js +18 -18
- package/dist/pendingStateManager.js.map +1 -1
- package/dist/public.d.ts +12 -0
- package/dist/scheduleManager.d.ts +1 -1
- package/dist/scheduleManager.d.ts.map +1 -1
- package/dist/scheduleManager.js +28 -24
- package/dist/scheduleManager.js.map +1 -1
- package/dist/storageServiceWithAttachBlobs.d.ts +2 -2
- package/dist/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/dist/storageServiceWithAttachBlobs.js +2 -2
- package/dist/storageServiceWithAttachBlobs.js.map +1 -1
- package/dist/summary/documentSchema.d.ts +209 -0
- package/dist/summary/documentSchema.d.ts.map +1 -0
- package/dist/summary/documentSchema.js +390 -0
- package/dist/summary/documentSchema.js.map +1 -0
- package/dist/summary/index.d.ts +2 -1
- package/dist/summary/index.d.ts.map +1 -1
- package/dist/summary/index.js +4 -1
- package/dist/summary/index.js.map +1 -1
- package/dist/summary/orderedClientElection.d.ts +2 -2
- package/dist/summary/orderedClientElection.d.ts.map +1 -1
- package/dist/summary/orderedClientElection.js +12 -7
- package/dist/summary/orderedClientElection.js.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/dist/summary/runWhileConnectedCoordinator.js +3 -3
- package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/dist/summary/runningSummarizer.d.ts +3 -3
- package/dist/summary/runningSummarizer.d.ts.map +1 -1
- package/dist/summary/runningSummarizer.js +16 -16
- package/dist/summary/runningSummarizer.js.map +1 -1
- package/dist/summary/summarizer.d.ts +3 -2
- package/dist/summary/summarizer.d.ts.map +1 -1
- package/dist/summary/summarizer.js +13 -13
- package/dist/summary/summarizer.js.map +1 -1
- package/dist/summary/summarizerClientElection.d.ts +2 -2
- package/dist/summary/summarizerClientElection.d.ts.map +1 -1
- package/dist/summary/summarizerClientElection.js.map +1 -1
- package/dist/summary/summarizerHeuristics.d.ts +1 -1
- package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
- package/dist/summary/summarizerHeuristics.js +2 -2
- package/dist/summary/summarizerHeuristics.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNode.js +28 -28
- package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeUtils.js +3 -3
- package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js +14 -14
- package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/dist/summary/summarizerTypes.d.ts +5 -3
- package/dist/summary/summarizerTypes.d.ts.map +1 -1
- package/dist/summary/summarizerTypes.js.map +1 -1
- package/dist/summary/summaryCollection.d.ts +2 -2
- package/dist/summary/summaryCollection.d.ts.map +1 -1
- package/dist/summary/summaryCollection.js +7 -7
- package/dist/summary/summaryCollection.js.map +1 -1
- package/dist/summary/summaryFormat.d.ts +6 -17
- package/dist/summary/summaryFormat.d.ts.map +1 -1
- package/dist/summary/summaryFormat.js +8 -8
- package/dist/summary/summaryFormat.js.map +1 -1
- package/dist/summary/summaryGenerator.d.ts +4 -3
- package/dist/summary/summaryGenerator.d.ts.map +1 -1
- package/dist/summary/summaryGenerator.js +17 -17
- package/dist/summary/summaryGenerator.js.map +1 -1
- package/dist/summary/summaryManager.d.ts +1 -1
- package/dist/summary/summaryManager.d.ts.map +1 -1
- package/dist/summary/summaryManager.js +15 -14
- package/dist/summary/summaryManager.js.map +1 -1
- package/internal.d.ts +11 -0
- package/legacy.d.ts +11 -0
- package/lib/batchTracker.d.ts +1 -1
- package/lib/batchTracker.d.ts.map +1 -1
- package/lib/batchTracker.js +2 -2
- package/lib/batchTracker.js.map +1 -1
- package/lib/blobManager.d.ts +33 -30
- package/lib/blobManager.d.ts.map +1 -1
- package/lib/blobManager.js +48 -73
- package/lib/blobManager.js.map +1 -1
- package/lib/channelCollection.d.ts +27 -22
- package/lib/channelCollection.d.ts.map +1 -1
- package/lib/channelCollection.js +96 -106
- package/lib/channelCollection.js.map +1 -1
- package/lib/connectionTelemetry.d.ts +3 -3
- package/lib/connectionTelemetry.d.ts.map +1 -1
- package/lib/connectionTelemetry.js +3 -3
- package/lib/connectionTelemetry.js.map +1 -1
- package/lib/containerHandleContext.d.ts.map +1 -1
- package/lib/containerHandleContext.js +1 -1
- package/lib/containerHandleContext.js.map +1 -1
- package/lib/containerRuntime.d.ts +42 -39
- package/lib/containerRuntime.d.ts.map +1 -1
- package/lib/containerRuntime.js +276 -141
- package/lib/containerRuntime.js.map +1 -1
- package/lib/dataStore.d.ts +1 -1
- package/lib/dataStore.d.ts.map +1 -1
- package/lib/dataStore.js +3 -3
- package/lib/dataStore.js.map +1 -1
- package/lib/dataStoreContext.d.ts +58 -19
- package/lib/dataStoreContext.d.ts.map +1 -1
- package/lib/dataStoreContext.js +107 -52
- package/lib/dataStoreContext.js.map +1 -1
- package/lib/dataStoreContexts.d.ts +1 -0
- package/lib/dataStoreContexts.d.ts.map +1 -1
- package/lib/dataStoreContexts.js +3 -2
- package/lib/dataStoreContexts.js.map +1 -1
- package/lib/dataStoreRegistry.d.ts +5 -1
- package/lib/dataStoreRegistry.d.ts.map +1 -1
- package/lib/dataStoreRegistry.js +1 -1
- package/lib/dataStoreRegistry.js.map +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts +1 -1
- package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -1
- package/lib/deltaManagerSummarizerProxy.js.map +1 -1
- package/lib/deltaScheduler.d.ts +1 -1
- package/lib/deltaScheduler.d.ts.map +1 -1
- package/lib/deltaScheduler.js +1 -1
- package/lib/deltaScheduler.js.map +1 -1
- package/lib/error.d.ts +1 -1
- package/lib/error.d.ts.map +1 -1
- package/lib/error.js +2 -2
- package/lib/error.js.map +1 -1
- package/lib/gc/garbageCollection.d.ts +3 -2
- package/lib/gc/garbageCollection.d.ts.map +1 -1
- package/lib/gc/garbageCollection.js +8 -8
- package/lib/gc/garbageCollection.js.map +1 -1
- package/lib/gc/gcConfigs.d.ts +2 -2
- package/lib/gc/gcConfigs.d.ts.map +1 -1
- package/lib/gc/gcConfigs.js +4 -5
- package/lib/gc/gcConfigs.js.map +1 -1
- package/lib/gc/gcDefinitions.d.ts +4 -5
- package/lib/gc/gcDefinitions.d.ts.map +1 -1
- package/lib/gc/gcDefinitions.js.map +1 -1
- package/lib/gc/gcHelpers.d.ts +5 -1
- package/lib/gc/gcHelpers.d.ts.map +1 -1
- package/lib/gc/gcHelpers.js +10 -2
- package/lib/gc/gcHelpers.js.map +1 -1
- package/lib/gc/gcSummaryStateTracker.d.ts +2 -2
- package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -1
- package/lib/gc/gcSummaryStateTracker.js +2 -2
- package/lib/gc/gcSummaryStateTracker.js.map +1 -1
- package/lib/gc/gcTelemetry.d.ts +2 -1
- package/lib/gc/gcTelemetry.d.ts.map +1 -1
- package/lib/gc/gcTelemetry.js +4 -2
- package/lib/gc/gcTelemetry.js.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
- package/lib/gc/gcUnreferencedStateTracker.js +2 -2
- package/lib/gc/gcUnreferencedStateTracker.js.map +1 -1
- package/lib/gc/index.d.ts +1 -1
- package/lib/gc/index.d.ts.map +1 -1
- package/lib/gc/index.js +1 -1
- package/lib/gc/index.js.map +1 -1
- package/lib/index.d.ts +5 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +5 -2
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +91 -0
- package/lib/messageTypes.d.ts +11 -5
- package/lib/messageTypes.d.ts.map +1 -1
- package/lib/messageTypes.js +4 -0
- package/lib/messageTypes.js.map +1 -1
- package/lib/opLifecycle/batchManager.d.ts.map +1 -1
- package/lib/opLifecycle/batchManager.js.map +1 -1
- package/lib/opLifecycle/definitions.d.ts +2 -20
- package/lib/opLifecycle/definitions.d.ts.map +1 -1
- package/lib/opLifecycle/definitions.js.map +1 -1
- package/lib/opLifecycle/index.d.ts +3 -3
- package/lib/opLifecycle/index.d.ts.map +1 -1
- package/lib/opLifecycle/index.js +2 -2
- package/lib/opLifecycle/index.js.map +1 -1
- package/lib/opLifecycle/opCompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opCompressor.js +2 -3
- package/lib/opLifecycle/opCompressor.js.map +1 -1
- package/lib/opLifecycle/opDecompressor.d.ts +15 -4
- package/lib/opLifecycle/opDecompressor.d.ts.map +1 -1
- package/lib/opLifecycle/opDecompressor.js +61 -62
- package/lib/opLifecycle/opDecompressor.js.map +1 -1
- package/lib/opLifecycle/opGroupingManager.d.ts +2 -1
- package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -1
- package/lib/opLifecycle/opGroupingManager.js +9 -12
- package/lib/opLifecycle/opGroupingManager.js.map +1 -1
- package/lib/opLifecycle/opSplitter.d.ts +12 -4
- package/lib/opLifecycle/opSplitter.d.ts.map +1 -1
- package/lib/opLifecycle/opSplitter.js +47 -38
- package/lib/opLifecycle/opSplitter.js.map +1 -1
- package/lib/opLifecycle/outbox.d.ts +2 -1
- package/lib/opLifecycle/outbox.d.ts.map +1 -1
- package/lib/opLifecycle/outbox.js +19 -18
- package/lib/opLifecycle/outbox.js.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.d.ts +8 -0
- package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
- package/lib/opLifecycle/remoteMessageProcessor.js +36 -32
- package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/pendingStateManager.d.ts +1 -1
- package/lib/pendingStateManager.d.ts.map +1 -1
- package/lib/pendingStateManager.js +2 -2
- package/lib/pendingStateManager.js.map +1 -1
- package/lib/public.d.ts +12 -0
- package/lib/scheduleManager.d.ts +1 -1
- package/lib/scheduleManager.d.ts.map +1 -1
- package/lib/scheduleManager.js +7 -3
- package/lib/scheduleManager.js.map +1 -1
- package/lib/storageServiceWithAttachBlobs.d.ts +2 -2
- package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -1
- package/lib/storageServiceWithAttachBlobs.js +1 -1
- package/lib/storageServiceWithAttachBlobs.js.map +1 -1
- package/lib/summary/documentSchema.d.ts +209 -0
- package/lib/summary/documentSchema.d.ts.map +1 -0
- package/lib/summary/documentSchema.js +386 -0
- package/lib/summary/documentSchema.js.map +1 -0
- package/lib/summary/index.d.ts +2 -1
- package/lib/summary/index.d.ts.map +1 -1
- package/lib/summary/index.js +1 -0
- package/lib/summary/index.js.map +1 -1
- package/lib/summary/orderedClientElection.d.ts +2 -2
- package/lib/summary/orderedClientElection.d.ts.map +1 -1
- package/lib/summary/orderedClientElection.js +7 -2
- package/lib/summary/orderedClientElection.js.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts +1 -1
- package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js +1 -1
- package/lib/summary/runWhileConnectedCoordinator.js.map +1 -1
- package/lib/summary/runningSummarizer.d.ts +3 -3
- package/lib/summary/runningSummarizer.d.ts.map +1 -1
- package/lib/summary/runningSummarizer.js +3 -3
- package/lib/summary/runningSummarizer.js.map +1 -1
- package/lib/summary/summarizer.d.ts +3 -2
- package/lib/summary/summarizer.d.ts.map +1 -1
- package/lib/summary/summarizer.js +3 -3
- package/lib/summary/summarizer.js.map +1 -1
- package/lib/summary/summarizerClientElection.d.ts +2 -2
- package/lib/summary/summarizerClientElection.d.ts.map +1 -1
- package/lib/summary/summarizerClientElection.js.map +1 -1
- package/lib/summary/summarizerHeuristics.d.ts +1 -1
- package/lib/summary/summarizerHeuristics.d.ts.map +1 -1
- package/lib/summary/summarizerHeuristics.js +1 -1
- package/lib/summary/summarizerHeuristics.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.d.ts +3 -2
- package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNode.js +5 -5
- package/lib/summary/summarizerNode/summarizerNode.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js +1 -1
- package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts +2 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js +3 -3
- package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
- package/lib/summary/summarizerTypes.d.ts +5 -3
- package/lib/summary/summarizerTypes.d.ts.map +1 -1
- package/lib/summary/summarizerTypes.js.map +1 -1
- package/lib/summary/summaryCollection.d.ts +2 -2
- package/lib/summary/summaryCollection.d.ts.map +1 -1
- package/lib/summary/summaryCollection.js +1 -1
- package/lib/summary/summaryCollection.js.map +1 -1
- package/lib/summary/summaryFormat.d.ts +6 -17
- package/lib/summary/summaryFormat.d.ts.map +1 -1
- package/lib/summary/summaryFormat.js +3 -3
- package/lib/summary/summaryFormat.js.map +1 -1
- package/lib/summary/summaryGenerator.d.ts +4 -3
- package/lib/summary/summaryGenerator.d.ts.map +1 -1
- package/lib/summary/summaryGenerator.js +4 -4
- package/lib/summary/summaryGenerator.js.map +1 -1
- package/lib/summary/summaryManager.d.ts +1 -1
- package/lib/summary/summaryManager.d.ts.map +1 -1
- package/lib/summary/summaryManager.js +9 -8
- package/lib/summary/summaryManager.js.map +1 -1
- package/package.json +57 -65
- package/src/batchTracker.ts +4 -3
- package/src/blobManager.ts +100 -77
- package/src/channelCollection.ts +180 -165
- package/src/connectionTelemetry.ts +12 -12
- package/src/containerHandleContext.ts +3 -2
- package/src/containerRuntime.ts +481 -277
- package/src/dataStore.ts +9 -4
- package/src/dataStoreContext.ts +195 -93
- package/src/dataStoreContexts.ts +5 -2
- package/src/dataStoreRegistry.ts +3 -2
- package/src/deltaManagerSummarizerProxy.ts +1 -1
- package/src/deltaScheduler.ts +2 -1
- package/src/error.ts +2 -2
- package/src/gc/garbageCollection.ts +21 -20
- package/src/gc/gcConfigs.ts +15 -18
- package/src/gc/gcDefinitions.ts +6 -8
- package/src/gc/gcHelpers.ts +22 -5
- package/src/gc/gcSummaryStateTracker.ts +7 -5
- package/src/gc/gcTelemetry.ts +13 -7
- package/src/gc/gcUnreferencedStateTracker.ts +3 -2
- package/src/gc/index.ts +1 -0
- package/src/index.ts +22 -1
- package/src/messageTypes.ts +20 -6
- package/src/opLifecycle/README.md +89 -0
- package/src/opLifecycle/batchManager.ts +1 -0
- package/src/opLifecycle/definitions.ts +3 -21
- package/src/opLifecycle/index.ts +3 -9
- package/src/opLifecycle/opCompressor.ts +6 -5
- package/src/opLifecycle/opDecompressor.ts +90 -100
- package/src/opLifecycle/opGroupingManager.ts +12 -14
- package/src/opLifecycle/opSplitter.ts +76 -48
- package/src/opLifecycle/outbox.ts +30 -38
- package/src/opLifecycle/remoteMessageProcessor.ts +43 -55
- package/src/packageVersion.ts +1 -1
- package/src/pendingStateManager.ts +6 -6
- package/src/scheduleManager.ts +10 -8
- package/src/storageServiceWithAttachBlobs.ts +2 -2
- package/src/summary/documentSchema.ts +631 -0
- package/src/summary/index.ts +10 -1
- package/src/summary/orderedClientElection.ts +7 -7
- package/src/summary/runWhileConnectedCoordinator.ts +3 -2
- package/src/summary/runningSummarizer.ts +22 -20
- package/src/summary/summarizer.ts +17 -15
- package/src/summary/summarizerClientElection.ts +3 -2
- package/src/summary/summarizerHeuristics.ts +4 -2
- package/src/summary/summarizerNode/summarizerNode.ts +20 -18
- package/src/summary/summarizerNode/summarizerNodeUtils.ts +3 -2
- package/src/summary/summarizerNode/summarizerNodeWithGc.ts +16 -8
- package/src/summary/summarizerTypes.ts +7 -3
- package/src/summary/summaryCollection.ts +3 -3
- package/src/summary/summaryFormat.ts +14 -26
- package/src/summary/summaryGenerator.ts +12 -15
- package/src/summary/summaryManager.ts +16 -13
- package/api-extractor-cjs.json +0 -8
- package/dist/container-runtime-alpha.d.ts +0 -1753
- package/dist/container-runtime-beta.d.ts +0 -268
- package/dist/container-runtime-public.d.ts +0 -268
- package/dist/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/container-runtime-alpha.d.ts +0 -1753
- package/lib/container-runtime-beta.d.ts +0 -268
- package/lib/container-runtime-public.d.ts +0 -268
- package/lib/container-runtime-untrimmed.d.ts +0 -1893
- package/lib/test/batchTracker.spec.js +0 -88
- package/lib/test/batchTracker.spec.js.map +0 -1
- package/lib/test/blobManager.spec.js +0 -835
- package/lib/test/blobManager.spec.js.map +0 -1
- package/lib/test/channelCollection.spec.js +0 -141
- package/lib/test/channelCollection.spec.js.map +0 -1
- package/lib/test/containerRuntime.spec.js +0 -1748
- package/lib/test/containerRuntime.spec.js.map +0 -1
- package/lib/test/dataStoreContext.spec.js +0 -801
- package/lib/test/dataStoreContext.spec.js.map +0 -1
- package/lib/test/dataStoreCreation.spec.js +0 -312
- package/lib/test/dataStoreCreation.spec.js.map +0 -1
- package/lib/test/dataStoreRegistry.spec.js +0 -26
- package/lib/test/dataStoreRegistry.spec.js.map +0 -1
- package/lib/test/fuzz/fuzzUtils.js +0 -66
- package/lib/test/fuzz/fuzzUtils.js.map +0 -1
- package/lib/test/fuzz/summarizer.fuzz.spec.js +0 -31
- package/lib/test/fuzz/summarizer.fuzz.spec.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzMocks.js +0 -162
- package/lib/test/fuzz/summarizerFuzzMocks.js.map +0 -1
- package/lib/test/fuzz/summarizerFuzzSuite.js +0 -106
- package/lib/test/fuzz/summarizerFuzzSuite.js.map +0 -1
- package/lib/test/gc/garbageCollection.spec.js +0 -1465
- package/lib/test/gc/garbageCollection.spec.js.map +0 -1
- package/lib/test/gc/gcConfigs.spec.js +0 -690
- package/lib/test/gc/gcConfigs.spec.js.map +0 -1
- package/lib/test/gc/gcHelpers.spec.js +0 -110
- package/lib/test/gc/gcHelpers.spec.js.map +0 -1
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +0 -68
- package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +0 -1
- package/lib/test/gc/gcStats.spec.js +0 -391
- package/lib/test/gc/gcStats.spec.js.map +0 -1
- package/lib/test/gc/gcSummaryStateTracker.spec.js +0 -228
- package/lib/test/gc/gcSummaryStateTracker.spec.js.map +0 -1
- package/lib/test/gc/gcTelemetry.spec.js +0 -530
- package/lib/test/gc/gcTelemetry.spec.js.map +0 -1
- package/lib/test/gc/gcUnitTestHelpers.js +0 -29
- package/lib/test/gc/gcUnitTestHelpers.js.map +0 -1
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js +0 -192
- package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +0 -1
- package/lib/test/getPendingBlobs.spec.js +0 -193
- package/lib/test/getPendingBlobs.spec.js.map +0 -1
- package/lib/test/hardwareStats.spec.js +0 -93
- package/lib/test/hardwareStats.spec.js.map +0 -1
- package/lib/test/index.js +0 -6
- package/lib/test/index.js.map +0 -1
- package/lib/test/opLifecycle/OpGroupingManager.spec.js +0 -225
- package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/batchManager.spec.js +0 -189
- package/lib/test/opLifecycle/batchManager.spec.js.map +0 -1
- package/lib/test/opLifecycle/opCompressor.spec.js +0 -74
- package/lib/test/opLifecycle/opCompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opDecompressor.spec.js +0 -218
- package/lib/test/opLifecycle/opDecompressor.spec.js.map +0 -1
- package/lib/test/opLifecycle/opSplitter.spec.js +0 -272
- package/lib/test/opLifecycle/opSplitter.spec.js.map +0 -1
- package/lib/test/opLifecycle/outbox.spec.js +0 -675
- package/lib/test/opLifecycle/outbox.spec.js.map +0 -1
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +0 -196
- package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +0 -1
- package/lib/test/pendingStateManager.spec.js +0 -329
- package/lib/test/pendingStateManager.spec.js.map +0 -1
- package/lib/test/scheduleManager.spec.js +0 -270
- package/lib/test/scheduleManager.spec.js.map +0 -1
- package/lib/test/summarizerNode.spec.js +0 -326
- package/lib/test/summarizerNode.spec.js.map +0 -1
- package/lib/test/summarizerNodeWithGc.spec.js +0 -318
- package/lib/test/summarizerNodeWithGc.spec.js.map +0 -1
- package/lib/test/summary/orderedClientElection.spec.js +0 -535
- package/lib/test/summary/orderedClientElection.spec.js.map +0 -1
- package/lib/test/summary/runningSummarizer.spec.js +0 -1349
- package/lib/test/summary/runningSummarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizer.spec.js +0 -29
- package/lib/test/summary/summarizer.spec.js.map +0 -1
- package/lib/test/summary/summarizerClientElection.spec.js +0 -436
- package/lib/test/summary/summarizerClientElection.spec.js.map +0 -1
- package/lib/test/summary/summarizerHeuristics.spec.js +0 -289
- package/lib/test/summary/summarizerHeuristics.spec.js.map +0 -1
- package/lib/test/summary/summaryCollection.spec.js +0 -200
- package/lib/test/summary/summaryCollection.spec.js.map +0 -1
- package/lib/test/summary/summaryManager.spec.js +0 -430
- package/lib/test/summary/summaryManager.spec.js.map +0 -1
- package/lib/test/summary/testQuorumClients.js +0 -34
- package/lib/test/summary/testQuorumClients.js.map +0 -1
- package/lib/test/throttler.spec.js +0 -175
- package/lib/test/throttler.spec.js.map +0 -1
- package/lib/test/types/validateContainerRuntimePrevious.generated.js +0 -180
- package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +0 -1
- /package/{dist → lib}/tsdoc-metadata.json +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreContext.spec.js","sourceRoot":"","sources":["../../src/test/dataStoreContext.spec.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 { strict as assert } from \"assert\";\n\nimport { stringToBuffer } from \"@fluid-internal/client-utils\";\nimport { LazyPromise } from \"@fluidframework/core-utils\";\nimport { AttachState, ContainerErrorTypes } from \"@fluidframework/container-definitions\";\nimport {\n\tFluidObject,\n\tIFluidHandleContext,\n\tTagged,\n\tTelemetryBaseEventPropertyType,\n\tITelemetryBaseLogger,\n} from \"@fluidframework/core-interfaces\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport {\n\tIBlob,\n\tISnapshotTree,\n\tISummaryBlob,\n\tSummaryType,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tIFluidDataStoreContext,\n\tIFluidDataStoreFactory,\n\tIFluidDataStoreRegistry,\n\tIGarbageCollectionData,\n\tIGarbageCollectionDetailsBase,\n\tSummarizeInternalFn,\n\tCreateChildSummarizerNodeFn,\n\tCreateSummarizerNodeSource,\n\tchannelsTreeName,\n\tIFluidDataStoreChannel,\n\tIFluidParentContext,\n} from \"@fluidframework/runtime-definitions\";\nimport { GCDataBuilder, convertSummaryTreeToITree } from \"@fluidframework/runtime-utils\";\nimport {\n\tisFluidError,\n\tMockLogger,\n\tTelemetryDataTag,\n\tcreateChildLogger,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tMockFluidDataStoreRuntime,\n\tvalidateAssertionError,\n} from \"@fluidframework/test-runtime-utils\";\nimport { DataStoreMessageType, FluidObjectHandle } from \"@fluidframework/datastore\";\n\nimport { ChannelCollection, wrapContextForInnerChannel } from \"../channelCollection.js\";\nimport {\n\tLocalDetachedFluidDataStoreContext,\n\tLocalFluidDataStoreContext,\n\tRemoteFluidDataStoreContext,\n} from \"../dataStoreContext.js\";\nimport { ContainerRuntime } from \"../containerRuntime.js\";\nimport { StorageServiceWithAttachBlobs } from \"../storageServiceWithAttachBlobs.js\";\nimport {\n\tcreateRootSummarizerNodeWithGC,\n\tdataStoreAttributesBlobName,\n\tIRootSummarizerNodeWithGC,\n\tReadFluidDataStoreAttributes,\n\tWriteFluidDataStoreAttributes,\n\tsummarizerClientType,\n} from \"../summary/index.js\";\nimport { channelToDataStore } from \"../dataStore.js\";\n\ndescribe(\"Data Store Context Tests\", () => {\n\tconst dataStoreId = \"Test1\";\n\tconst emptyGCData: IGarbageCollectionData = { gcNodes: {} };\n\tlet createSummarizerNodeFn: CreateChildSummarizerNodeFn;\n\n\tdescribe(\"LocalFluidDataStoreContext\", () => {\n\t\tlet localDataStoreContext: LocalFluidDataStoreContext;\n\t\tlet storage: IDocumentStorageService;\n\t\tlet scope: FluidObject;\n\t\tconst makeLocallyVisibleFn = () => {};\n\t\tlet containerRuntime: ContainerRuntime;\n\t\tlet summarizerNode: IRootSummarizerNodeWithGC;\n\n\t\tfunction createContainerRuntime(\n\t\t\tlogger: ITelemetryBaseLogger = createChildLogger(),\n\t\t\tclientDetails = {},\n\t\t\tsubmitMessage = (type: string, contents: any, localOpMetadata: unknown) => {},\n\t\t): ContainerRuntime {\n\t\t\tconst factory: IFluidDataStoreFactory = {\n\t\t\t\ttype: \"store-type\",\n\t\t\t\tget IFluidDataStoreFactory() {\n\t\t\t\t\treturn factory;\n\t\t\t\t},\n\t\t\t\tinstantiateDataStore: async (context: IFluidDataStoreContext) =>\n\t\t\t\t\tnew MockFluidDataStoreRuntime(),\n\t\t\t};\n\t\t\tconst registry: IFluidDataStoreRegistry = {\n\t\t\t\tget IFluidDataStoreRegistry() {\n\t\t\t\t\treturn registry;\n\t\t\t\t},\n\t\t\t\tget: async (pkg) => (pkg === \"BOGUS\" ? undefined : factory),\n\t\t\t};\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\treturn {\n\t\t\t\tIFluidDataStoreRegistry: registry,\n\t\t\t\ton: (event, listener) => {},\n\t\t\t\tlogger,\n\t\t\t\tclientDetails,\n\t\t\t\tsubmitMessage,\n\t\t\t} as ContainerRuntime;\n\t\t}\n\n\t\tbeforeEach(async () => {\n\t\t\tsummarizerNode = createRootSummarizerNodeWithGC(\n\t\t\t\tcreateChildLogger(),\n\t\t\t\t(() => undefined) as unknown as SummarizeInternalFn,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tsummarizerNode.startSummary(0, createChildLogger(), 0);\n\n\t\t\tcreateSummarizerNodeFn = (\n\t\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\t\tgetGCDataFn: () => Promise<IGarbageCollectionData>,\n\t\t\t) =>\n\t\t\t\tsummarizerNode.createChild(\n\t\t\t\t\tsummarizeInternal,\n\t\t\t\t\tdataStoreId,\n\t\t\t\t\t{ type: CreateSummarizerNodeSource.Local },\n\t\t\t\t\tundefined,\n\t\t\t\t\tgetGCDataFn,\n\t\t\t\t);\n\t\t\tcontainerRuntime = createContainerRuntime();\n\t\t});\n\n\t\tdescribe(\"Initialization\", () => {\n\t\t\tit(\"rejects ids with forward slashes\", async () => {\n\t\t\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\t\t\tconst codeBlock = () =>\n\t\t\t\t\tnew LocalFluidDataStoreContext({\n\t\t\t\t\t\tid: invalidId,\n\t\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(invalidId, containerRuntime),\n\t\t\t\t\t\tstorage,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t\t});\n\n\t\t\t\tassert.throws(codeBlock, (e: Error) =>\n\t\t\t\t\tvalidateAssertionError(e, \"Data store ID contains slash\"),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"Errors thrown during realize are wrapped as DataProcessingError\", async () => {\n\t\t\t\tconst fullPackageName = [\"BOGUS1\", \"BOGUS2\"];\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: fullPackageName, // This will cause an error when calling `realizeCore`\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t});\n\n\t\t\t\ttry {\n\t\t\t\t\tawait localDataStoreContext.realize();\n\t\t\t\t\tassert.fail(\"realize should have thrown an error due to empty pkg array\");\n\t\t\t\t} catch (e) {\n\t\t\t\t\tassert(isFluidError(e), \"Expected a valid Fluid Error to be thrown\");\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\te.errorType,\n\t\t\t\t\t\tContainerErrorTypes.dataProcessingError,\n\t\t\t\t\t\t\"Error should be a DataProcessingError\",\n\t\t\t\t\t);\n\t\t\t\t\tconst props = e.getTelemetryProperties();\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\t(props.fullPackageName as Tagged<TelemetryBaseEventPropertyType>)?.value,\n\t\t\t\t\t\tfullPackageName.join(\"/\"),\n\t\t\t\t\t\t\"The error should have the full package name in its telemetry properties\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\t(props.failedPkgPath as Tagged<TelemetryBaseEventPropertyType>)?.value,\n\t\t\t\t\t\t\"BOGUS1\",\n\t\t\t\t\t\t\"The error should have the failed package path in its telemetry properties\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.equal(\n\t\t\t\t\t\t(props.fluidDataStoreId as Tagged<TelemetryBaseEventPropertyType>)?.value,\n\t\t\t\t\t\t\"Test1\",\n\t\t\t\t\t\t\"The error should have the fluidDataStoreId in its telemetry properties\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tit(\"can initialize correctly and generate attributes\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t});\n\n\t\t\t\tawait localDataStoreContext.realize();\n\t\t\t\tconst {\n\t\t\t\t\tattachSummary: { summary },\n\t\t\t\t\ttype,\n\t\t\t\t} = localDataStoreContext.getAttachData(/* includeGCData: */ false);\n\t\t\t\tconst snapshot = convertSummaryTreeToITree(summary);\n\n\t\t\t\tconst attributesEntry = snapshot.entries.find(\n\t\t\t\t\t(e) => e.path === dataStoreAttributesBlobName,\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tattributesEntry !== undefined,\n\t\t\t\t\t\"There is no attributes blob in the summary tree\",\n\t\t\t\t);\n\t\t\t\t// Assume that it is in write format, will see errors if not.\n\t\t\t\tconst contents = JSON.parse(\n\t\t\t\t\t(attributesEntry.value as IBlob).contents,\n\t\t\t\t) as WriteFluidDataStoreAttributes;\n\t\t\t\tconst dataStoreAttributes: WriteFluidDataStoreAttributes = {\n\t\t\t\t\tpkg: JSON.stringify([\"TestDataStore1\"]),\n\t\t\t\t\tsummaryFormatVersion: 2,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t};\n\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.pkg,\n\t\t\t\t\tdataStoreAttributes.pkg,\n\t\t\t\t\t\"Local DataStore package does not match.\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.summaryFormatVersion,\n\t\t\t\t\tdataStoreAttributes.summaryFormatVersion,\n\t\t\t\t\t\"Local DataStore snapshot version does not match.\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.isRootDataStore,\n\t\t\t\t\tdataStoreAttributes.isRootDataStore,\n\t\t\t\t\t\"Local DataStore root state does not match\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(type, \"TestDataStore1\", \"Attach message type does not match.\");\n\t\t\t});\n\n\t\t\tit(\"should generate exception when incorrectly created with array of packages\", async () => {\n\t\t\t\tlet exception = false;\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestComp\", \"SubComp\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\tawait localDataStoreContext.realize().catch((error) => {\n\t\t\t\t\texception = true;\n\t\t\t\t});\n\t\t\t\tassert.strictEqual(exception, true, \"Exception did not occur.\");\n\t\t\t});\n\n\t\t\tit(\"can initialize and generate attributes when correctly created with array of packages\", async () => {\n\t\t\t\tconst registryWithSubRegistries: { [key: string]: any } = {};\n\t\t\t\tregistryWithSubRegistries.IFluidDataStoreFactory = registryWithSubRegistries;\n\t\t\t\tregistryWithSubRegistries.IFluidDataStoreRegistry = registryWithSubRegistries;\n\t\t\t\tregistryWithSubRegistries.get = async (pkg) =>\n\t\t\t\t\tPromise.resolve(registryWithSubRegistries);\n\t\t\t\tregistryWithSubRegistries.instantiateDataStore = async (\n\t\t\t\t\tcontext: IFluidDataStoreContext,\n\t\t\t\t) => new MockFluidDataStoreRuntime();\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\tcontainerRuntime = {\n\t\t\t\t\tIFluidDataStoreRegistry: registryWithSubRegistries,\n\t\t\t\t\ton: (event, listener) => {},\n\t\t\t\t\tclientDetails: {},\n\t\t\t\t} as ContainerRuntime;\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestComp\", \"SubComp\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\tawait localDataStoreContext.realize();\n\n\t\t\t\tconst {\n\t\t\t\t\tattachSummary: { summary },\n\t\t\t\t\ttype,\n\t\t\t\t} = localDataStoreContext.getAttachData(/* includeGCData: */ false);\n\t\t\t\tconst snapshot = convertSummaryTreeToITree(summary);\n\t\t\t\tconst attributesEntry = snapshot.entries.find(\n\t\t\t\t\t(e) => e.path === dataStoreAttributesBlobName,\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tattributesEntry !== undefined,\n\t\t\t\t\t\"There is no attributes blob in the summary tree\",\n\t\t\t\t);\n\t\t\t\tconst contents = JSON.parse(\n\t\t\t\t\t(attributesEntry.value as IBlob).contents,\n\t\t\t\t) as WriteFluidDataStoreAttributes;\n\t\t\t\tconst dataStoreAttributes: WriteFluidDataStoreAttributes = {\n\t\t\t\t\tpkg: JSON.stringify([\"TestComp\", \"SubComp\"]),\n\t\t\t\t\tsummaryFormatVersion: 2,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t};\n\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.pkg,\n\t\t\t\t\tdataStoreAttributes.pkg,\n\t\t\t\t\t\"Local DataStore package does not match.\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.summaryFormatVersion,\n\t\t\t\t\tdataStoreAttributes.summaryFormatVersion,\n\t\t\t\t\t\"Local DataStore snapshot version does not match.\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tcontents.isRootDataStore,\n\t\t\t\t\tdataStoreAttributes.isRootDataStore,\n\t\t\t\t\t\"Local DataStore root state does not match\",\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(type, \"SubComp\", \"Attach message type does not match.\");\n\t\t\t});\n\n\t\t\tit(\"can correctly initialize root context\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t});\n\n\t\t\t\tconst isRootNode = await localDataStoreContext.isRoot();\n\t\t\t\tassert.strictEqual(isRootNode, true, \"The data store should be root.\");\n\t\t\t});\n\n\t\t\tit(\"can correctly initialize non-root context\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\tconst isRootNode = await localDataStoreContext.isRoot();\n\t\t\t\tassert.strictEqual(isRootNode, false, \"The data store should not be root.\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Local data stores in summarizer client\", () => {\n\t\t\tlet mockLogger: MockLogger;\n\t\t\tconst packageName = [\"TestDataStore1\"];\n\t\t\tbeforeEach(async () => {\n\t\t\t\t// Change the container runtime's logger to MockLogger and its type to be a summarizer client.\n\t\t\t\tmockLogger = new MockLogger();\n\t\t\t\tconst clientDetails = {\n\t\t\t\t\tcapabilities: {\n\t\t\t\t\t\tinteractive: false,\n\t\t\t\t\t},\n\t\t\t\t\ttype: summarizerClientType,\n\t\t\t\t};\n\t\t\t\tcontainerRuntime = createContainerRuntime(mockLogger, clientDetails);\n\t\t\t});\n\n\t\t\tit(\"logs when local data store is created in summarizer\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: packageName,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\tconst expectedEvents = [\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"FluidDataStoreContext:DataStoreCreatedInSummarizer\",\n\t\t\t\t\t\tfullPackageName: {\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t\tvalue: packageName.join(\"/\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfluidDataStoreId: {\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\n\t\t\t\t\t\t\tvalue: dataStoreId,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tmockLogger.assertMatch(\n\t\t\t\t\texpectedEvents,\n\t\t\t\t\t\"data store create event not generated as expected\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"logs when local data store sends op in summarizer\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: packageName,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\t\t\t\tawait localDataStoreContext.realize();\n\n\t\t\t\tlocalDataStoreContext.submitMessage(\n\t\t\t\t\tDataStoreMessageType.ChannelOp,\n\t\t\t\t\t\"summarizer message\",\n\t\t\t\t\t{},\n\t\t\t\t);\n\n\t\t\t\tconst expectedEvents = [\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"FluidDataStoreContext:DataStoreMessageSubmittedInSummarizer\",\n\t\t\t\t\t\ttype: DataStoreMessageType.ChannelOp,\n\t\t\t\t\t\tfluidDataStoreId: {\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t\tvalue: dataStoreId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfullPackageName: {\n\t\t\t\t\t\t\ttag: TelemetryDataTag.CodeArtifact,\n\t\t\t\t\t\t\tvalue: packageName.join(\"/\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t\tmockLogger.assertMatch(\n\t\t\t\t\texpectedEvents,\n\t\t\t\t\t\"data store message submitted event not generated as expected\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"logs maximum of 10 local summarizer events per data store\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: packageName,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\t\t\t\tawait localDataStoreContext.realize();\n\n\t\t\t\tlet eventCount = 0;\n\t\t\t\tfor (let i = 0; i < 15; i++) {\n\t\t\t\t\tlocalDataStoreContext.submitMessage(\n\t\t\t\t\t\tDataStoreMessageType.ChannelOp,\n\t\t\t\t\t\t`summarizer message ${i}`,\n\t\t\t\t\t\t{},\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tfor (const event of mockLogger.events) {\n\t\t\t\t\tif (\n\t\t\t\t\t\tevent.eventName ===\n\t\t\t\t\t\t\t\"FluidDataStoreContext:DataStoreMessageSubmittedInSummarizer\" ||\n\t\t\t\t\t\tevent.eventName === \"FluidDataStoreContext:DataStoreCreatedInSummarizer\"\n\t\t\t\t\t) {\n\t\t\t\t\t\teventCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tassert.strictEqual(eventCount, 10, \"There should be only 10 events per data store\");\n\t\t\t});\n\t\t});\n\n\t\tdescribe(\"Garbage Collection\", () => {\n\t\t\tit(\"can generate correct GC data\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t});\n\n\t\t\t\tconst gcData = await localDataStoreContext.getGCData();\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\tgcData,\n\t\t\t\t\temptyGCData,\n\t\t\t\t\t\"GC data from getGCData should be empty.\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"can successfully update referenced state\", () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestComp\", \"SubComp\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\t// Get the summarizer node for this data store which tracks its referenced state.\n\t\t\t\tconst dataStoreSummarizerNode = summarizerNode.getChild(dataStoreId);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\ttrue,\n\t\t\t\t\t\"Data store should be referenced by default\",\n\t\t\t\t);\n\n\t\t\t\t// Update the used routes to not include route to the data store.\n\t\t\t\tlocalDataStoreContext.updateUsedRoutes([]);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"Data store should now be unreferenced\",\n\t\t\t\t);\n\n\t\t\t\t// Add the data store's route (empty string) to its used routes.\n\t\t\t\tlocalDataStoreContext.updateUsedRoutes([\"\"]);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\ttrue,\n\t\t\t\t\t\"Data store should now be referenced\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"can tombstone a local datastore\", async () => {\n\t\t\t\tlocalDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tpkg: [\"TestComp\", \"SubComp\"],\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage,\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t});\n\n\t\t\t\tlocalDataStoreContext.setTombstone(true);\n\t\t\t\tassert(localDataStoreContext.tombstoned, `Local data store should be tombstoned!`);\n\t\t\t\tlocalDataStoreContext.setTombstone(false);\n\t\t\t\tassert(\n\t\t\t\t\t!localDataStoreContext.tombstoned,\n\t\t\t\t\t`Local data store should not be tombstoned!`,\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"RemoteDataStoreContext\", () => {\n\t\tlet remoteDataStoreContext: RemoteFluidDataStoreContext;\n\t\tlet dataStoreAttributes: ReadFluidDataStoreAttributes;\n\t\tconst storage: Partial<IDocumentStorageService> = {};\n\t\tlet scope: FluidObject;\n\t\tlet summarizerNode: IRootSummarizerNodeWithGC;\n\t\tlet containerRuntime: ContainerRuntime;\n\n\t\tbeforeEach(async () => {\n\t\t\tconst factory: { [key: string]: any } = {};\n\t\t\tfactory.IFluidDataStoreFactory = factory;\n\t\t\tfactory.instantiateDataStore = (context: IFluidDataStoreContext) =>\n\t\t\t\tnew MockFluidDataStoreRuntime();\n\t\t\tconst registry: { [key: string]: any } = {};\n\t\t\tregistry.IFluidDataStoreRegistry = registry;\n\t\t\tregistry.get = async (pkg) => Promise.resolve(factory);\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tcontainerRuntime = {\n\t\t\t\tIFluidDataStoreRegistry: registry,\n\t\t\t\ton: (event, listener) => {},\n\t\t\t\tclientDetails: {},\n\t\t\t} as ContainerRuntime;\n\t\t});\n\n\t\tdescribe(\"Initialization - can correctly initialize and generate attributes\", () => {\n\t\t\tbeforeEach(() => {\n\t\t\t\tsummarizerNode = createRootSummarizerNodeWithGC(\n\t\t\t\t\tcreateChildLogger(),\n\t\t\t\t\t(() => undefined) as unknown as SummarizeInternalFn,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t);\n\t\t\t\tsummarizerNode.startSummary(0, createChildLogger(), 0);\n\n\t\t\t\tcreateSummarizerNodeFn = (\n\t\t\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\t\t\tgetGCDataFn: () => Promise<IGarbageCollectionData>,\n\t\t\t\t) =>\n\t\t\t\t\tsummarizerNode.createChild(\n\t\t\t\t\t\tsummarizeInternal,\n\t\t\t\t\t\tdataStoreId,\n\t\t\t\t\t\t{ type: CreateSummarizerNodeSource.FromSummary },\n\t\t\t\t\t\t// Disable GC for initialization tests.\n\t\t\t\t\t\t{ gcDisabled: true },\n\t\t\t\t\t\tgetGCDataFn,\n\t\t\t\t\t);\n\t\t\t});\n\t\t\tconst pkgName = \"TestDataStore1\";\n\n\t\t\t/**\n\t\t\t * Runs the initialization and generate datastore attributes tests with the given write-mode preferences\n\t\t\t * and expectations.\n\t\t\t * This runs the same test with various summary write and read preferences. Specifically each call of this\n\t\t\t * function will run the test 4 times, one for each possible summary format we could be reading from.\n\t\t\t * @param expected - the expected datastore attributes to be generated given the write preference\n\t\t\t */\n\t\t\tfunction testGenerateAttributes(expected: WriteFluidDataStoreAttributes) {\n\t\t\t\t/**\n\t\t\t\t * This function is called for each possible base snapshot format version. We want to cover all\n\t\t\t\t * summary format read/write combinations. We only write in latest or -1 version, but we can\n\t\t\t\t * need to be able to read old summary format versions forever.\n\t\t\t\t * @param hasIsolatedChannels - whether we expect to read a snapshot tree with isolated channels or not\n\t\t\t\t * @param attributes - datastore attributes that are in the base snapshot we load from\n\t\t\t\t */\n\t\t\t\tasync function testGenerateAttributesCore(\n\t\t\t\t\tattributes: ReadFluidDataStoreAttributes,\n\t\t\t\t) {\n\t\t\t\t\tconst buffer = stringToBuffer(JSON.stringify(attributes), \"utf8\");\n\t\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t\t[\"fluidDataStoreAttributes\", buffer],\n\t\t\t\t\t]);\n\t\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\t\tblobs: { [dataStoreAttributesBlobName]: \"fluidDataStoreAttributes\" },\n\t\t\t\t\t\ttrees: {},\n\t\t\t\t\t};\n\t\t\t\t\t// If we are expecting to read isolated channels as intended by the test, then make sure\n\t\t\t\t\t// it exists on the snapshot. Otherwise, make sure it doesn't to most closely resemble\n\t\t\t\t\t// real loading use cases.\n\t\t\t\t\tsnapshotTree.trees[channelsTreeName] = {\n\t\t\t\t\t\tblobs: {},\n\t\t\t\t\t\ttrees: {},\n\t\t\t\t\t};\n\n\t\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\t\tsnapshotTree,\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst isRootNode = await remoteDataStoreContext.isRoot();\n\t\t\t\t\tassert.strictEqual(isRootNode, true, \"The data store should be root.\");\n\n\t\t\t\t\tconst summarizeResult = await remoteDataStoreContext.summarize(\n\t\t\t\t\t\ttrue /* fullTree */,\n\t\t\t\t\t);\n\t\t\t\t\tassert(\n\t\t\t\t\t\tsummarizeResult.summary.type === SummaryType.Tree,\n\t\t\t\t\t\t\"summarize should always return a tree when fullTree is true\",\n\t\t\t\t\t);\n\t\t\t\t\tconst blob = summarizeResult.summary.tree[\n\t\t\t\t\t\tdataStoreAttributesBlobName\n\t\t\t\t\t] as ISummaryBlob;\n\n\t\t\t\t\tconst contents = JSON.parse(\n\t\t\t\t\t\tblob.content as string,\n\t\t\t\t\t) as WriteFluidDataStoreAttributes;\n\n\t\t\t\t\t// Validate that generated attributes are as expected.\n\t\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\t\tcontents,\n\t\t\t\t\t\texpected,\n\t\t\t\t\t\t\"Unexpected datastore attributes written\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tit(\"can read from latest with isolated channels\", async () =>\n\t\t\t\t\ttestGenerateAttributesCore({\n\t\t\t\t\t\tpkg: JSON.stringify([pkgName]),\n\t\t\t\t\t\tsummaryFormatVersion: 2,\n\t\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t\t}));\n\t\t\t}\n\n\t\t\tit(\"rejects ids with forward slashes\", async () => {\n\t\t\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\t\t\tconst codeBlock = () =>\n\t\t\t\t\tnew RemoteFluidDataStoreContext({\n\t\t\t\t\t\tid: invalidId,\n\t\t\t\t\t\tpkg: [\"TestDataStore1\"],\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(invalidId, containerRuntime),\n\t\t\t\t\t\tstorage: storage as IDocumentStorageService,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\t});\n\n\t\t\t\tassert.throws(codeBlock, (e: Error) =>\n\t\t\t\t\tvalidateAssertionError(e, \"Data store ID contains slash\"),\n\t\t\t\t);\n\t\t\t});\n\t\t\tdescribe(\"writing with isolated channels enabled\", () =>\n\t\t\t\ttestGenerateAttributes({\n\t\t\t\t\tpkg: JSON.stringify([pkgName]),\n\t\t\t\t\tsummaryFormatVersion: 2,\n\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t}));\n\t\t});\n\n\t\tdescribe(\"Garbage Collection\", () => {\n\t\t\t// The base GC details of the root summarizer node. The child base GC details from this is passed on to the\n\t\t\t// child summarizer node during its creation.\n\t\t\tlet rootBaseGCDetails: IGarbageCollectionDetailsBase;\n\t\t\tconst getRootBaseGCDetails = async (): Promise<IGarbageCollectionDetailsBase> =>\n\t\t\t\trootBaseGCDetails;\n\n\t\t\t/**\n\t\t\t * Given the GC data of a data store, build the GC data of the root (parent) node.\n\t\t\t */\n\t\t\tfunction buildRootGCData(dataStoreGCData: IGarbageCollectionData, id: string) {\n\t\t\t\tconst builder = new GCDataBuilder();\n\t\t\t\tbuilder.prefixAndAddNodes(id, dataStoreGCData.gcNodes);\n\t\t\t\treturn builder.getGCData();\n\t\t\t}\n\n\t\t\tbeforeEach(() => {\n\t\t\t\tsummarizerNode = createRootSummarizerNodeWithGC(\n\t\t\t\t\tcreateChildLogger(),\n\t\t\t\t\t(() => undefined) as unknown as SummarizeInternalFn,\n\t\t\t\t\t0,\n\t\t\t\t\t0,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tgetRootBaseGCDetails,\n\t\t\t\t);\n\t\t\t\tsummarizerNode.startSummary(0, createChildLogger(), 0);\n\n\t\t\t\tcreateSummarizerNodeFn = (\n\t\t\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\t\t\tgetGCDataFn: () => Promise<IGarbageCollectionData>,\n\t\t\t\t) =>\n\t\t\t\t\tsummarizerNode.createChild(\n\t\t\t\t\t\tsummarizeInternal,\n\t\t\t\t\t\tdataStoreId,\n\t\t\t\t\t\t{ type: CreateSummarizerNodeSource.FromSummary },\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tgetGCDataFn,\n\t\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"can generate GC data without base GC details in initial summary\", async () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: \"TestDataStore1\",\n\t\t\t\t\tsummaryFormatVersion: undefined,\n\t\t\t\t};\n\t\t\t\tconst buffer = stringToBuffer(JSON.stringify(dataStoreAttributes), \"utf8\");\n\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t[\"fluidDataStoreAttributes\", buffer],\n\t\t\t\t]);\n\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\tblobs: {\n\t\t\t\t\t\t[dataStoreAttributesBlobName]: \"fluidDataStoreAttributes\",\n\t\t\t\t\t},\n\t\t\t\t\ttrees: {},\n\t\t\t\t};\n\n\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tsnapshotTree,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t),\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t});\n\n\t\t\t\tconst gcData = await remoteDataStoreContext.getGCData();\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\tgcData,\n\t\t\t\t\temptyGCData,\n\t\t\t\t\t\"GC data from getGCData should be empty.\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"can generate GC data with GC details in initial summary\", async () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: \"TestDataStore1\",\n\t\t\t\t\tsummaryFormatVersion: undefined,\n\t\t\t\t};\n\t\t\t\tconst attributesBuffer = stringToBuffer(\n\t\t\t\t\tJSON.stringify(dataStoreAttributes),\n\t\t\t\t\t\"utf8\",\n\t\t\t\t);\n\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t[\"fluidDataStoreAttributes\", attributesBuffer],\n\t\t\t\t]);\n\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\tblobs: {\n\t\t\t\t\t\t[dataStoreAttributesBlobName]: \"fluidDataStoreAttributes\",\n\t\t\t\t\t},\n\t\t\t\t\ttrees: {},\n\t\t\t\t};\n\n\t\t\t\t// The base GC data of the data store.\n\t\t\t\tconst dataStoreGCData: IGarbageCollectionData = {\n\t\t\t\t\tgcNodes: {\n\t\t\t\t\t\t\"/\": [\"/dds1\", \"/dds2\"],\n\t\t\t\t\t\t\"/dds1\": [\"/dds2\", \"/\"],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\t// Set the root base GC details to include the child node's base GC data.\n\t\t\t\trootBaseGCDetails = {\n\t\t\t\t\tusedRoutes: [],\n\t\t\t\t\tgcData: buildRootGCData(dataStoreGCData, dataStoreId),\n\t\t\t\t};\n\n\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tsnapshotTree,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t),\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t});\n\n\t\t\t\tconst gcData = await remoteDataStoreContext.getGCData();\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\tgcData,\n\t\t\t\t\tdataStoreGCData,\n\t\t\t\t\t\"GC data from getGCData is incorrect.\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tit(\"should not reuse summary data when used state changed since last summary\", async () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: \"TestDataStore1\",\n\t\t\t\t\tsummaryFormatVersion: undefined,\n\t\t\t\t};\n\t\t\t\tconst attributesBuffer = stringToBuffer(\n\t\t\t\t\tJSON.stringify(dataStoreAttributes),\n\t\t\t\t\t\"utf8\",\n\t\t\t\t);\n\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t[\"fluidDataStoreAttributes\", attributesBuffer],\n\t\t\t\t]);\n\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\tid: \"dummy\",\n\t\t\t\t\tblobs: {\n\t\t\t\t\t\t[dataStoreAttributesBlobName]: \"fluidDataStoreAttributes\",\n\t\t\t\t\t},\n\t\t\t\t\ttrees: {},\n\t\t\t\t};\n\n\t\t\t\t// The base GC data of the data store.\n\t\t\t\tconst dataStoreGCData: IGarbageCollectionData = {\n\t\t\t\t\tgcNodes: {\n\t\t\t\t\t\t\"/\": [],\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\t// Set the root base GC details to include the child node's base GC data.\n\t\t\t\trootBaseGCDetails = {\n\t\t\t\t\tusedRoutes: [`/${dataStoreId}`],\n\t\t\t\t\tgcData: buildRootGCData(dataStoreGCData, dataStoreId),\n\t\t\t\t};\n\n\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tsnapshotTree,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t),\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t});\n\n\t\t\t\t// Since GC is enabled, GC must run before summarize. Get the GC data and update used routes to\n\t\t\t\t// emulate the GC process.\n\t\t\t\tconst gcData = await remoteDataStoreContext.getGCData();\n\t\t\t\tassert.deepStrictEqual(\n\t\t\t\t\tgcData,\n\t\t\t\t\tdataStoreGCData,\n\t\t\t\t\t\"GC data from getGCData should be empty.\",\n\t\t\t\t);\n\t\t\t\t// Update used routes to the same as in initial GC details. This will ensure that the used state\n\t\t\t\t// matches the initial used state.\n\t\t\t\tremoteDataStoreContext.updateUsedRoutes([\"\"]);\n\n\t\t\t\t// The data in the store has not changed since last summary and the reference used routes (from initial\n\t\t\t\t// used routes) and current used routes (default) are both empty. So, summarize should return a handle.\n\t\t\t\tlet summarizeResult = await remoteDataStoreContext.summarize(false /* fullTree */);\n\t\t\t\tassert(\n\t\t\t\t\tsummarizeResult.summary.type === SummaryType.Handle,\n\t\t\t\t\t\"summarize should return a handle since nothing changed\",\n\t\t\t\t);\n\n\t\t\t\t// Update the used routes of the data store to a different value than current.\n\t\t\t\tremoteDataStoreContext.updateUsedRoutes([]);\n\n\t\t\t\t// Since the used state has changed, it should generate a full summary tree.\n\t\t\t\tsummarizeResult = await remoteDataStoreContext.summarize(false /* fullTree */);\n\t\t\t\tassert(\n\t\t\t\t\tsummarizeResult.summary.type === SummaryType.Tree,\n\t\t\t\t\t\"summarize should return a tree since used state changed\",\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tfunction updateReferencedStateTest() {\n\t\t\t\tconst buffer = stringToBuffer(JSON.stringify(dataStoreAttributes), \"utf8\");\n\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t[\"fluidDataStoreAttributes\", buffer],\n\t\t\t\t]);\n\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\tid: \"dummy\",\n\t\t\t\t\tblobs: { [\".component\"]: \"fluidDataStoreAttributes\" },\n\t\t\t\t\ttrees: {},\n\t\t\t\t};\n\n\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tsnapshotTree,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t),\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t});\n\n\t\t\t\t// Get the summarizer node for this data store which tracks its referenced state.\n\t\t\t\tconst dataStoreSummarizerNode = summarizerNode.getChild(dataStoreId);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\ttrue,\n\t\t\t\t\t\"Data store should be referenced by default\",\n\t\t\t\t);\n\n\t\t\t\t// Update the used routes to not include route to the data store.\n\t\t\t\tremoteDataStoreContext.updateUsedRoutes([]);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"Data store should now be unreferenced\",\n\t\t\t\t);\n\n\t\t\t\t// Add the data store's route (empty string) to its used routes.\n\t\t\t\tremoteDataStoreContext.updateUsedRoutes([\"\"]);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tdataStoreSummarizerNode?.isReferenced(),\n\t\t\t\t\ttrue,\n\t\t\t\t\t\"Data store should now be referenced\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tit(\"can successfully update referenced state from format version 0\", () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: \"TestDataStore1\",\n\t\t\t\t};\n\t\t\t\tupdateReferencedStateTest();\n\t\t\t});\n\n\t\t\tit(\"can successfully update referenced state from format version 1\", () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: '[\"TestDataStore1\"]',\n\t\t\t\t\tsnapshotFormatVersion: \"0.1\",\n\t\t\t\t};\n\t\t\t\tupdateReferencedStateTest();\n\t\t\t});\n\n\t\t\tit(\"can successfully update referenced state from format version 2\", () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: '[\"TestDataStore1\"]',\n\t\t\t\t\tsummaryFormatVersion: 2,\n\t\t\t\t};\n\t\t\t\tupdateReferencedStateTest();\n\t\t\t});\n\n\t\t\tit(\"can successfully tombstone a remote datastore\", async () => {\n\t\t\t\tdataStoreAttributes = {\n\t\t\t\t\tpkg: JSON.stringify([\"TestDataStore1\"]),\n\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t};\n\t\t\t\tconst buffer = stringToBuffer(JSON.stringify(dataStoreAttributes), \"utf8\");\n\t\t\t\tconst attachBlobs = new Map<string, ArrayBufferLike>([\n\t\t\t\t\t[\"fluidDataStoreAttributes\", buffer],\n\t\t\t\t]);\n\t\t\t\tconst snapshotTree: ISnapshotTree = {\n\t\t\t\t\tid: \"dummy\",\n\t\t\t\t\tblobs: { [\".component\"]: \"fluidDataStoreAttributes\" },\n\t\t\t\t\ttrees: {},\n\t\t\t\t};\n\n\t\t\t\tremoteDataStoreContext = new RemoteFluidDataStoreContext({\n\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\tsnapshotTree,\n\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\tstorage: new StorageServiceWithAttachBlobs(\n\t\t\t\t\t\tstorage as IDocumentStorageService,\n\t\t\t\t\t\tattachBlobs,\n\t\t\t\t\t),\n\t\t\t\t\tscope,\n\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t});\n\n\t\t\t\tremoteDataStoreContext.setTombstone(true);\n\t\t\t\tassert(remoteDataStoreContext.tombstoned, `Local data store should be tombstoned!`);\n\t\t\t\tremoteDataStoreContext.setTombstone(false);\n\t\t\t\tassert(\n\t\t\t\t\t!remoteDataStoreContext.tombstoned,\n\t\t\t\t\t`Local data store should not be tombstoned!`,\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"LocalDetachedFluidDataStoreContext\", () => {\n\t\tlet localDataStoreContext: LocalDetachedFluidDataStoreContext;\n\t\tlet storage: IDocumentStorageService;\n\t\tlet scope: FluidObject;\n\t\tlet factory: IFluidDataStoreFactory;\n\t\tconst makeLocallyVisibleFn = () => {};\n\t\tconst channelToDataStoreFn = (fluidDataStore: IFluidDataStoreChannel) =>\n\t\t\tchannelToDataStore(fluidDataStore, \"id\", channelCollection, containerRuntime.logger);\n\t\tlet containerRuntime: ContainerRuntime;\n\t\tlet channelCollection: ChannelCollection;\n\t\tlet provideDsRuntimeWithFailingEntrypoint = false;\n\n\t\tbeforeEach(async () => {\n\t\t\tconst summarizerNode: IRootSummarizerNodeWithGC = createRootSummarizerNodeWithGC(\n\t\t\t\tcreateChildLogger(),\n\t\t\t\t(() => undefined) as unknown as SummarizeInternalFn,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tsummarizerNode.startSummary(0, createChildLogger(), 0);\n\n\t\t\tcreateSummarizerNodeFn = (\n\t\t\t\tsummarizeInternal: SummarizeInternalFn,\n\t\t\t\tgetGCDataFn: () => Promise<IGarbageCollectionData>,\n\t\t\t) =>\n\t\t\t\tsummarizerNode.createChild(\n\t\t\t\t\tsummarizeInternal,\n\t\t\t\t\tdataStoreId,\n\t\t\t\t\t{ type: CreateSummarizerNodeSource.Local },\n\t\t\t\t\tundefined,\n\t\t\t\t\tgetGCDataFn,\n\t\t\t\t);\n\n\t\t\tconst failingEntryPoint = new FluidObjectHandle<FluidObject>(\n\t\t\t\tnew LazyPromise(async () => {\n\t\t\t\t\tthrow new Error(\"Simulating failure when initializing EntryPoint\");\n\t\t\t\t}),\n\t\t\t\t\"\",\n\t\t\t\tundefined as unknown as IFluidHandleContext,\n\t\t\t);\n\n\t\t\tfactory = {\n\t\t\t\ttype: \"store-type\",\n\t\t\t\tget IFluidDataStoreFactory() {\n\t\t\t\t\treturn factory;\n\t\t\t\t},\n\t\t\t\tinstantiateDataStore: async (context: IFluidDataStoreContext, existing: boolean) =>\n\t\t\t\t\tprovideDsRuntimeWithFailingEntrypoint\n\t\t\t\t\t\t? new MockFluidDataStoreRuntime({ entryPoint: failingEntryPoint })\n\t\t\t\t\t\t: new MockFluidDataStoreRuntime(),\n\t\t\t};\n\t\t\tconst registry: IFluidDataStoreRegistry = {\n\t\t\t\tget IFluidDataStoreRegistry() {\n\t\t\t\t\treturn registry;\n\t\t\t\t},\n\t\t\t\tget: async (pkg) => (pkg === factory.type ? factory : undefined),\n\t\t\t};\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tcontainerRuntime = {\n\t\t\t\tIFluidDataStoreRegistry: registry,\n\t\t\t\ton: (event, listener) => {},\n\t\t\t\tlogger: createChildLogger(),\n\t\t\t\tclientDetails: {},\n\t\t\t} as ContainerRuntime;\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tchannelCollection = {\n\t\t\t\tparentContext: containerRuntime as IFluidParentContext,\n\t\t\t} as ChannelCollection;\n\t\t});\n\n\t\tdescribe(\"Initialization\", () => {\n\t\t\tit(\"rejects ids with forward slashes\", async () => {\n\t\t\t\tconst invalidId = \"beforeSlash/afterSlash\";\n\t\t\t\tconst codeBlock = () =>\n\t\t\t\t\tnew LocalDetachedFluidDataStoreContext({\n\t\t\t\t\t\tid: invalidId,\n\t\t\t\t\t\tpkg: [factory.type],\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(invalidId, containerRuntime),\n\t\t\t\t\t\tstorage,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\t\tisRootDataStore: true,\n\t\t\t\t\t\tchannelToDataStoreFn,\n\t\t\t\t\t});\n\n\t\t\t\tassert.throws(codeBlock, (e: Error) =>\n\t\t\t\t\tvalidateAssertionError(e, \"Data store ID contains slash\"),\n\t\t\t\t);\n\t\t\t});\n\n\t\t\tdescribe(\"should error on attach if data store cannot be constructed/initialized\", () => {\n\t\t\t\t// Tests in this suite should be scenarios that lead to a data store which cannot be constructed for\n\t\t\t\t// some reason.\n\n\t\t\t\tit(\"because of package type for data store not present in registry\", async () => {\n\t\t\t\t\tlet exceptionOccurred = false;\n\t\t\t\t\tlocalDataStoreContext = new LocalDetachedFluidDataStoreContext({\n\t\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\t\tpkg: [\"some-datastore-type-not-present-in-registry\"],\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\t\tstorage,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t\t\tchannelToDataStoreFn,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst dataStore = await factory.instantiateDataStore(\n\t\t\t\t\t\tlocalDataStoreContext,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t\tawait localDataStoreContext.attachRuntime(factory, dataStore).catch((error) => {\n\t\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\t\"Registry does not contain entry for the package\",\n\t\t\t\t\t\t\t\"Unexpected exception thrown\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\texceptionOccurred = true;\n\t\t\t\t\t});\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\texceptionOccurred,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\"attachRuntime() call did not fail as expected.\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.strictEqual(localDataStoreContext.attachState, AttachState.Detached);\n\t\t\t\t});\n\n\t\t\t\tit(\"because of entryPoint that fails to initialize\", async () => {\n\t\t\t\t\tlet exceptionOccurred = false;\n\t\t\t\t\tprovideDsRuntimeWithFailingEntrypoint = true;\n\n\t\t\t\t\tlocalDataStoreContext = new LocalDetachedFluidDataStoreContext({\n\t\t\t\t\t\tid: dataStoreId,\n\t\t\t\t\t\tpkg: [factory.type],\n\t\t\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\t\t\tstorage,\n\t\t\t\t\t\tscope,\n\t\t\t\t\t\tcreateSummarizerNodeFn,\n\t\t\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\t\t\tsnapshotTree: undefined,\n\t\t\t\t\t\tisRootDataStore: false,\n\t\t\t\t\t\tchannelToDataStoreFn,\n\t\t\t\t\t});\n\n\t\t\t\t\tconst dataStore = await factory.instantiateDataStore(\n\t\t\t\t\t\tlocalDataStoreContext,\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t);\n\t\t\t\t\tawait localDataStoreContext.attachRuntime(factory, dataStore).catch((error) => {\n\t\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\t\terror.message,\n\t\t\t\t\t\t\t\"Simulating failure when initializing EntryPoint\",\n\t\t\t\t\t\t\t\"Unexpected exception thrown\",\n\t\t\t\t\t\t);\n\t\t\t\t\t\texceptionOccurred = true;\n\t\t\t\t\t});\n\t\t\t\t\tassert.strictEqual(\n\t\t\t\t\t\texceptionOccurred,\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\"attachRuntime() call did not fail as expected.\",\n\t\t\t\t\t);\n\t\t\t\t\tassert.strictEqual(localDataStoreContext.attachState, AttachState.Detached);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n\t});\n});\n"]}
|
|
@@ -1,312 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { strict as assert } from "assert";
|
|
6
|
-
import { CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions";
|
|
7
|
-
import { createChildLogger } from "@fluidframework/telemetry-utils";
|
|
8
|
-
import { MockFluidDataStoreRuntime } from "@fluidframework/test-runtime-utils";
|
|
9
|
-
import { LocalFluidDataStoreContext } from "../dataStoreContext.js";
|
|
10
|
-
import { wrapContextForInnerChannel } from "../channelCollection.js";
|
|
11
|
-
import { createRootSummarizerNodeWithGC } from "../summary/index.js";
|
|
12
|
-
describe("Data Store Creation Tests", () => {
|
|
13
|
-
describe("Store creation via local context creation and realize", () => {
|
|
14
|
-
/**
|
|
15
|
-
* These tests simulate dataStore and subDataStore creation by creating local contexts and realizing them.
|
|
16
|
-
* The dataStore tree for these tests is as follows:
|
|
17
|
-
*
|
|
18
|
-
* ```
|
|
19
|
-
* Default
|
|
20
|
-
* |
|
|
21
|
-
* |
|
|
22
|
-
* DataStore A
|
|
23
|
-
* / \\
|
|
24
|
-
* / \\
|
|
25
|
-
* DataStore B DataStore C
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
let storage;
|
|
29
|
-
let scope;
|
|
30
|
-
const makeLocallyVisibleFn = () => { };
|
|
31
|
-
let containerRuntime;
|
|
32
|
-
const defaultName = "default";
|
|
33
|
-
const dataStoreAName = "dataStoreA";
|
|
34
|
-
const dataStoreBName = "dataStoreB";
|
|
35
|
-
const dataStoreCName = "dataStoreC";
|
|
36
|
-
let getCreateSummarizerNodeFn;
|
|
37
|
-
// Helper function that creates a FluidDataStoreRegistryEntry with the registry entries
|
|
38
|
-
// provided to it.
|
|
39
|
-
function createDataStoreRegistryEntry(entries) {
|
|
40
|
-
const registryEntries = new Map(entries);
|
|
41
|
-
const factory = {
|
|
42
|
-
type: "store-type",
|
|
43
|
-
get IFluidDataStoreFactory() {
|
|
44
|
-
return factory;
|
|
45
|
-
},
|
|
46
|
-
instantiateDataStore: async (context) => new MockFluidDataStoreRuntime(),
|
|
47
|
-
};
|
|
48
|
-
const registry = {
|
|
49
|
-
get IFluidDataStoreRegistry() {
|
|
50
|
-
return registry;
|
|
51
|
-
},
|
|
52
|
-
// Returns the registry entry as per the entries provided in the param.
|
|
53
|
-
get: async (pkg) => registryEntries.get(pkg),
|
|
54
|
-
};
|
|
55
|
-
const entry = {
|
|
56
|
-
get IFluidDataStoreFactory() {
|
|
57
|
-
return factory;
|
|
58
|
-
},
|
|
59
|
-
get IFluidDataStoreRegistry() {
|
|
60
|
-
return registry;
|
|
61
|
-
},
|
|
62
|
-
};
|
|
63
|
-
return entry;
|
|
64
|
-
}
|
|
65
|
-
beforeEach(async () => {
|
|
66
|
-
// DataStore B is a leaf dataStore and its registry does not have any entries.
|
|
67
|
-
const entryB = createDataStoreRegistryEntry([]);
|
|
68
|
-
// DataStore C is a leaf dataStore and its registry does not have any entries.
|
|
69
|
-
const entryC = createDataStoreRegistryEntry([]);
|
|
70
|
-
// DataStore A's registry has entries for dataStore B and dataStore C.
|
|
71
|
-
const entryA = createDataStoreRegistryEntry([
|
|
72
|
-
[dataStoreBName, Promise.resolve(entryB)],
|
|
73
|
-
[dataStoreCName, Promise.resolve(entryC)],
|
|
74
|
-
]);
|
|
75
|
-
// The default dataStore's registry has entry for only dataStore A.
|
|
76
|
-
const entryDefault = createDataStoreRegistryEntry([
|
|
77
|
-
[dataStoreAName, Promise.resolve(entryA)],
|
|
78
|
-
]);
|
|
79
|
-
// Create the global registry for the container that can only create the default dataStore.
|
|
80
|
-
const globalRegistryEntries = new Map([[defaultName, Promise.resolve(entryDefault)]]);
|
|
81
|
-
const globalRegistry = {
|
|
82
|
-
get IFluidDataStoreRegistry() {
|
|
83
|
-
return globalRegistry;
|
|
84
|
-
},
|
|
85
|
-
get: async (pkg) => globalRegistryEntries.get(pkg),
|
|
86
|
-
};
|
|
87
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
|
|
88
|
-
containerRuntime = {
|
|
89
|
-
IFluidDataStoreRegistry: globalRegistry,
|
|
90
|
-
on: (event, listener) => { },
|
|
91
|
-
logger: createChildLogger(),
|
|
92
|
-
clientDetails: {},
|
|
93
|
-
};
|
|
94
|
-
const summarizerNode = createRootSummarizerNodeWithGC(createChildLogger(), (() => { }), 0, 0);
|
|
95
|
-
getCreateSummarizerNodeFn = (id) => (si) => summarizerNode.createChild(si, id, { type: CreateSummarizerNodeSource.Local });
|
|
96
|
-
});
|
|
97
|
-
it("Valid global dataStore", async () => {
|
|
98
|
-
let success = true;
|
|
99
|
-
const dataStoreId = "default-Id";
|
|
100
|
-
// Create the default dataStore that is in the global registry.
|
|
101
|
-
const context = new LocalFluidDataStoreContext({
|
|
102
|
-
id: dataStoreId,
|
|
103
|
-
pkg: [defaultName],
|
|
104
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
105
|
-
storage,
|
|
106
|
-
scope,
|
|
107
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
108
|
-
makeLocallyVisibleFn,
|
|
109
|
-
snapshotTree: undefined,
|
|
110
|
-
isRootDataStore: false,
|
|
111
|
-
});
|
|
112
|
-
try {
|
|
113
|
-
await context.realize();
|
|
114
|
-
}
|
|
115
|
-
catch (error) {
|
|
116
|
-
success = false;
|
|
117
|
-
}
|
|
118
|
-
// Verify that realize was successful.
|
|
119
|
-
assert.strictEqual(success, true);
|
|
120
|
-
});
|
|
121
|
-
it("Invalid global dataStore", async () => {
|
|
122
|
-
let success = true;
|
|
123
|
-
const dataStoreId = "A-Id";
|
|
124
|
-
// Create dataStore A that is not in the global registry.
|
|
125
|
-
const context = new LocalFluidDataStoreContext({
|
|
126
|
-
id: dataStoreId,
|
|
127
|
-
pkg: [dataStoreAName],
|
|
128
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
129
|
-
storage,
|
|
130
|
-
scope,
|
|
131
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
132
|
-
makeLocallyVisibleFn,
|
|
133
|
-
snapshotTree: undefined,
|
|
134
|
-
isRootDataStore: false,
|
|
135
|
-
});
|
|
136
|
-
try {
|
|
137
|
-
await context.realize();
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
success = false;
|
|
141
|
-
}
|
|
142
|
-
// Verify that realize throws an error.
|
|
143
|
-
assert.strictEqual(success, false);
|
|
144
|
-
});
|
|
145
|
-
it("Valid subDataStore from the global dataStore", async () => {
|
|
146
|
-
let success = true;
|
|
147
|
-
const dataStoreId = "A-Id";
|
|
148
|
-
// Create dataStore A that is in the registry of the default dataStore.
|
|
149
|
-
const contextA = new LocalFluidDataStoreContext({
|
|
150
|
-
id: dataStoreId,
|
|
151
|
-
pkg: [defaultName, dataStoreAName],
|
|
152
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
153
|
-
storage,
|
|
154
|
-
scope,
|
|
155
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
156
|
-
makeLocallyVisibleFn,
|
|
157
|
-
snapshotTree: undefined,
|
|
158
|
-
isRootDataStore: false,
|
|
159
|
-
});
|
|
160
|
-
try {
|
|
161
|
-
await contextA.realize();
|
|
162
|
-
}
|
|
163
|
-
catch (error) {
|
|
164
|
-
success = false;
|
|
165
|
-
}
|
|
166
|
-
// Verify that realize was successful.
|
|
167
|
-
assert.strictEqual(success, true);
|
|
168
|
-
});
|
|
169
|
-
it("Invalid subDataStore from the global dataStore", async () => {
|
|
170
|
-
let success = true;
|
|
171
|
-
const dataStoreId = "B-Id";
|
|
172
|
-
// Create dataStore B that is in not the registry of the default dataStore.
|
|
173
|
-
const contextB = new LocalFluidDataStoreContext({
|
|
174
|
-
id: dataStoreId,
|
|
175
|
-
pkg: [defaultName, dataStoreBName],
|
|
176
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
177
|
-
storage,
|
|
178
|
-
scope,
|
|
179
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
180
|
-
makeLocallyVisibleFn,
|
|
181
|
-
snapshotTree: undefined,
|
|
182
|
-
isRootDataStore: false,
|
|
183
|
-
});
|
|
184
|
-
try {
|
|
185
|
-
await contextB.realize();
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
success = false;
|
|
189
|
-
}
|
|
190
|
-
// Verify that realize throws an error.
|
|
191
|
-
assert.strictEqual(success, false);
|
|
192
|
-
});
|
|
193
|
-
it("Valid subDataStore at depth 2", async () => {
|
|
194
|
-
let success = true;
|
|
195
|
-
const dataStoreBId = "B-Id";
|
|
196
|
-
// Create dataStore B that is in the registry of dataStore A (which is at depth 2).
|
|
197
|
-
const contextB = new LocalFluidDataStoreContext({
|
|
198
|
-
id: dataStoreBId,
|
|
199
|
-
pkg: [defaultName, dataStoreAName, dataStoreBName],
|
|
200
|
-
parentContext: wrapContextForInnerChannel(dataStoreBId, containerRuntime),
|
|
201
|
-
storage,
|
|
202
|
-
scope,
|
|
203
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreBId),
|
|
204
|
-
makeLocallyVisibleFn,
|
|
205
|
-
snapshotTree: undefined,
|
|
206
|
-
isRootDataStore: false,
|
|
207
|
-
});
|
|
208
|
-
try {
|
|
209
|
-
await contextB.realize();
|
|
210
|
-
}
|
|
211
|
-
catch (error) {
|
|
212
|
-
success = false;
|
|
213
|
-
}
|
|
214
|
-
// Verify that realize was successful.
|
|
215
|
-
assert.strictEqual(success, true);
|
|
216
|
-
const dataStoreCId = "C-Id";
|
|
217
|
-
// Create dataStore C that is in the registry of dataStore A (which is at depth 2).
|
|
218
|
-
const contextC = new LocalFluidDataStoreContext({
|
|
219
|
-
id: dataStoreCId,
|
|
220
|
-
pkg: [defaultName, dataStoreAName, dataStoreCName],
|
|
221
|
-
parentContext: wrapContextForInnerChannel(dataStoreCId, containerRuntime),
|
|
222
|
-
storage,
|
|
223
|
-
scope,
|
|
224
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreCId),
|
|
225
|
-
makeLocallyVisibleFn,
|
|
226
|
-
snapshotTree: undefined,
|
|
227
|
-
isRootDataStore: false,
|
|
228
|
-
});
|
|
229
|
-
try {
|
|
230
|
-
await contextC.realize();
|
|
231
|
-
}
|
|
232
|
-
catch (error) {
|
|
233
|
-
success = false;
|
|
234
|
-
}
|
|
235
|
-
// Verify that realize was successful.
|
|
236
|
-
assert.strictEqual(success, true);
|
|
237
|
-
});
|
|
238
|
-
it("Invalid subDataStore at depth 2", async () => {
|
|
239
|
-
let success = true;
|
|
240
|
-
const dataStoreId = "fake-Id";
|
|
241
|
-
// Create a fake dataStore that is not in the registry of dataStore A (which is at depth 2).
|
|
242
|
-
const contextFake = new LocalFluidDataStoreContext({
|
|
243
|
-
id: dataStoreId,
|
|
244
|
-
pkg: [defaultName, dataStoreAName, "fake"],
|
|
245
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
246
|
-
storage,
|
|
247
|
-
scope,
|
|
248
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
249
|
-
makeLocallyVisibleFn,
|
|
250
|
-
snapshotTree: undefined,
|
|
251
|
-
isRootDataStore: false,
|
|
252
|
-
});
|
|
253
|
-
try {
|
|
254
|
-
await contextFake.realize();
|
|
255
|
-
}
|
|
256
|
-
catch (error) {
|
|
257
|
-
success = false;
|
|
258
|
-
}
|
|
259
|
-
// Verify that realize throws an error.
|
|
260
|
-
assert.strictEqual(success, false);
|
|
261
|
-
});
|
|
262
|
-
it("Invalid subDataStore at depth 3", async () => {
|
|
263
|
-
let success = true;
|
|
264
|
-
const dataStoreId = "fake-Id";
|
|
265
|
-
// Create a fake dataStore that is not in the registry of dataStore B (which is at depth 3).
|
|
266
|
-
const contextFake = new LocalFluidDataStoreContext({
|
|
267
|
-
id: dataStoreId,
|
|
268
|
-
pkg: [defaultName, dataStoreAName, "fake"],
|
|
269
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
270
|
-
storage,
|
|
271
|
-
scope,
|
|
272
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
273
|
-
makeLocallyVisibleFn,
|
|
274
|
-
snapshotTree: undefined,
|
|
275
|
-
isRootDataStore: false,
|
|
276
|
-
});
|
|
277
|
-
try {
|
|
278
|
-
await contextFake.realize();
|
|
279
|
-
}
|
|
280
|
-
catch (error) {
|
|
281
|
-
success = false;
|
|
282
|
-
}
|
|
283
|
-
// Verify that realize throws an error.
|
|
284
|
-
assert.strictEqual(success, false);
|
|
285
|
-
});
|
|
286
|
-
it("SubDataStore which is in the registry of the parent dataStore", async () => {
|
|
287
|
-
let success = true;
|
|
288
|
-
const dataStoreId = "C-Id";
|
|
289
|
-
// Create dataStore C that is in parent's registry but not in the registry of dataStore B.
|
|
290
|
-
const contextC = new LocalFluidDataStoreContext({
|
|
291
|
-
id: dataStoreId,
|
|
292
|
-
pkg: [defaultName, dataStoreAName, dataStoreBName, dataStoreCName],
|
|
293
|
-
parentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),
|
|
294
|
-
storage,
|
|
295
|
-
scope,
|
|
296
|
-
createSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),
|
|
297
|
-
makeLocallyVisibleFn,
|
|
298
|
-
snapshotTree: undefined,
|
|
299
|
-
isRootDataStore: false,
|
|
300
|
-
});
|
|
301
|
-
try {
|
|
302
|
-
await contextC.realize();
|
|
303
|
-
}
|
|
304
|
-
catch (error) {
|
|
305
|
-
success = false;
|
|
306
|
-
}
|
|
307
|
-
// Verify that realize throws an error.
|
|
308
|
-
assert.strictEqual(success, false);
|
|
309
|
-
});
|
|
310
|
-
});
|
|
311
|
-
});
|
|
312
|
-
//# sourceMappingURL=dataStoreCreation.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreCreation.spec.js","sourceRoot":"","sources":["../../src/test/dataStoreCreation.spec.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 */\nimport { strict as assert } from \"assert\";\n\nimport { FluidObject } from \"@fluidframework/core-interfaces\";\nimport { IDocumentStorageService } from \"@fluidframework/driver-definitions\";\nimport {\n\tIFluidDataStoreContext,\n\tIFluidDataStoreFactory,\n\tIFluidDataStoreRegistry,\n\tFluidDataStoreRegistryEntry,\n\tNamedFluidDataStoreRegistryEntries,\n\tSummarizeInternalFn,\n\tCreateChildSummarizerNodeFn,\n\tCreateSummarizerNodeSource,\n} from \"@fluidframework/runtime-definitions\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { MockFluidDataStoreRuntime } from \"@fluidframework/test-runtime-utils\";\n\nimport { LocalFluidDataStoreContext } from \"../dataStoreContext.js\";\nimport { wrapContextForInnerChannel } from \"../channelCollection.js\";\nimport { ContainerRuntime } from \"../containerRuntime.js\";\nimport { createRootSummarizerNodeWithGC } from \"../summary/index.js\";\n\ndescribe(\"Data Store Creation Tests\", () => {\n\tdescribe(\"Store creation via local context creation and realize\", () => {\n\t\t/**\n\t\t * These tests simulate dataStore and subDataStore creation by creating local contexts and realizing them.\n\t\t * The dataStore tree for these tests is as follows:\n\t\t *\n\t\t * ```\n\t\t * Default\n\t\t * |\n\t\t * |\n\t\t * DataStore A\n\t\t * / \\\\\n\t\t * / \\\\\n\t\t * DataStore B DataStore C\n\t\t * ```\n\t\t */\n\n\t\tlet storage: IDocumentStorageService;\n\t\tlet scope: FluidObject;\n\t\tconst makeLocallyVisibleFn = () => {};\n\t\tlet containerRuntime: ContainerRuntime;\n\t\tconst defaultName = \"default\";\n\t\tconst dataStoreAName = \"dataStoreA\";\n\t\tconst dataStoreBName = \"dataStoreB\";\n\t\tconst dataStoreCName = \"dataStoreC\";\n\t\tlet getCreateSummarizerNodeFn: (id: string) => CreateChildSummarizerNodeFn;\n\n\t\t// Helper function that creates a FluidDataStoreRegistryEntry with the registry entries\n\t\t// provided to it.\n\t\tfunction createDataStoreRegistryEntry(\n\t\t\tentries: NamedFluidDataStoreRegistryEntries,\n\t\t): FluidDataStoreRegistryEntry {\n\t\t\tconst registryEntries = new Map(entries);\n\t\t\tconst factory: IFluidDataStoreFactory = {\n\t\t\t\ttype: \"store-type\",\n\t\t\t\tget IFluidDataStoreFactory() {\n\t\t\t\t\treturn factory;\n\t\t\t\t},\n\t\t\t\tinstantiateDataStore: async (context: IFluidDataStoreContext) =>\n\t\t\t\t\tnew MockFluidDataStoreRuntime(),\n\t\t\t};\n\t\t\tconst registry: IFluidDataStoreRegistry = {\n\t\t\t\tget IFluidDataStoreRegistry() {\n\t\t\t\t\treturn registry;\n\t\t\t\t},\n\t\t\t\t// Returns the registry entry as per the entries provided in the param.\n\t\t\t\tget: async (pkg) => registryEntries.get(pkg),\n\t\t\t};\n\n\t\t\tconst entry: FluidDataStoreRegistryEntry = {\n\t\t\t\tget IFluidDataStoreFactory() {\n\t\t\t\t\treturn factory;\n\t\t\t\t},\n\t\t\t\tget IFluidDataStoreRegistry() {\n\t\t\t\t\treturn registry;\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn entry;\n\t\t}\n\n\t\tbeforeEach(async () => {\n\t\t\t// DataStore B is a leaf dataStore and its registry does not have any entries.\n\t\t\tconst entryB = createDataStoreRegistryEntry([]);\n\t\t\t// DataStore C is a leaf dataStore and its registry does not have any entries.\n\t\t\tconst entryC = createDataStoreRegistryEntry([]);\n\t\t\t// DataStore A's registry has entries for dataStore B and dataStore C.\n\t\t\tconst entryA = createDataStoreRegistryEntry([\n\t\t\t\t[dataStoreBName, Promise.resolve(entryB)],\n\t\t\t\t[dataStoreCName, Promise.resolve(entryC)],\n\t\t\t]);\n\t\t\t// The default dataStore's registry has entry for only dataStore A.\n\t\t\tconst entryDefault = createDataStoreRegistryEntry([\n\t\t\t\t[dataStoreAName, Promise.resolve(entryA)],\n\t\t\t]);\n\n\t\t\t// Create the global registry for the container that can only create the default dataStore.\n\t\t\tconst globalRegistryEntries = new Map([[defaultName, Promise.resolve(entryDefault)]]);\n\t\t\tconst globalRegistry: IFluidDataStoreRegistry = {\n\t\t\t\tget IFluidDataStoreRegistry() {\n\t\t\t\t\treturn globalRegistry;\n\t\t\t\t},\n\t\t\t\tget: async (pkg) => globalRegistryEntries.get(pkg),\n\t\t\t};\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tcontainerRuntime = {\n\t\t\t\tIFluidDataStoreRegistry: globalRegistry,\n\t\t\t\ton: (event, listener) => {},\n\t\t\t\tlogger: createChildLogger(),\n\t\t\t\tclientDetails: {},\n\t\t\t} as ContainerRuntime;\n\t\t\tconst summarizerNode = createRootSummarizerNodeWithGC(\n\t\t\t\tcreateChildLogger(),\n\t\t\t\t(() => {}) as unknown as SummarizeInternalFn,\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t);\n\t\t\tgetCreateSummarizerNodeFn = (id: string) => (si: SummarizeInternalFn) =>\n\t\t\t\tsummarizerNode.createChild(si, id, { type: CreateSummarizerNodeSource.Local });\n\t\t});\n\n\t\tit(\"Valid global dataStore\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"default-Id\";\n\t\t\t// Create the default dataStore that is in the global registry.\n\t\t\tconst context: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait context.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize was successful.\n\t\t\tassert.strictEqual(success, true);\n\t\t});\n\n\t\tit(\"Invalid global dataStore\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"A-Id\";\n\t\t\t// Create dataStore A that is not in the global registry.\n\t\t\tconst context: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [dataStoreAName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait context.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize throws an error.\n\t\t\tassert.strictEqual(success, false);\n\t\t});\n\n\t\tit(\"Valid subDataStore from the global dataStore\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"A-Id\";\n\t\t\t// Create dataStore A that is in the registry of the default dataStore.\n\t\t\tconst contextA: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName, dataStoreAName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextA.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize was successful.\n\t\t\tassert.strictEqual(success, true);\n\t\t});\n\n\t\tit(\"Invalid subDataStore from the global dataStore\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"B-Id\";\n\t\t\t// Create dataStore B that is in not the registry of the default dataStore.\n\t\t\tconst contextB: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName, dataStoreBName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextB.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize throws an error.\n\t\t\tassert.strictEqual(success, false);\n\t\t});\n\n\t\tit(\"Valid subDataStore at depth 2\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreBId = \"B-Id\";\n\t\t\t// Create dataStore B that is in the registry of dataStore A (which is at depth 2).\n\t\t\tconst contextB: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreBId,\n\t\t\t\tpkg: [defaultName, dataStoreAName, dataStoreBName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreBId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreBId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextB.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize was successful.\n\t\t\tassert.strictEqual(success, true);\n\n\t\t\tconst dataStoreCId = \"C-Id\";\n\t\t\t// Create dataStore C that is in the registry of dataStore A (which is at depth 2).\n\t\t\tconst contextC: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreCId,\n\t\t\t\tpkg: [defaultName, dataStoreAName, dataStoreCName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreCId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreCId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextC.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize was successful.\n\t\t\tassert.strictEqual(success, true);\n\t\t});\n\n\t\tit(\"Invalid subDataStore at depth 2\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"fake-Id\";\n\t\t\t// Create a fake dataStore that is not in the registry of dataStore A (which is at depth 2).\n\t\t\tconst contextFake: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName, dataStoreAName, \"fake\"],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextFake.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize throws an error.\n\t\t\tassert.strictEqual(success, false);\n\t\t});\n\n\t\tit(\"Invalid subDataStore at depth 3\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"fake-Id\";\n\t\t\t// Create a fake dataStore that is not in the registry of dataStore B (which is at depth 3).\n\t\t\tconst contextFake: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName, dataStoreAName, \"fake\"],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextFake.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize throws an error.\n\t\t\tassert.strictEqual(success, false);\n\t\t});\n\n\t\tit(\"SubDataStore which is in the registry of the parent dataStore\", async () => {\n\t\t\tlet success: boolean = true;\n\t\t\tconst dataStoreId = \"C-Id\";\n\t\t\t// Create dataStore C that is in parent's registry but not in the registry of dataStore B.\n\t\t\tconst contextC: LocalFluidDataStoreContext = new LocalFluidDataStoreContext({\n\t\t\t\tid: dataStoreId,\n\t\t\t\tpkg: [defaultName, dataStoreAName, dataStoreBName, dataStoreCName],\n\t\t\t\tparentContext: wrapContextForInnerChannel(dataStoreId, containerRuntime),\n\t\t\t\tstorage,\n\t\t\t\tscope,\n\t\t\t\tcreateSummarizerNodeFn: getCreateSummarizerNodeFn(dataStoreId),\n\t\t\t\tmakeLocallyVisibleFn,\n\t\t\t\tsnapshotTree: undefined,\n\t\t\t\tisRootDataStore: false,\n\t\t\t});\n\n\t\t\ttry {\n\t\t\t\tawait contextC.realize();\n\t\t\t} catch (error) {\n\t\t\t\tsuccess = false;\n\t\t\t}\n\t\t\t// Verify that realize throws an error.\n\t\t\tassert.strictEqual(success, false);\n\t\t});\n\t});\n});\n"]}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { strict as assert } from "assert";
|
|
6
|
-
import { ContainerErrorTypes } from "@fluidframework/container-definitions";
|
|
7
|
-
import { FluidDataStoreRegistry } from "../dataStoreRegistry.js";
|
|
8
|
-
describe("Data Store Registry Creation Tests", () => {
|
|
9
|
-
// Define two entries with the same name
|
|
10
|
-
const defaultName = "default";
|
|
11
|
-
const entries = [
|
|
12
|
-
[defaultName, []],
|
|
13
|
-
[defaultName, []],
|
|
14
|
-
];
|
|
15
|
-
it("Validate duplicate name entries", () => {
|
|
16
|
-
try {
|
|
17
|
-
new FluidDataStoreRegistry(entries);
|
|
18
|
-
assert.fail();
|
|
19
|
-
}
|
|
20
|
-
catch (error) {
|
|
21
|
-
assert.strictEqual(error.errorType, ContainerErrorTypes.usageError);
|
|
22
|
-
assert.strictEqual(error.message, "Duplicate entry names exist");
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
});
|
|
26
|
-
//# sourceMappingURL=dataStoreRegistry.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dataStoreRegistry.spec.js","sourceRoot":"","sources":["../../src/test/dataStoreRegistry.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IACnD,wCAAwC;IACxC,MAAM,WAAW,GAAG,SAAS,CAAC;IAC9B,MAAM,OAAO,GAAG;QACf,CAAC,WAAW,EAAE,EAAE,CAAC;QACjB,CAAC,WAAW,EAAE,EAAE,CAAC;KACjB,CAAC;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC1C,IAAI;YACH,IAAI,sBAAsB,CAAC,OAA6C,CAAC,CAAC;YAC1E,MAAM,CAAC,IAAI,EAAE,CAAC;SACd;QAAC,OAAO,KAAU,EAAE;YACpB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,mBAAmB,CAAC,UAAU,CAAC,CAAC;YACpE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,6BAA6B,CAAC,CAAC;SACjE;IACF,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { strict as assert } from \"assert\";\nimport { NamedFluidDataStoreRegistryEntries } from \"@fluidframework/runtime-definitions\";\nimport { ContainerErrorTypes } from \"@fluidframework/container-definitions\";\nimport { FluidDataStoreRegistry } from \"../dataStoreRegistry.js\";\n\ndescribe(\"Data Store Registry Creation Tests\", () => {\n\t// Define two entries with the same name\n\tconst defaultName = \"default\";\n\tconst entries = [\n\t\t[defaultName, []],\n\t\t[defaultName, []],\n\t];\n\n\tit(\"Validate duplicate name entries\", () => {\n\t\ttry {\n\t\t\tnew FluidDataStoreRegistry(entries as NamedFluidDataStoreRegistryEntries);\n\t\t\tassert.fail();\n\t\t} catch (error: any) {\n\t\t\tassert.strictEqual(error.errorType, ContainerErrorTypes.usageError);\n\t\t\tassert.strictEqual(error.message, \"Duplicate entry names exist\");\n\t\t}\n\t});\n});\n"]}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { createWeightedAsyncGenerator, combineReducersAsync, } from "@fluid-private/stochastic-test-utils";
|
|
6
|
-
import { MockFluidDataStoreRuntime } from "@fluidframework/test-runtime-utils";
|
|
7
|
-
const defaultConfig = {
|
|
8
|
-
weights: {
|
|
9
|
-
reconnect: 1,
|
|
10
|
-
newSummarizer: 1,
|
|
11
|
-
summaryNack: 1,
|
|
12
|
-
submitOp: 1,
|
|
13
|
-
},
|
|
14
|
-
};
|
|
15
|
-
export function summarizerOperationGenerator(options) {
|
|
16
|
-
const reconnect = async (_state) => ({
|
|
17
|
-
type: "reconnect",
|
|
18
|
-
});
|
|
19
|
-
const newSummarizer = async (_state) => ({
|
|
20
|
-
type: "newSummarizer",
|
|
21
|
-
});
|
|
22
|
-
const summaryNack = async (_state) => ({
|
|
23
|
-
type: "summaryNack",
|
|
24
|
-
});
|
|
25
|
-
const submitOp = async (_state) => ({
|
|
26
|
-
type: "submitOp",
|
|
27
|
-
});
|
|
28
|
-
const usableWeights = options.weights ?? defaultConfig.weights;
|
|
29
|
-
return createWeightedAsyncGenerator([
|
|
30
|
-
[reconnect, usableWeights.reconnect],
|
|
31
|
-
[newSummarizer, usableWeights.newSummarizer],
|
|
32
|
-
[summaryNack, usableWeights.summaryNack],
|
|
33
|
-
[submitOp, usableWeights.submitOp],
|
|
34
|
-
]);
|
|
35
|
-
}
|
|
36
|
-
export const baseModel = {
|
|
37
|
-
reducer: makeReducer(),
|
|
38
|
-
};
|
|
39
|
-
function makeReducer() {
|
|
40
|
-
const wrapper = (baseReducer) => async (state, operation) => {
|
|
41
|
-
await baseReducer(state, operation);
|
|
42
|
-
state.containerRuntimeFactory.processAllMessages();
|
|
43
|
-
};
|
|
44
|
-
const reducer = combineReducersAsync({
|
|
45
|
-
reconnect: async (state, _op) => {
|
|
46
|
-
// TODO AB#6954
|
|
47
|
-
state.containerRuntime.connected = false;
|
|
48
|
-
state.containerRuntime.connected = true;
|
|
49
|
-
},
|
|
50
|
-
newSummarizer: async (state, _op) => {
|
|
51
|
-
// TODO AB#6954
|
|
52
|
-
state.containerRuntime.disposeFn();
|
|
53
|
-
state.containerRuntime = state.containerRuntimeFactory.createContainerRuntime(new MockFluidDataStoreRuntime());
|
|
54
|
-
},
|
|
55
|
-
summaryNack: async (state, _op) => {
|
|
56
|
-
// TODO AB#6954: not sure if it deadlocks between needing to process the SummaryNack and waiting for it
|
|
57
|
-
state.containerRuntime.prepareSummaryNack();
|
|
58
|
-
await state.containerRuntime.summarize();
|
|
59
|
-
},
|
|
60
|
-
submitOp: async (state, _op) => {
|
|
61
|
-
// TODO AB#6954: Need to move things around package-wise since DDS Factories are in different packages
|
|
62
|
-
},
|
|
63
|
-
});
|
|
64
|
-
return wrapper(reducer);
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=fuzzUtils.js.map
|